功能区疑难解答指南

第一步是从最常见的功能区命令栏问题列表中选择其中一个项目。

以下哪一项最恰当地描述了您的功能区问题?

由于与计算为 false 的按钮相关联的命令启用规则显示规则,因此可隐藏按钮。 这可能是关联的命令具有显示规则 "HideOnModern",这将在统一界面应用程序中隐藏该按钮。 也可以创建HideCustomAction来强制隐藏该按钮。 如果用户处于脱机状态,则不会显示自定义命令和不启用规则 "IsEntityAvailableForUserInMocaOffline" 的默认命令。 

警告:如果实体启用了“移动端只读”,意味着实体会在强制下只许可“读”权限,那么带有以下 PrivilegeType 值之一的任何显示规则(“创建” | “写” | “删除” | “分配” | “共享”)将会评估为 false。 下面的例子是一些最常见的,当“移动端只读”标记在实体上启用时,会评估为 false 的默认系统规则,实际情况不仅限于该列表(Mscrm.CreateSelectedEntityPermission, Mscrm.CanSavePrimary,Mscrm.CanWritePrimary, Mscrm.CanWriteSelected, Mscrm.WritePrimaryEntityPermission, Mscrm.WriteSelectedEntityPermission, Mscrm.CanDeletePrimary, Mscrm.DeletePrimaryEntityPermission, Mscrm.DeleteSelectedEntityPermission, Mscrm.AssignSelectedEntityPermission, Mscrm.SharePrimaryPermission, Mscrm.ShareSelectedEntityPermission)。 若正受到规则验证的权限也被授予给用户,你可以编辑实体并取消选择“移动端只读”来许可这些规则评估为 true。 警告: 请勿从命令中删除“Mscrm.HideOnModern”显示规则来强制一个按钮显示在统一界面。 具有显示规则 Mscrm.HideOnModern 的命令适用于旧版 Web 客户端界面,且在统一界面中不支持,所以可能无法正常运行。

我们将使用名为 "命令检查器" 的应用内工具检查功能区组件定义,以帮助我们确定隐藏按钮的原因。

要启用 Command Checker,你必须追加参数 &ribbondebug=true到你的 D365 应用 URL。 比如:https://yourorgname.crm.dynamics.com/main.aspx?appid=9ab590fc-d25e-ea11-a81d-000d3ac2b3e6&ribbondebug=true

  1. 导航到应用程序中应显示该按钮的页面。

  2. 找到该按钮预期显示的命令栏。

  3. 单击 "命令检查器" "命令检查器" 按钮图标按钮(它可能会列在 "更多" 溢出弹出菜单)

  4. 在命令检查器最左侧窗格中显示的按钮列表中找到并单击您的按钮。 不可见的按钮将由 deemphasized 和斜体字体以及术语 "(隐藏)" 表示。 以下示例显示联系人实体的网格页面上的 "新建" 按钮不可见,由标记为 "新建(隐藏)" 的项目表示。 注意:如果你的按钮未列出,可能是由于已安装了HideCustomAction自定义项,或者关联的命令具有显示规则 "Mscrm. HideOnModern"。 编写本指南时,命令检查器不会列出已由 HideCustomAction 或 "HideOnModern" 显示规则隐藏的按钮。 我们当前正在努力增加此列表,以便在未来更新中包括此信息。 命令检查器-联系人-"新建" 按钮

  5. 单击 "命令属性" 选项卡以显示该按钮的命令的详细信息。 这将显示每个规则评估的 "启用规则" 和 "显示规则" 以及结果(True、False、已跳过)。 下面的示例显示 "新建(隐藏)" 按钮的命令为 "NewRecordFromGrid",并且有一个名为 "EnableRule" 的启用规则,该规则的计算结果为 False,因此按钮将被隐藏。 命令检查器-联系人-新命令-规则

  6. 通过单击 "v 形",展开 "EnableRule"、"EntityRule" 的 "启用" 规则 用于查看规则详细信息的图标。若要了解规则评估为 True 或 False 的原因,需要对规则类型稍作了解。有关每种类型的规则的详细信息,请参阅定义功能区启用规则定义功能区显示规则。以下示例显示规则类型为 "Entity",实体逻辑名称为 "帐户",因为当前实体是 "contact" (不等于 "帐户"),所以此规则返回 False。 命令检查器-联系人-已展开的新命令-规则

  7. 修复按钮的可见性所需的方法将取决于你的特定方案中的各种自定义设置。考虑我们的示例,假设此规则是错误地创建的,因此在规则中声明的实体旨在 "contact",但设置为 "帐户"。我们可以编辑 enable rule "EntityRule" 并进行更改,这将允许规则评估为 true。或者,此规则已被意外添加到命令中。我们可以修改命令 "NewRecordFromGrid" 并从命令定义中删除启用规则 "EnableRule. EntityRule"。或者,如果命令是对 Microsoft 已发布定义的替代,则可以删除此自定义版本的命令以还原默认功能。 选择以下修复选项之一:

如果所有启用规则和与按钮相关联的命令显示规则的计算结果为 true,则将显示一个按钮。 如果这是意外情况,则可能是命令定义已被重写,或者缺少启用规则或显示规则,或者规则定义本身将被覆盖,并且在你希望隐藏按钮时使按钮可见。

警告: 请勿从命令中删除“Mscrm.HideOnModern”显示规则来强制一个按钮显示在统一界面。 具有显示规则 Mscrm.HideOnModern 的命令适用于旧版 Web 客户端界面,且在统一界面中不支持,所以可能无法正常运行。

我们将使用名为 "命令检查器" 的应用内工具检查功能区组件定义,以帮助我们确定该按钮意外显示的原因。

