如何从 CRM Online 中的功能区命令中删除显示规则?

How To Remove Display Rule From a Ribbon Command in CRM Online?

我有一个按钮命令定义如下:

<CommandDefinition Id="new.lead.CreditCheck.Command">
    <EnableRules>
        <EnableRule Id="new.lead.CreditCheck.EnableRule" />
    </EnableRules>
    <DisplayRules>
        <DisplayRule Id="new.lead.CreditCheck.DisplayRule" />
    </DisplayRules>
    <Actions>
        <JavaScriptFunction FunctionName="new.LeadDynamic.creditCheck" Library="$webresource:new_Lead_dyn.js" />
    </Actions>
</CommandDefinition>

如果我从命令中删除显示规则,(但保留实际的显示规则定义)它看起来像这样:

<CommandDefinition Id="new.lead.CreditCheck.Command">
    <EnableRules>
        <EnableRule Id="new.lead.CreditCheck.EnableRule" />
    </EnableRules>
    <DisplayRules />
    <Actions>
        <JavaScriptFunction FunctionName="new.LeadDynamic.creditCheck" Library="$webresource:new_Lead_dyn.js" />
    </Actions>
</CommandDefinition>

我在尝试导入时遇到错误(尝试使用功能区 Workbench 也遇到了同样的错误)

The ribbon item 'new.lead.CreditCheck.Command' is dependent on .

我正在尝试删除依赖项,但显然我无法删除它,因为它存在!我错过了什么?

我会认为这是 CRM 中的一个错误,但为了执行此操作,您必须删除该命令,然后 发布解决方案! 一旦命令被删除, 您可以删除显示规则。您不能一步完成!

如果您的命令特别复杂,您可以导出解决方案,删除命令,导入解决方案,删除显示规则并添加回没有显示规则的命令并导入。

您的解决方案有一个 CommandDefinition,它依赖于 ID 为 "new.lead.CreditCheck.DisplayRule" 的 DisplayRule。您不能从 RibbonDiffXml 中删除 DisplayRule,只要有一个已发布的 and/or 未发布的组件依赖于它,在本例中为 CommandDefinition.

因此您需要先删除对 DisplayRule 的所有引用,然后再发布这些自定义项。完成此操作后,您应该能够删除 DisplayRule 本身。

当您需要从实体中删除过时的属性时,必须遵循相同的过程:

  1. 从所有表单、视图等中删除属性
  2. 发布自定义项
  3. 从实体模型中删除属性
  4. 发布自定义项

在这方面,Dynamics CRM 的行为是 i.m.o。 'by design'.