要启用 Command Checker,你必须追加参数 &ribbondebug=true到你的 D365 应用 URL。 比如:https://yourorgname.crm.dynamics.com/main.aspx?appid=9ab590fc-d25e-ea11-a81d-000d3ac2b3e6&ribbondebug=true

  1. 导航到应用程序中显示按钮的页面。

  2. 找到按钮在其中可见的命令栏。

  3. 单击 "命令检查器" "命令检查器" 按钮图标 按钮(它可能在 "更多" 溢出弹出菜单中列出)

  4. 在命令检查器最左侧窗格中显示的按钮列表中找到并单击您的按钮。 不可见的按钮将由 deemphasized 和斜体字体以及术语 "(隐藏)" 表示。 显示的按钮将显示为带有普通字体的标签。 以下示例显示 "活动" 网格页上有两个 "约会" 按钮,并且应隐藏一个按钮。 Command Checker - Appointment - Button

  5. 单击 "命令属性" 选项卡以显示该按钮的命令的详细信息。 这将显示每个规则评估的操作、启用规则和显示规则以及结果(True、False、已跳过)。 查看 "启用规则" 和 "显示规则",如果预计应将某个特定规则评估为 false,则可能是该规则的自定义不正确,或者不满足返回 false 结果的必要条件。 如果是这种情况,请跳到步骤9,否则可能该命令缺少规则或规则,我们将查看命令解决方案层以进行进一步分析。 Command Checker - Appointment - Command

  6. 单击命令名称下方的 "查看命令定义解决方案层" 链接以查看安装了该命令定义的解决方案。 Command Checker - Appointment - Command - View Solution Layers

  7. 每当某个解决安装时,解决方案层窗格将显示每个功能区组件的定义。 列表顶部的层是当前应用使用的定义,其他层处于非活动状态且当前没有被应用使用。 如果卸载了顶部的解决方案,或安装了删除定义的更新版本,那么下一层将会成为当前应用使用的活动定义。 如果只有一个解决方案层,请跳到步骤9,否则,请选择前两个解决方案层(如果活动解决方案中有一个图层,但未在顶部列出),请选择活动的解决方案层和顶部的行,然后单击 "比较"。 Command Checker - Appointment - Command - Solution Layers

  8. 将显示当前活动定义和上一个非活动定义的比较,显示差异(如果有)。 以下示例显示了已自定义的非托管活动定义,该定义包含在非活动 msdynce_ActivitiesPatch Microsoft 已发布的解决方案层中的显示规则 "Mscrm HideOnModern"。 Command Checker - Appointment - Command - Solution Layers - Compared

  9. 修复按钮的可见性所需的方法将取决于你的特定方案中的各种自定义设置。 如果你确定规则的计算结果不正确,并且规则定义的定义不正确,则应修改规则定义并进行更改,以便在适当的情况下允许规则评估为 false。 如果规则定义正确,则不满足将导致规则返回 false 的要求,例如,未正确分配字段值或安全权限。 根据你的规则定义,要求可能会有很大差异,请参阅定义功能区启用规则定义功能区显示规则。  考虑我们的示例,该命令是通过删除显示规则 "HideOnModern" 进行自定义的。 此显示规则旨在隐藏此特定按钮,使其在统一界面应用程序中显示,并且仅在旧版 Web 客户端界面中可见。 我们可以修改命令的自定义版本,并将缺少的显示规则 "HideOnModern" 添加到命令定义。 由于这是 Microsoft 发布定义的自定义替代,并且没有任何其他有意的修改,因此建议删除该命令的自定义版本以还原默认功能。

请选择以下修复选项之一:

有多种因素可能导致按钮操作无法正常工作。 这通常是由于功能区自定义设置不正确声明按钮的关联命令定义所致。 

警告: 请勿从命令中删除“Mscrm.HideOnModern”显示规则来强制一个按钮显示在统一界面。 具有显示规则 Mscrm.HideOnModern 的命令适用于旧版 Web 客户端界面,且在统一界面中不支持,所以可能无法正常运行。

如果命令未正确声明,单击一个按钮可能不会执行任何操作,也不会显示错误。

请选择与你的情况最相符的以下选项之一,帮助我们提供最佳解决方案:

  1. 单击规则名称下方的 "查看规则定义解决方案层" 链接以查看安装了规则定义的解决方案。 命令检查器-联系人-新命令-规则解决方案图层链接

  2. 每当某个解决安装时,解决方案层窗格将显示每个功能区组件的定义。 列表顶部的层是当前应用使用的定义,其他层处于非活动状态且当前没有被应用使用。 如果卸载了顶部的解决方案,或安装了删除定义的更新版本,那么下一层将会成为当前应用使用的活动定义。 下图显示了示例中启用规则的解决方案层,并指示在此情况下有一个解决方案层,并且它是由名为 "Active" 的解决方案表示的非托管自定义项。 你的实际方案可能不同,你可能不是 "活动" 解决方案层,你可能有托管解决方案,将在此处列出该解决方案的名称。  命令检查器-联系人-新命令-规则解决方案层

  3. 既然我们已经查看了解决方案层并确定了安装自定义设置的解决方案,我们必须在适当的解决方案中修复定义。  选择与你的特定方案匹配的以下选项之一。

 

为了修复命令,我们需要确定已安装自定义项的解决方案。

  1. 单击命令名称下方的 "查看命令定义解决方案层" 链接以查看安装了该命令定义的解决方案。 Command Checker - Contact - New Command Solution Layers Link

  2. 每当某个解决安装时,解决方案层窗格将显示每个功能区组件的定义。 列表顶部的层是当前应用使用的定义,其他层处于非活动状态且当前没有被应用使用。 如果卸载了顶部的解决方案,或安装了删除定义的更新版本,那么下一层将会成为当前应用使用的活动定义。 下图显示了示例中命令的解决方案层,并指示此联系人中有一个解决方案层,并且它是一个由标题为 "活动" 的解决方案表示的非托管自定义项。 你的实际方案可能不同,你可能没有 "活动" 解决方案层,你可能有一个托管解决方案,并且该解决方案的名称将在此处列出。  Command Checker - Contact - New Command Solution Layers

  3. 既然我们已经查看了解决方案层并确定了安装自定义设置的解决方案,我们必须在适当的解决方案中修复定义。  选择与你的特定方案匹配的以下选项之一。

若要修复 "Active" 非托管解决方案层中的 enable/display 规则,我们将导出包含实体或应用程序功能区的非托管解决方案,并在自定义 .xml 文件中编辑 RibbonDiffXml,然后导入此解决方案的新版本,其中包含已修复的 enable/display 规则定义。 请参阅导出、准备编辑和导入功能区

根据我们的示例方案,我们确定实体为 "contact",并且需要修复的 enable 规则是 "EntityRule",它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为 "启用规则" 和 "活动" 解决方案层的 "命令检查器" 的解决方案层中显示的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的启用/显示规则所定义的实体(在我们的示例中为 "联系人"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开 "自定义 .xml " 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml>节点中找到其子<

  13. 找到 "启用/显示规则" (在我们的示例中,启用规则的 Id 为 "EntityRule",我们将找到以下节点) 启用需要修补程序的规则定义

  14. 编辑 <RibbonDiffXml>并对启用/显示规则进行必要的更改,以允许规则在正确的环境下评估为 True,以修复该规则。 有关声明规则的其他帮助,请参阅定义功能区启用规则定义功能区显示规则。 (根据我们的示例,我们会将规则定义更改为以下情况) 启用规则定义修复

  15. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

如果 "启用/显示规则" 不是特定于实体的,而是适用于在应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为 "启用/显示规则" 和 "活动" 解决方案层的 "命令检查器" 的解决方案图层中显示的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开 "自定义 .xml " 文件

  11. 找到RibbonDiffXml>节点的根<

  12. 找到 "启用/显示" 规则

  13. 编辑 <RibbonDiffXml>并对启用/显示规则进行必要的更改,以允许规则在正确的环境下评估为 True,以修复该规则。 有关声明规则的其他帮助,请参阅定义功能区启用规则定义功能区显示规则

  14. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  15. 导入解决方案文件

  16. 发布所有自定义项

 

若要修复已由你创建的自定义托管解决方案安装的启用/显示规则,你必须在具有用于创建自定义托管解决方案的自定义解决方案的非托管源代码版本的单独开发组织中为 "启用/显示规则位于非托管活动解决方案" 中的选项完成上面列出的步骤。 完成这些步骤后,你将导出解决方案的新托管版本,该版本可以导入到目标受影响的组织中以修复自定义项。

  1. 在具有自定义解决方案的非托管源代码版本的单独的开发组织中,完成上述针对 "启用/显示规则位于非托管活动解决方案中" 的选项的步骤。

  2. 递增自定义解决方案的版本

  3. 将解决方案导出托管解决方案

  4. 在单独的受影响的组织中,导入新版本的自定义托管解决方案

若要修复由第三方/ISV 创建的自定义托管解决方案安装的启用/显示规则,需要联系解决方案的作者,并请求新版本的解决方案,其中包含已修复的 enable/display 规则定义,并将此新解决方案安装到受影响的组织中。 

若要修复由 Microsoft 发布的托管解决方案安装的启用/显示规则,可能需要安装新版本的解决方案,这通常会在版本更新期间完成。 您可能已经标识了仍需要修复的 bug。 请与客户支持部门联系以获取帮助。

如果存在另一个包含该命令的工作定义的解决方案层,则可以删除该定义以还原非活动工作定义。

如果这是唯一的图层,并且不再需要该命令,则可以在没有其他按钮引用该命令的情况下将其从解决方案中删除。

为了删除命令,我们需要确定哪些解决方案已安装自定义项:

  1. 单击命令名称下方的 "查看命令定义解决方案层" 链接以查看安装了该命令定义的解决方案。 Command Checker - Contact - New Command Solution Layers Link

  2. 每当某个解决安装时,解决方案层窗格将显示每个功能区组件的定义。 列表顶部的层是当前应用使用的定义,其他层处于非活动状态且当前没有被应用使用。 如果卸载了顶部的解决方案,或安装了删除定义的更新版本,那么下一层将会成为当前应用使用的活动定义。 下图显示了该命令在我们的示例中的解决方案层,并指示 "contact" 实体的解决方案层是由标题为 "活动" 的解决方案表示的非托管自定义项。 你的实际方案可能不同,你可能没有 "活动" 解决方案层,你可能有一个托管解决方案,并且该解决方案的名称将在此处列出。  Command Checker - Contact - New Command Solution Layers

  3. 既然我们已经查看了解决方案层并确定了安装自定义设置的解决方案,我们必须在适当的解决方案中修复定义。  选择与你的特定方案匹配的以下选项之一:

若要修复 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入包含固定命令定义的此解决方案的新版本。 请参阅导出、准备编辑和导入功能区

警告: 请勿从命令中删除“Mscrm.HideOnModern”显示规则来强制一个按钮显示在统一界面。 具有显示规则 Mscrm.HideOnModern 的命令适用于旧版 Web 客户端界面,且在统一界面中不支持,所以可能无法正常运行。

根据我们的示例方案,我们确定实体为 "contact",需要修复的命令为 "NewRecordFromGrid",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "联系人"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开 "自定义 .xml " 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml>节点中找到其子<

  13. 找到 CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. NewRecordFromGrid",我们将找到以下节点) Command Checker - Contact - New Command Definition

  14. 编辑 <RibbonDiffXml>并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令。 (基于我们的示例,我们将通过删除导致按钮隐藏的 Enable 规则 "EnableRule" 来修改 CommandDefinition。 Command Checker - Contact - New Command Definition Fixed

  15. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开 "自定义 .xml " 文件

  11. 找到RibbonDiffXml>节点的根<

  12. 找到 CommandDefinition

  13. 编辑 <RibbonDiffXml>并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令

  14. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  15. 导入解决方案文件

  16. 发布所有自定义项

 

若要修复已由你创建的自定义托管解决方案安装的命令,你必须在包含用于创建自定义托管解决方案的自定义解决方案的非托管源代码版本的独立开发组织中为 "该命令位于非托管活动解决方案" 中的选项完成上面列出的步骤。 完成这些步骤后,你将导出解决方案的新托管版本,该版本可以导入到目标受影响的组织中以修复自定义项。

  1. 在具有自定义解决方案的非托管源代码版本的单独开发组织中,完成上面列出的选项标记为 "该命令位于非托管活动解决方案中"

  2. 递增自定义解决方案的版本

  3. 将解决方案导出托管解决方案

  4. 在单独的受影响的组织中,导入新版本的自定义托管解决方案

若要修复由第三方/ISV 创建的自定义托管解决方案安装的命令,你需要联系解决方案的作者,并请求包含修复的命令定义的新解决方案版本,并将此新解决方案安装到你的受影响的组织中。 

若要修复由 Microsoft 发布的托管解决方案安装的命令,可能需要安装新版本的解决方案,这通常会在版本更新期间完成。 您可能已经标识了仍需要修复的 bug。 请与客户支持部门联系以获取帮助。

若要删除 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入此解决方案的新版本,其中已删除该命令,以便删除该组件。 请参阅导出、准备编辑和导入功能区

根据我们的示例方案,我们确定实体为 "contact",需要删除的命令为 "NewRecordFromGrid",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "联系人"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开"自定义 .xml" 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml> 节点中找到其子 <

  13. 找到CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. NewRecordFromGrid",我们将找到以下节点) Command Checker - Contact New Command - XML

  14. 编辑<RibbonDiffXml> 并删除具有要删除的命令 Id 的特定 CommandDefinition 节点。 请确保不要无意间删除可能存在的其他 CommandDefinitions。 (根据我们的示例,我们将删除 Id = "NewRecordFromGrid" 的 CommandDefinition 节点) Command Checker - Contact New Command - XML removed

  15. 保存自定义 .xml 文件

  16. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  17. 导入解决方案文件

  18. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开"自定义 .xml" 文件

  11. 找到RibbonDiffXml> 节点的根 <

  12. 找到CommandDefinition

  13. 编辑<RibbonDiffXml "> 并删除具有要删除的命令 Id 的 CommandDefinition 节点。 请确保不要无意间删除可能存在的其他 CommandDefinitions。

  14. 保存自定义 .xml 文件

  15. 将修改后的自定义 xml 文件添加回压缩的解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

 

若要删除由你创建的自定义托管解决方案安装的命令,你必须在具有用于创建自定义托管解决方案的自定义解决方案的非托管源代码版本的单独开发组织中为 "该命令位于非托管活动解决方案" 中的选项完成上面列出的步骤。 完成这些步骤后,你将导出解决方案的新托管版本,该版本可以导入到目标受影响的组织中以修复自定义项。

  1. 在具有自定义解决方案的非托管源代码版本的单独开发组织中,完成上面列出的选项标记为 "该命令位于非托管活动解决方案中"

  2. 递增自定义解决方案的版本

  3. 将解决方案导出托管解决方案

  4. 在单独的受影响的组织中,导入新版本的自定义托管解决方案

若要删除由第三方/ISV 创建的自定义托管解决方案所安装的命令,你需要联系解决方案的作者,并请求新版本的解决方案,该版本已删除特定的命令定义,然后将此新解决方案安装到你的受影响的组织中。 

如果您遇到类似于以下内容的脚本错误:

"JavaScript 操作库无效: [脚本名称]不是 web 资源,不受支持。"

Script Error - Invalid JavaScript Action Library - is not a web resource

这是由在命令的 JavaScriptFunction 上声明了不正确库的功能区命令自定义导致的。

我们将使用名为 "命令检查器" 的应用内工具检查功能区组件定义,以帮助我们确定如何修复此问题。

要启用 Command Checker,你必须追加参数 &ribbondebug=true到你的 D365 应用 URL。 比如:https://yourorgname.crm.dynamics.com/main.aspx?appid=9ab590fc-d25e-ea11-a81d-000d3ac2b3e6&ribbondebug=true

  1. 导航到应用程序中显示按钮的页面。

  2. 找到显示按钮的命令栏。

  3. 单击 "命令检查器" "命令检查器" 按钮图标 按钮(它可能在 "更多" 溢出弹出菜单中列出)

  4. 在命令检查器最左侧窗格中显示的按钮列表中找到并单击您的按钮,以显示按钮和命令属性。 以下示例显示帐户实体的表单页面上的 "新建" 按钮是可见的,由标记为 "New" 的项目表示。 Command Checker - Command - Invalid JavaScript Action Library - New button

  5. 单击 "命令属性" 选项卡以显示该按钮的命令的详细信息。 这将显示每个规则评估的操作和 JavaScriptFunction 声明以及任何启用/显示规则以及结果(True、False、已跳过)。  展开 JavaScriptFunction,方法是单击 "v 形" 图标以查看函数声明的详细信息。 Library 属性必须是 JavaScript web 资源,并且带有前缀 "$webresource:"。 以下示例显示 Library 属性为 "/_static/_common/scripts/RibbonActions.js",这不是有效 JavaScript web 资源的路径。 接下来应查看命令的解决方案层,以尝试确定正确的值以解决问题。 Command Checker - Command - Invalid JavaScript Action Library

  6. 单击命令名称下方的 "查看命令定义解决方案层" 链接以查看安装了该命令定义的解决方案。 Command Checker - Command - Invalid JavaScript Action Library - View Solution Layers

  7. 每当某个解决安装时,解决方案层窗格将显示每个功能区组件的定义。 列表顶部的层是当前应用使用的定义,其他层处于非活动状态且当前没有被应用使用。 如果卸载了顶部的解决方案,或安装了删除定义的更新版本,那么下一层将会成为当前应用使用的活动定义。 下图显示了该命令在我们的示例中的解决方案层,并指示有两个解决方案层,一个是由名为 "Active" 的解决方案表示的非托管自定义,另一个是由 Microsoft 发布的系统解决方案。 你的实际方案可能不同,你可能没有 "活动" 解决方案层,你可能有一个托管解决方案,并且该解决方案的名称将在此处列出。  选择前两行,然后单击 "比较" 以查看每个解决方案所带来的定义的比较。 如果只有一个解决方案层,则会跳过此步骤。 Command Checker - Command - Invalid JavaScript Action Library - Solution Layers

  8. 命令定义之间的比较将显示两个层之间可能存在的任何差异。 以下示例清晰显示库的值不同。 活动解决方案中的非托管条目被设置为不正确的路径 "/_static/_common/scripts/RibbonActions.js" (你的特定路径可能稍有不同),并且 Microsoft 的默认定义将库设置为 "$webresoure: Main_system_library",这是此特定命令的受支持路径(根据你的特定命令,此值可能会有所不同)。 唯一支持的路径是以 "$webresource:" 开头,以有效的 JavaScript web 资源的名称结尾。 Command Checker - Command - Invalid JavaScript Action Library - Solution Layers Comparison

  9. 既然我们已经查看了解决方案层并确定了安装自定义设置的解决方案,我们必须在适当的解决方案中修复定义。  选择与你的特定方案匹配的以下选项之一:

单击某个按钮时,不会发生任何反应,这通常是由于与按钮相关联的命令配置不正确导致的。

当声明操作的 JavaScriptFunction 时,以下命令配置错误可能会导致按钮看起来好像在单击时不执行任何操作:

  • 无效的 FunctionName -如果 javascript 函数的名称与分配给 Library 属性的 JavaScript web 资源中的有效函数名称不匹配,则该按钮将不执行任何操作。

  • 无效的库-如果此路径未引用有效的 JavaScript web 资源,或者未使用 "$webresource:" 作为前缀,则该按钮将不起作用。

  • 缺少参数-如果 JavaScript 函数需要特定参数,而命令定义未声明它们,则该按钮不会正常工作。

  • 不正确的参数类型或顺序-如果参数声明的类型不正确,或者其顺序与 JavaScript 函数声明中列出的顺序不同,则该按钮可能不会按预期工作。

有关其他配置帮助,请参阅定义功能区操作

如果上述配置正确,则可能存在 JavaScript 代码错误。 如果自定义 JavaScript 函数编码不正确,并且只是不调用预期行为,则该按钮将无法正常工作。  如果你发现上述配置错误之一,请修复命令定义以解决此问题。 否则,你可能需要调试并修复 JavaScript 函数代码,该按钮才能正常工作。

我们来确定按钮的命令和安装了定义的解决方案。

我们将使用名为 "命令检查器" 的应用内工具检查功能区组件定义,以帮助我们确定按钮单击导致错误的原因。

要启用 Command Checker,你必须追加参数 &ribbondebug=true到你的 D365 应用 URL。 比如:https://yourorgname.crm.dynamics.com/main.aspx?appid=9ab590fc-d25e-ea11-a81d-000d3ac2b3e6&ribbondebug=true

  1. 导航到应用程序中显示按钮的页面。

  2. 找到按钮在其中可见的命令栏。

  3. 单击 "命令检查器" "命令检查器" 按钮图标 按钮(它可能在 "更多" 溢出弹出菜单中列出)

  4. 在命令检查器最左侧窗格中显示的按钮列表中找到并单击您的按钮。 不可见的按钮将由 deemphasized 和斜体字体以及术语 "(隐藏)" 表示。 显示的按钮将显示为带有普通字体的标签。 单击 "命令属性" 选项卡以显示该按钮的命令的详细信息。 Command Checker - Button Error - Button

  5. "命令属性" 将显示操作和相应的 JavaScriptFunction 配置。 单击命令名称下方的 "查看命令定义解决方案层" 链接以查看安装了该命令定义的解决方案。 Command Checker - Button Error - Command

  6. 每当某个解决安装时,解决方案层窗格将显示每个功能区组件的定义。 列表顶部的层是当前应用使用的定义,其他层处于非活动状态且当前没有被应用使用。 如果卸载了顶部的解决方案,或安装了删除定义的更新版本,那么下一层将会成为当前应用使用的活动定义。 如果只有一个解决方案层,请跳到步骤8,否则,请选择前两个解决方案层(如果活动解决方案中有一个层,但未在顶部列出),请选择活动的解决方案层,然后单击 "比较"。 Command Checker - Button Error - Command - Solution Layers

  7. 将显示当前活动定义和上一个非活动定义的比较,显示差异(如果有)。 以下示例显示通过将 FunctionName 指定为与 Microsoft 已发布的系统解决方案层中的其他非活动定义不正确进行自定义的非托管活动定义。 FunctionName 应为 "XrmCore",但自定义定义已声明 FunctionName = "deletePrimaryRecord",当单击该按钮时,该按钮不会发生任何情况,因为无法找到该函数。 命令检查器-命令-不执行任何操作-解决方案层比较

  8. 修复按钮操作功能所需的方法将取决于你的特定方案中的各种自定义设置。 考虑我们的示例,通过指定不正确的 FunctionName 自定义该命令。 我们可以修改该命令的自定义版本,并修复 FunctionName。 由于这是 Microsoft 发布定义的自定义替代,并且没有任何其他有意的修改,因此建议删除该命令的自定义版本以还原默认功能。

请选择以下修复选项之一:

单击功能区命令栏按钮并出现错误时,它通常是由不正确的功能区命令自定义导致的。

请选择与你的情况最相符的以下选项之一:

单击某个按钮时出现错误,这可能是由于与该按钮相关联的命令配置不正确或代码 JavaScript 不正确。

我们来确定按钮的命令和安装了定义的解决方案。

我们将使用名为 "命令检查器" 的应用内工具检查功能区组件定义,以帮助我们确定按钮单击导致错误的原因。

要启用 Command Checker,你必须追加参数 &ribbondebug=true到你的 D365 应用 URL。 比如:https://yourorgname.crm.dynamics.com/main.aspx?appid=9ab590fc-d25e-ea11-a81d-000d3ac2b3e6&ribbondebug=true

  1. 导航到应用程序中显示按钮的页面。

  2. 找到按钮在其中可见的命令栏。

  3. 单击 "命令检查器" "命令检查器" 按钮图标 按钮(它可能在 "更多" 溢出弹出菜单中列出)

  4. 在命令检查器最左侧窗格中显示的按钮列表中找到并单击您的按钮。 不可见的按钮将由 deemphasized 和斜体字体以及术语 "(隐藏)" 表示。 显示的按钮将显示为带有普通字体的标签。 单击 "命令属性" 选项卡以显示该按钮的命令的详细信息。 Command Checker - Button Error - Button

  5. "命令属性" 将显示操作和相应的 JavaScriptFunction 配置。 单击命令名称下方的 "查看命令定义解决方案层" 链接以查看安装了该命令定义的解决方案。 Command Checker - Button Error - Command

  6. 每当某个解决安装时,解决方案层窗格将显示每个功能区组件的定义。 列表顶部的层是当前应用使用的定义,其他层处于非活动状态且当前没有被应用使用。 如果卸载了顶部的解决方案,或安装了删除定义的更新版本,那么下一层将会成为当前应用使用的活动定义。 如果只有一个解决方案层,请跳到步骤9,否则,请选择前两个解决方案层(如果活动解决方案中有一个层,但未在顶部列出),请选择活动的解决方案层,然后单击 "比较"。 Command Checker - Button Error - Command - Solution Layers

  7. 将显示当前活动定义和上一个非活动定义的比较,显示差异(如果有)。 以下示例显示通过将第一个参数指定为与 Microsoft 已发布的系统解决方案层中的其他非活动定义不正确而自定义的非托管活动定义。 该函数需要由名为 "FirstPrimaryItemId" 的 CrmParameter 声明的主记录的单个 id,但自定义定义声明了 CrmParameter "PrimaryItemIds",这将导致脚本引发错误,因为参数与函数签名不匹配。 Command Checker - Button Error - Command - Solution Layers Compared

  8. 修复按钮操作功能所需的方法将取决于你的特定方案中的各种自定义设置。 考虑我们的示例,通过错误地指定第一个参数自定义命令。 我们可以修改命令的自定义版本并修复该参数。 由于这是 Microsoft 发布定义的自定义替代,并且没有任何其他有意的修改,因此建议删除该命令的自定义版本以还原默认功能。

请选择以下修复选项之一:

若要修复 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入包含固定命令定义的此解决方案的新版本。 请参阅导出、准备编辑和导入功能区

警告: 请勿从命令中删除“Mscrm.HideOnModern”显示规则来强制一个按钮显示在统一界面。 具有显示规则 Mscrm.HideOnModern 的命令适用于旧版 Web 客户端界面,且在统一界面中不支持,所以可能无法正常运行。

根据我们的示例方案,我们确定实体为 "account" 和需要修复的命令为 "NewRecordFromForm",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "帐户"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开"自定义 .xml" 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml> 节点中找到其子 <

  13. 找到CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. NewRecordFromForm",我们将找到以下节点) Command Checker - Command - Invalid JavaScript Action Library - XML

  14. 编辑<RibbonDiffXml> 并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令定义功能区操作。 (基于我们的示例,我们将通过以下方法修改 CommandDefinition:将库设置为 "$webresoure: Main_system_library" 并确保 FunctionName 匹配,在我们的示例 FunctionName = "XrmCore. openNewRecord") Command Checker - Command - Invalid JavaScript Action Library - XML fixed

  15. 保存自定义 .xml 文件

  16. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  17. 导入解决方案文件

  18. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开"自定义 .xml" 文件

  11. 找到RibbonDiffXml> 节点的根 <

  12. 找到CommandDefinition

  13. 编辑<RibbonDiffXml> 并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令定义功能区操作

  14. 保存自定义 .xml 文件

  15. 将修改后的自定义 xml 文件添加回压缩的解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

 

如果你的定义是唯一的,或者如果存在其他非活动定义以及是否有意更改,则修复命令的方法将有所不同。

请选择反映你的方案的选项:

若要删除 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入此解决方案的新版本,其中已删除该命令,以便删除该组件。 请参阅导出、准备编辑和导入功能区

根据我们的示例方案,我们确定实体为 "account",并且需要删除的命令为 "NewRecordFromForm",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "帐户"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开"自定义 .xml" 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml> 节点中找到其子 <

  13. 找到CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. NewRecordFromForm",我们将找到以下节点) Command Checker - Command - Invalid JavaScript Action Library - XML

  14. 编辑<RibbonDiffXml> 并删除特定的 CommandDefinition。 请确保不要无意间删除可能存在的其他 CommandDefinitions。 (根据我们的示例,我们将删除 Id = "NewRecordFromForm" 的 CommandDefinition 节点) Command Checker - Command - Invalid JavaScript Action Library - XML removed

  15. 保存自定义 .xml 文件

  16. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  17. 导入解决方案文件

  18. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开"自定义 .xml" 文件

  11. 找到RibbonDiffXml> 节点的根 <

  12. 找到CommandDefinition

  13. 编辑<RibbonDiffXml "> 并删除具有要删除的命令的匹配 Id 的 CommandDefinition 节点。 请确保不要无意间删除可能存在的其他 CommandDefinitions。

  14. 保存自定义 .xml 文件

  15. 将修改后的自定义 xml 文件添加回压缩的解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

 

如果存在另一个包含此命令的工作定义的解决方案层,则可以删除此定义以还原下一个不活动的工作定义。

如果这是唯一的图层,并且不再需要该命令,则可以在没有其他按钮引用该命令的情况下将其从解决方案中删除。

选择与你的特定方案匹配的以下选项之一:

如果需要保留的命令有修改,但仍希望在适当的情况下隐藏按钮,则可以向命令添加缺少的启用/显示规则,而不是删除自定义定义。

选择与你的特定方案匹配的以下选项之一:

若要删除 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入此解决方案的新版本,其中已删除该命令,以便删除该组件。 请参阅导出、准备编辑和导入功能区

根据我们的示例方案,我们确定实体是 "activitypointer",并且需要删除的命令是 "Mscrm CreateAppointment",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "activitypointer"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开"自定义 .xml" 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml> 节点中找到其子 <

  13. 找到CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. CreateAppointment",我们将找到以下节点) Command Checker - Appointment - Command - XML

  14. 编辑<RibbonDiffXml> 并删除具有要删除的命令 Id 的特定 CommandDefinition 节点。 请确保不要无意间删除可能存在的其他 CommandDefinitions。 (根据我们的示例,我们将删除 Id = "CreateAppointment" 的 CommandDefinition 节点) Command Checker - Appointment - Command - XML removed

  15. 保存自定义 .xml 文件

  16. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  17. 导入解决方案文件

  18. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开"自定义 .xml" 文件

  11. 找到RibbonDiffXml> 节点的根 <

  12. 找到CommandDefinition

  13. 编辑<RibbonDiffXml "> 并删除具有要删除的命令 Id 的 CommandDefinition 节点。 请确保不要无意间删除可能存在的其他 CommandDefinitions。

  14. 保存自定义 .xml 文件

  15. 将修改后的自定义 xml 文件添加回压缩的解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

 

如果你确定命令定义中缺少 enable/display 规则,则可以修改 CommandDefinition 并添加规则以实现所需的行为。 若要修复 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入包含固定命令定义的此解决方案的新版本。 请参阅导出、准备编辑和导入功能区

根据我们的示例方案,我们确定实体为 "activitypointer",需要修复的命令为 "CreateAppointment",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "activitypointer"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开 "自定义 .xml " 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml>节点中找到其子<

  13. 找到 CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. CreateAppointment",我们将找到以下节点) Command Checker - Appointment - Command - XML

  14. 编辑 <RibbonDiffXml>并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令。 (基于我们的示例,我们将通过添加显示规则 "HideOnModern" 来修改 CommandDefinition,该显示规则将正确地隐藏此按钮) Command Checker - Appointment - Command - XML fixed

  15. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开 "自定义 .xml " 文件

  11. 找到RibbonDiffXml>节点的根<

  12. 找到 CommandDefinition

  13. 编辑 <RibbonDiffXml>并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令

  14. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  15. 导入解决方案文件

  16. 发布所有自定义项

 

若要修复 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入包含固定命令定义的此解决方案的新版本。 请参阅导出、准备编辑和导入功能区

警告: 请勿从命令中删除“Mscrm.HideOnModern”显示规则来强制一个按钮显示在统一界面。 具有显示规则 Mscrm.HideOnModern 的命令适用于旧版 Web 客户端界面,且在统一界面中不支持,所以可能无法正常运行。

根据我们的示例方案,我们确定实体为 "account" 和需要修复的命令为 "DeletePrimaryRecord",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "帐户"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开 "自定义 .xml " 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml>节点中找到其子<

  13. 找到 CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. DeletePrimaryRecord",我们将找到以下节点) Command Checker - Button Error - Command - XML

  14. 编辑 <RibbonDiffXml>并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令定义功能区操作。 (根据我们的示例,我们将通过将 FunctionName 设置为 "FirstPrimaryItemId" 来修改 CommandDefinition 的 JavaScriptFunction。 Command Checker - Button Error - Command - XML fixed

  15. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开"自定义 .xml" 文件

  11. 找到RibbonDiffXml> 节点的根 <

  12. 找到CommandDefinition

  13. 编辑<RibbonDiffXml> 并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令定义功能区操作

  14. 保存自定义 .xml 文件

  15. 将修改后的自定义 xml 文件添加回压缩的解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

 

若要删除 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入此解决方案的新版本,其中已删除该命令,以便删除该组件。 请参阅导出、准备编辑和导入功能区

根据我们的示例方案,我们确定实体为 "account",并且需要删除的命令为 "DeletePrimaryRecord",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "帐户"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开"自定义 .xml" 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml> 节点中找到其子 <

  13. 找到CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. DeletePrimaryRecord",我们将找到以下节点) Command Checker - Button Error - Command - XML

  14. 编辑<RibbonDiffXml> 并删除具有要删除的命令 Id 的特定 CommandDefinition 节点。 请确保不要无意间删除可能存在的其他 CommandDefinitions。 (根据我们的示例,我们将删除 Id = "DeletePrimaryRecord" 的 CommandDefinition 节点) Command Checker - Button Error - Command - XML removed

  15. 保存自定义 .xml 文件

  16. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  17. 导入解决方案文件

  18. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开"自定义 .xml" 文件

  11. 找到RibbonDiffXml> 节点的根 <

  12. 找到CommandDefinition

  13. 编辑<RibbonDiffXml "> 并删除具有要删除的命令 Id 的 CommandDefinition 节点。 请确保不要无意间删除可能存在的其他 CommandDefinitions。

  14. 保存自定义 .xml 文件

  15. 将修改后的自定义 xml 文件添加回压缩的解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

 

若要修复 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入包含固定命令定义的此解决方案的新版本。 请参阅导出、准备编辑和导入功能区

警告: 请勿从命令中删除“Mscrm.HideOnModern”显示规则来强制一个按钮显示在统一界面。 具有显示规则 Mscrm.HideOnModern 的命令适用于旧版 Web 客户端界面,且在统一界面中不支持,所以可能无法正常运行。

根据我们的示例方案,我们确定实体为 "account" 和需要修复的命令为 "DeletePrimaryRecord",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "帐户"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开 "自定义 .xml " 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml>节点中找到其子<

  13. 找到 CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. DeletePrimaryRecord",我们将找到以下节点) 命令检查器-Command-不执行任何操作-XML

  14. 编辑 <RibbonDiffXml>并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令定义功能区操作。 (基于我们的示例,我们将通过将 FunctionName 设置为 "XrmCore. deletePrimaryRecord" 来修改 CommandDefinition 的 JavaScriptFunction。) 命令检查器-命令-已修复 Nothing-XML

  15. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开"自定义 .xml" 文件

  11. 找到RibbonDiffXml> 节点的根 <

  12. 找到CommandDefinition

  13. 编辑<RibbonDiffXml> 并对 CommandDefinition 进行必要的更改,以允许命令在正确的环境下正常运行以修复该命令。 有关声明命令的其他帮助,请参阅定义功能区命令定义功能区操作

  14. 保存自定义 .xml 文件

  15. 将修改后的自定义 xml 文件添加回压缩的解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

 

若要删除 "Active" 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 "自定义 .xml" 文件中编辑 RibbonDiffXml,然后导入此解决方案的新版本,其中已删除该命令,以便删除该组件。 请参阅导出、准备编辑和导入功能区

根据我们的示例方案,我们确定实体为 "account",并且需要删除的命令为 "DeletePrimaryRecord",并且它在名为 "DefaultPublisherCITTest" 的发布者的 "活动" 非托管解决方案层中声明。 

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。 (在我们的示例中,这是 "DefaultPublisherCITTest")

  4. 单击 "实体"

  5. 单击 "添加现有

  6. 选择您的命令定义所在的实体(在我们的示例中,为 "帐户"),然后单击"确定"

  7. 请确保在单击 "完成" 之前取消选中"包括实体元数据" 并取消选中"添加所有资源"

  8. 单击 "保存"

  9. 单击 "导出解决方案" 和 "导出非托管解决方案"

  10. 提取.zip 文件

  11. 打开"自定义 .xml" 文件

  12. 找到要编辑的实体节点的 <实体> 节点子节点,并在RibbonDiffXml> 节点中找到其子 <

  13. 找到CommandDefinition (在我们的示例中,CommandDefinition 的 Id 是 "Mscrm. DeletePrimaryRecord",我们将找到以下节点) 命令检查器-Command-不执行任何操作-XML

  14. 编辑<RibbonDiffXml> 并删除具有要删除的命令 Id 的特定 CommandDefinition 节点。 请确保不要无意间删除可能存在的其他 CommandDefinitions。 (根据我们的示例,我们将删除 Id = "DeletePrimaryRecord" 的 CommandDefinition 节点) Command Checker - Button Error - Command - XML removed

  15. 保存自定义 .xml 文件

  16. 将修改后的自定义 xml 文件添加回解决方案 .zip 文件

  17. 导入解决方案文件

  18. 发布所有自定义项

如果该命令不是实体特定的,而是适用于应用程序功能区中声明的 "所有实体",则步骤将稍有不同,如下所示:

  1. 打开高级设置

  2. 导航到 "设置->解决方案"

  3. 单击 "新建" 创建新解决方案,将 "发布者" 设置为命令检查器的解决方案层列表中显示的 "命令" 和 "活动" 解决方案层的值。

  4. 单击 "客户端扩展"

  5. 单击 "添加现有

  6. 单击 "应用程序功能区"

  7. 单击 "保存"

  8. 单击 "导出解决方案" 和 "导出非托管解决方案"

  9. 提取.zip 文件

  10. 打开"自定义 .xml" 文件

  11. 找到RibbonDiffXml> 节点的根 <

  12. 找到CommandDefinition

  13. 编辑<RibbonDiffXml "> 并删除具有要删除的命令 Id 的 CommandDefinition 节点。 请确保不要无意间删除可能存在的其他 CommandDefinitions。

  14. 保存自定义 .xml 文件

  15. 将修改后的自定义 xml 文件添加回压缩的解决方案 .zip 文件

  16. 导入解决方案文件

  17. 发布所有自定义项

 

如果您使用功能区命令栏按钮在 Dynamics 365 或 Power Apps 模型驱动的应用程序中遇到问题,本指南可帮助您查找和解决问题。

我们将使用一个名为 "命令检查器" 的应用内工具来检查功能区组件定义,以帮助我们确定可能导致问题的原因。

注意:本指南仅适用于统一界面应用程序,不适用于旧版 Web 客户端界面。

如果你想要了解有关功能区命令栏、命令和启用/显示规则的详细信息,你可能会发现以下补充文档资源有帮助:

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×