不要从命令中删除 Mscrm.HideOnModern 显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern 命令适用于旧版 Web 客户端接口,在统一接口中不受支持。 因此,它们可能无法正常工作。

如果未正确声明命令,则选择按钮可能不执行任何操作或显示错误消息。

请选择以下最符合你的情况的选项之一,以帮助我们提供最佳解决方法。 第一个选项卡默认处于选中状态。

按钮在选中时不执行任何操作 我收到不同的错误消息

修复选定时不执行任何操作的按钮

选择按钮且未发生任何操作时,这通常是由与该按钮关联的 命令 配置不正确导致的。

下面是声明 JavaScriptFunction 操作 值时的典型命令配置错误。 这些错误可能会导致按钮发生故障,在选择按钮时似乎不执行任何操作。

  • FunctionName 无效 :JavaScript 函数的名称与分配给 Library 属性的 JavaScript Web 资源中的有效函数名称不匹配。
  • 无效的库 :此路径未引用有效的 JavaScript Web 资源,或者不带 $webresource: 前缀。
  • 缺少参数 :JavaScript 函数需要特定参数,并且命令定义不会声明这些参数。
  • 参数类型或顺序不正确 :参数使用不正确的类型进行声明,或者其顺序与 JavaScript 函数声明中列出的参数顺序不同。
  • 有关更多配置帮助,请参阅 定义功能区操作

    如果这些配置正确,则可能是 JavaScript 代码错误的原因。 如果自定义 JavaScript 函数编码不正确,并且未调用预期行为,则按钮将无法按预期工作。 如果发现列出的配置错误之一,请修复命令定义以解决此问题。 否则,可能需要调试并修复 JavaScript 函数代码才能使按钮正常工作。

    确定按钮命令是什么以及哪个解决方案安装了错误的定义。

    你将使用应用内工具命令检查器检查功能区组件定义,以帮助确定选择按钮会导致错误的原因。

    若要启用命令检查器工具,必须将参数 &ribbondebug=true 追加到 Dynamics 365 应用程序 URL。 例如: https://yourorgname.crm.dynamics.com/main.aspx?appid=<ID>&ribbondebug=true

    目前,命令检查器工具仅在 Web 浏览器中工作。 它不适用于 Android 和 iOS 应用。 计划将来进行更新,使此工具在这些移动应用中有效。

    启用命令检查器工具后,在应用程序内查看每个各种命令栏, (全局、窗体、网格、子网格) 。 你将看到一个新的特殊“命令检查器” 按钮,用于打开该工具, (它可能列在 “更多 溢出浮出控件”菜单上) 。

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

  • 找到显示按钮的命令栏。

  • 选择“命令检查器” 按钮, (“ 更多 溢出浮出控件”菜单) 可能会列出它。

  • 在命令检查器工具最左侧窗格中显示的按钮列表中查找并选择按钮。 不可见的按钮将用去强调和斜体字体以及 隐藏) 术语 ( 表示。 通过将标签采用普通字体来显示可见的按钮。 选择“ 命令属性 ”选项卡以显示此按钮的命令的详细信息。

  • 命令属性 ”选项卡显示操作和相应的 JavaScriptFunction 配置。 选择命令名称下方的 “查看命令定义解决方案层 ”链接,查看安装了命令定义的解决方案。

  • “解决方案层”窗格显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义。 其他层处于非活动状态,目前应用程序不使用。 如果卸载顶级解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 如果存在非托管 活动 解决方案层,则始终是应用程序使用的定义。 如果未列出活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由 Microsoft 发布的自定义托管解决方案也将优先于Microsoft发布的解决方案层。

    实体上下文指示功能区自定义项所针对的对象。 如果列出了“所有实体”,则层来自应用程序功能区客户端扩展,而不是特定于实体。 否则,将列出实体的逻辑名称。

    当存在两个或更多层时,可以选择两行,然后选择“ 比较 ”以查看每个解决方案提供的定义比较。

    选择“ 上一个” 将返回到上一个命令检查器窗口。

    如果只有一个解决方案层,请转到步骤 8。 否则,请选择前两个解决方案层。 (如果活动解决方案中有一个层,但顶部未列出该层,请选择“活动”解决方案层,然后选择顶部行。) 然后选择“ 比较 ”。

  • 将显示当前活动定义与上一个非活动定义的比较,并显示差异(如果有)。 以下示例显示,与 Microsoft 发布的系统解决方案层中的其他非活动定义相比,通过错误地指定 FunctionName 值来自定义非托管 Active 定义。 该值 FunctionName 应为 XrmCore.Commands.Delete.deletePrimaryRecord ,但自定义定义已声明 FunctionName="deletePrimaryRecord" 。 在这种情况下,选择按钮时不会发生任何操作,因为找不到函数。

  • 修复按钮的操作功能所需的方法将取决于特定方案中的各种自定义。 考虑到此示例,命令是通过指定不正确的 FunctionName 值来自定义的。 可以修改命令的自定义版本,并修复 FunctionName 值。 由于这是Microsoft发布的定义的自定义重写,并且没有其他有意的修改,因此建议删除命令的此自定义版本以还原默认功能。

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

    选项 1:删除具有不正确的 JavaScriptFunction 声明的命令
    命令位于非托管 Active 解决方案中。

    若要删除 活动 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,并在 customizations.xml 文件中编辑 <RibbonDiffXml> 节点,然后导入此解决方案的新版本,其中删除了此命令以删除组件。 请参阅 导出、准备编辑和导入功能区

    命令特定于实体

    根据示例方案,你确定实体是 帐户 ,必须删除的命令是 Mscrm.DeletePrimaryRecord ,并且该命令在名为 DefaultPublisherCITTest 的发布者 的活动 非托管解决方案层中声明。

  • 打开 “高级设置”。

  • 导航到 “设置 > 解决方案 ”。

  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。 (在示例中,这是 DefaultPublisherCITTest .)

  • 选择 “实体 ”。

  • 选择 “添加现有项 ”。

  • 在示例中,选择命令在 (上定义的实体,这是“account”) ,然后选择“ 确定 ”。

  • 在选择 “完成 ”之前,请确保清除 “包括实体元数据 ”和“ 添加所有资产 ”选项。

  • 选择“ 保存 ”。

  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。

  • 提取.zip文件。

  • 打开 customizations.xml 文件。

  • <Entity> 找到要编辑的实体节点的子节点,并找到其子 <RibbonDiffXml> 节点。

  • 找到节点 <CommandDefinition> 。 (在此示例中,节点的 <CommandDefinition> ID 为 Mscrm.DeletePrimaryRecord 。因此,可以找到以下 node.)

  • <RibbonDiffXml> 编辑节点以删除具有要删除的命令 ID 的特定 <CommandDefinition> 节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。 (根据示例,将删除 <CommandDefinition> ID 为 Mscrm.DeletePrimaryRecord .)

  • 保存 customizations.xml 文件。

  • 将修改 后的customizations.xml 文件还原到解决方案.zip文件。

  • 导入解决方案文件。

  • 选择 “发布所有自定义项 ”。

    命令位于应用程序功能区中, (适用于“所有实体”)

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

  • 打开 “高级设置”。
  • 导航到 “设置 > 解决方案 ”。
  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。
  • 选择“ 客户端扩展 ”。
  • 选择 “添加现有项 ”。
  • 选择 “应用程序功能区 ”。
  • 选择“ 保存 ”。
  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。
  • 提取.zip文件。
  • 打开 customizations.xml 文件。
  • 找到根 <RibbonDiffXml> 节点。
  • 找到节点 <CommandDefinition>
  • <RibbonDiffXml> 编辑 ,然后删除 <CommandDefinition> 具有要删除的命令 ID 的节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。
  • 保存 customizations.xml 文件。
  • 将修改后的 customizations.xml 文件还原到压缩的解决方案.zip文件。
  • 导入解决方案文件。
  • 选择 “发布所有自定义项 ”。
  • 命令来自我的公司创作的自定义托管解决方案。

    若要删除由创建的自定义托管解决方案安装的命令,请执行以下步骤:

  • 在具有自定义解决方案的非托管源版本的单独开发组织中,完成上面为 “命令位于非托管活动解决方案 ”选项中列出的步骤。
  • 递增自定义解决方案的版本。
  • 将解决方案导出为托管解决方案。
  • 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
  • 命令来自我的公司未从第三部分或 ISV) 创作 (的自定义托管解决方案。

    若要删除由第三方或 ISV 创建的自定义托管解决方案安装的命令,必须联系解决方案的作者,请求删除特定命令定义的新版本的解决方案,然后在受影响的组织中安装此新解决方案。

    选项 2:修复命令 JavaScriptFunction 声明
    命令位于非托管 Active 解决方案中。

    若要修复 活动 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,在 customizations.xml 文件中编辑 <RibbonDiffXml> 节点,然后导入包含固定命令定义的此解决方案的新版本。 请参阅 导出、准备编辑和导入功能区

    不要从命令中删除 Mscrm.HideOnModern 显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern 命令适用于旧版 Web 客户端接口,在统一接口中不受支持,并且可能无法正常工作。

    命令特定于实体

    根据示例方案,你确定实体是 帐户 ,必须修复的命令是 Mscrm.DeletePrimaryRecord ,并且该命令在名为 DefaultPublisherCITTest 的发布者 的活动 非托管解决方案层中声明。

  • 打开 “高级设置”。

  • 导航到 “设置 > 解决方案 ”。

  • 选择“ 新建 ”以创建新解决方案,并设置为 Publisher 命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。 (在示例中,这是 DefaultPublisherCITTest .)

  • 选择 “实体 ”。

  • 选择 “添加现有项 ”。

  • 选择在 (在示例中,这是 帐户 ) 定义命令的实体,然后选择“ 确定 ”。

  • 在选择 “完成 ”之前,请确保清除 “包括实体元数据 ”和“ 添加所有资产 ”选项。

  • 选择“ 保存 ”。

  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。

  • 提取.zip文件。

  • 打开 customizations.xml 文件。

  • <Entity> 找到要编辑的实体节点的子节点,并找到其子 <RibbonDiffXml> 节点。

  • 找到节点 <CommandDefinition> 。 (在此示例中,节点的 <CommandDefinition> ID 为 Mscrm.DeletePrimaryRecord 。因此,可以找到以下 node.)

  • <RibbonDiffXml> 编辑节点,对节点进行必要的更改, <CommandDefinition> 使命令能够在正确情况下正常运行,以修复命令。 有关如何声明命令的详细信息,请参阅 定义功能区命令 定义功能区操作 。 (根据示例,可以通过将 <CommandDefinition> 值设置为 FunctionName XrmCore.Commands.Delete.deletePrimaryRecord .) 来修改节点的 JavaScriptFunction

  • 将修改 后的customizations.xml 文件还原到解决方案.zip文件。

  • 导入解决方案文件。

  • 选择 “发布所有自定义项 ”。

    命令位于应用程序功能区中, (适用于“所有实体”)

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

  • 打开 “高级设置”。
  • 导航到 “设置 > 解决方案 ”。
  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。
  • 选择“ 客户端扩展 ”。
  • 选择 “添加现有项 ”。
  • 选择 “应用程序功能区 ”。
  • 选择“ 保存 ”。
  • 选择“ 导出解决方案 ”并导出非托管解决方案。
  • 提取.zip文件。
  • 打开 customizations.xml 文件。
  • 找到根 <RibbonDiffXml> 节点。
  • <CommandDefinition> 找到 。
  • <RibbonDiffXml> 编辑节点以对节点进行必要的更改, <CommandDefinition> 使命令能够在正确情况下正常运行,以修复命令。 有关如何声明命令的详细信息,请参阅 定义功能区命令 定义功能区操作
  • 保存 customizations.xml 文件。
  • 将修改后的 customizations.xml 文件还原到压缩的解决方案.zip文件。
  • 导入解决方案文件。
  • 选择 “发布所有自定义项 ”。
  • 命令来自我创作的自定义托管解决方案。

    若要修复由创建的自定义托管解决方案安装的命令,请执行以下步骤:

  • 在具有自定义解决方案的非托管源版本的单独开发组织中,完成上面为 “命令位于非托管活动解决方案 ”选项中列出的步骤。
  • 递增自定义解决方案的版本。
  • 将解决方案导出为托管解决方案。
  • 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
  • 命令来自我未创作的自定义托管解决方案,或者我的组织不拥有来自第三方/ISV) 的 (。

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

    我收到脚本错误消息:“无效的 JavaScript 操作库”] (#tab/error)

    修复选定时显示错误的按钮

    如果选择了功能区命令栏按钮并发生错误,则错误通常是由不正确的功能区 命令 自定义引起的。

    修复脚本错误“无效的 JavaScript 操作库”

    你可能会收到类似于以下内容的脚本错误消息:

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

    这是由于在命令的 JavaScriptFunction 上声明了错误的库的功能区命令自定义无效导致的。

    应用内工具命令检查器将用于检查功能区组件定义,以帮助我们确定如何解决此问题。

    若要启用命令检查器工具,必须将参数 &ribbondebug=true 追加到 Dynamics 365 应用程序 URL。 例如: https://yourorgname.crm.dynamics.com/main.aspx?appid=<ID>&ribbondebug=true

    目前,命令检查器工具仅适用于 Web 浏览器,不适用于 Android 和 iOS 应用。 计划将来进行更新,以在这些移动应用中实现此工作。

    启用命令检查器工具后,在应用程序中, (全局、窗体、网格、子网格) 的各个命令栏内,将有一个新的特殊“命令检查器” 按钮打开该工具, (它可能会在 “更多 溢出浮出控件”菜单中列出) 。

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

  • 找到按钮可见的命令栏。

  • 选择“命令检查器” 按钮, (“ 更多 溢出浮出控件”菜单) 可能会列出它。

  • 在命令检查器工具最左侧窗格中显示的按钮列表中查找并选择按钮,以显示按钮和命令属性。 以下示例显示帐户实体窗体页上的“ 新建 ”按钮可见,并且由标记为“ 新建 ”的项表示。

  • 选择“ 命令属性 ”选项卡以显示此按钮的命令的详细信息。 这将显示 Actions 和 JavaScriptFunction 声明,任何启用或显示规则以及每个规则评估的结果 ( True False 跳过 ) 。

    通过选择“vron”图标展开 “JavaScriptFunction 以查看函数声明的详细信息。 Library 属性必须是 JavaScript Web 资源并带有 $webresource: 前缀。 以下示例显示 Library 属性为 _/_static/ common/scripts/RibbonActions.js 。 这不是有效 JavaScript Web 资源的路径。 接下来,应查看 命令的解决方案层,尝试确定正确的值来解决问题。

  • 选择命令名称下方的 “查看命令定义解决方案层 ”链接,查看安装了命令定义的解决方案。

  • “解决方案层”窗格将显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义,其他层处于非活动状态,目前应用程序不使用。 如果卸载顶层解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 当存在非托管 活动 解决方案层时,它将始终是应用程序使用的定义。 如果未列出活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由 Microsoft 发布的自定义托管解决方案也将优先于Microsoft发布的解决方案层。

    实体上下文指示功能区自定义的对象,如果列出了“所有实体”,则层来自应用程序功能区客户端扩展,而不是特定于实体,否则将列出实体的逻辑名称。

    当存在两个或更多层时,可以选择两行,然后选择“ 比较 ”以查看每个解决方案引入的定义比较。

    选择“ 后退 ”将返回到上一个“命令检查器”窗口。

    下图显示了示例中 命令的解决方案层,并指示有两个解决方案层,一个是名为 Active 的解决方案表示的非托管自定义,另一个来自 Microsoft 发布的系统解决方案。 你的实际方案可能有所不同,你可能没有活动解决方案层,你可能有一个托管解决方案,并且该解决方案的名称将在此处列出。

    选择前两行,然后选择“ 比较 ”以查看每个解决方案引入的定义比较。 如果只有一个解决方案层,则将跳过此步骤。

  • 命令定义之间的比较将显示两个层之间可能存在的任何差异。 以下示例清楚地显示了库值是不同的。 Active 解决方案中的非托管条目设置为不正确的路径 _/_static/ common/scripts/RibbonActions.js , (特定路径) 可能略有不同,并且 Microsoft 的默认定义已将库设置为 $webresoure:Main_system_library.js 。 这是此特定命令的支持路径, (此值可能有所不同,具体取决于特定命令) 。 唯一支持的路径是一个以 $webresource: 有效 JavaScript Web 资源的名称开头并结束的路径。

  • 查看解决方案层并确定安装自定义项的解决方案后,必须在相应的解决方案中修复定义。

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

    命令位于非托管 Active 解决方案中。

    修复命令的方法将有所不同,具体取决于你的定义是唯一的,还是是否存在其他非活动定义,以及更改是否是有意的。

    请选择反映方案的选项:

  • 命令没有任何特意修改,我想删除此自定义层。

    若要删除 活动 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,在 customizations.xml 文件中编辑 <RibbonDiffXml> 节点,然后导入该解决方案的新版本,其中删除了此命令以删除组件。 请参阅 导出、准备编辑和导入功能区

    命令特定于实体

    根据示例方案,你确定实体是 帐户 ,必须删除的命令是 Mscrm.NewRecordFromForm ,并且该命令在名为 DefaultPublisherCITTest 的发布者 的活动 非托管解决方案层中声明。

  • 打开 “高级设置”。

  • 导航到 “设置 > 解决方案 ”。

  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。 (在示例中,这是 DefaultPublisherCITTest .)

  • 选择 “实体 ”。

  • 选择 “添加现有项 ”。

  • 选择定义命令的实体。 (在此示例中,这是 帐户 ) ,然后选择“ 确定 ”。

  • 在选择 “完成 ”之前,请确保清除 “包括实体元数据 ”和“ 添加所有资产 ”选项。

  • 选择“ 保存 ”。

  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。

  • 提取.zip文件。

  • 打开 customizations.xml 文件。

  • <Entity> 找到要编辑的实体节点的子节点,并找到其子 <RibbonDiffXml> 节点。

  • <CommandDefinition> 找到节点 (在该示例中, 的 <CommandDefinition> ID 为 Mscrm.NewRecordFromForm 。因此,可以找到以下 node.)

  • <RibbonDiffXml> 编辑节点以删除特定 <CommandDefinition> 节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。 (根据示例,将删除 <CommandDefinition> ID 为 Mscrm.NewRecordFromForm .)

  • 保存 customizations.xml 文件。

  • 将修改 后的customizations.xml 文件还原到解决方案.zip文件。

  • 导入解决方案文件。

  • 选择 “发布所有自定义项 ”。

    命令位于应用程序功能区中, (适用于“所有实体”)

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

  • 打开 “高级设置”。
  • 导航到 “设置 > 解决方案 ”。
  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。
  • 选择“ 客户端扩展 ”。
  • 选择 “添加现有项 ”。
  • 选择 “应用程序功能区 ”。
  • 选择“ 保存 ”。
  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。
  • 提取.zip文件。
  • 打开 customizations.xml 文件。
  • 找到根 <RibbonDiffXml> 节点。
  • 找到节点 <CommandDefinition>
  • 编辑 <RibbonDiffXml> 以删除 <CommandDefinition> 具有要删除的命令的匹配 ID 的节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。
  • 保存 customizations.xml 文件。
  • 将修改后的 customizations.xml 文件还原到压缩的解决方案.zip文件。
  • 导入解决方案文件。
  • 选择 “发布所有自定义项 ”。
  • 命令具有我想要保留的其他修改,并且我想修复此解决方案层。

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

    不要从命令中删除 Mscrm.HideOnModern 显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern 命令适用于旧版 Web 客户端接口,在统一接口中不受支持,并且可能无法正常工作。

    命令特定于实体

    根据示例方案,你确定实体是 帐户 ,必须修复的命令是 Mscrm.NewRecordFromForm ,并且该命令在名为 DefaultPublisherCITTest 的发布者 的活动 非托管解决方案层中声明。

  • 打开 “高级设置”。

  • 导航到 “设置 > 解决方案 ”。

  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。 (在示例中,这是 DefaultPublisherCITTest .)

  • 选择 “实体 ”。

  • 选择 “添加现有项 ”。

  • 选择在 (在示例中,这是 帐户 ) 定义命令的实体,然后选择“ 确定 ”。

  • 在选择 “完成 ”之前,请确保清除 “包括实体元数据 ”和“ 添加所有资产 ”选项。

  • 选择“ 保存 ”。

  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。

  • 提取.zip文件。

  • 打开 customizations.xml 文件

  • <Entity> 找到要编辑的实体节点的子节点,并找到其子 <RibbonDiffXml> 节点。

  • 找到节点 <CommandDefinition> 。 (在此示例中,节点的 <CommandDefinition> ID 为 Mscrm.NewRecordFromForm 。因此,可以找到以下 node.)

  • 编辑 <RibbonDiffXml> 以对节点进行必要的更改, <CommandDefinition> 使命令能够在正确情况下正常运行,以修复命令。 有关如何声明命令的详细信息,请参阅 定义功能区命令 定义功能区操作 。 (根据示例,通过设置 Library="$webresoure:Main_system_library.js" 来修改 <CommandDefinition> 节点,然后确保 FunctionName 值匹配。在本示例中,该为 FunctionName="XrmCore.Commands.Open.openNewRecord" .)

  • 保存 customizations.xml 文件。

  • 将修改 后的customizations.xml 文件还原到解决方案.zip文件。

  • 导入解决方案文件。

  • 选择 “发布所有自定义项 ”。

    命令位于应用程序功能区中, (适用于“所有实体”)

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

  • 打开 “高级设置”。
  • 导航到 “设置 > 解决方案 ”。
  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。
  • 选择“ 客户端扩展 ”。
  • 选择 “添加现有项 ”。
  • 选择 “应用程序功能区 ”。
  • 选择“ 保存 ”。
  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。
  • 提取.zip文件。
  • 打开 customizations.xml 文件。
  • 找到根 <RibbonDiffXml> 节点。
  • 找到节点 <CommandDefinition>
  • <RibbonDiffXml> 编辑节点以对节点进行必要的更改, <CommandDefinition> 使命令能够在正确情况下正常运行,以修复命令。 有关如何声明命令的详细信息,请参阅 定义功能区命令 定义功能区操作
  • 保存 customizations.xml 文件。
  • 将修改后的 customizations.xml 文件还原到压缩的解决方案.zip文件。
  • 导入解决方案文件。
  • 选择 “发布所有自定义项 ”。
  • 命令来自我未创作的自定义托管解决方案,或者我的组织不拥有来自第三方或 ISV) 的 (。

    若要修复由第三方或 ISV 创建的自定义托管解决方案安装的命令,必须联系解决方案的作者,请求包含固定命令定义的新版本的解决方案,然后在受影响的组织中安装此新解决方案。

    命令位于Microsoft发布的托管解决方案中。

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

    修复选定时显示错误的按钮

    当选择功能区命令栏按钮并发生错误时,通常是由不正确的功能区 命令 自定义引起的。

    修复其他类型的错误

    选择按钮并发生错误时,可能是由与按钮关联的命令配置不正确或编码不正确的 JavaScript 引起的。

    让我们确定按钮的命令是什么,以及哪个解决方案安装了定义。

    应用内工具命令检查器将用于检查功能区组件定义,以帮助我们确定选择按钮导致错误的原因。

    若要启用命令检查器工具,必须将参数 &ribbondebug=true 追加到 Dynamics 365 应用程序 URL。 例如: https://yourorgname.crm.dynamics.com/main.aspx?appid=<ID>&ribbondebug=true

    目前,命令检查器工具仅适用于 Web 浏览器,不适用于 Android 和 iOS 应用。 计划将来进行更新,以在这些移动应用中实现此工作。

    启用命令检查器工具后,在应用程序中, (全局、窗体、网格、子网格) 的各个命令栏内,将有一个新的特殊“命令检查器” 按钮打开该工具, (它可能会在 “更多 溢出浮出控件”菜单中列出) 。

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

  • 找到按钮可见的命令栏。

  • 选择“命令检查器” 按钮, (“ 更多 溢出浮出控件”菜单) 可能会列出它。

  • 在命令检查器工具最左侧窗格中显示的按钮列表中查找并选择按钮。 不可见的按钮将用去强调和斜体字体以及 隐藏) 术语 ( 表示。 可见的按钮将以普通字体显示标签。 选择“ 命令属性 ”选项卡以显示此按钮的命令的详细信息。

  • 命令属性 ”选项卡将显示 “操作” 和相应的 JavaScriptFunction 配置。 选择命令名称下方的 “查看命令定义解决方案层 ”链接,查看安装了命令定义的解决方案。

  • “解决方案层”窗格将显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义。 其他层处于非活动状态,目前应用程序不使用。 如果卸载顶层解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 当存在非托管 活动 解决方案层时,它将始终是应用程序使用的定义。 如果未列出活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由 Microsoft 发布的自定义托管解决方案也将优先于Microsoft发布的解决方案层。

    实体上下文指示功能区自定义项所针对的对象。 如果列出了“所有实体”,则层来自应用程序功能区客户端扩展,而不是特定于实体。 否则,将列出实体的逻辑名称。

    如果有两个或更多层,可以选择两行,然后选择“ 比较 ”以查看每个解决方案提供的定义比较。

    选择“ 后退 ”将返回到上一个“命令检查器”窗口。

    如果只有一个解决方案层,请跳到步骤 9。 否则,请选择前两个解决方案层。 (如果活动解决方案中有一个层,但它未在顶部列出,请选择“活动”解决方案层,然后选择顶部行。) 然后选择“ 比较 ”。

  • 将显示当前活动定义与上一个非活动定义的比较,并显示差异(如果有)。 以下示例显示与 Microsoft 发布的系统解决方案层中的其他非活动定义相比,通过错误地指定第一个参数来自定义的非托管 Active 定义。 函数需要主记录的单个 ID,由名为 FirstPrimaryItemId 的 CrmParameter 声明。 但是,自定义定义已声明 PrimaryItemIds 节点的值 <CrmParameter> 。 这将导致脚本引发错误,因为参数与函数签名不匹配。

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

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

    选项 1:删除具有无效 JavaScriptFunction 声明的命令
    命令位于非托管 Active 解决方案中。

    若要删除 活动 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,并在 customizations.xml 文件中编辑 <RibbonDiffXml> 节点,然后导入此解决方案的新版本,其中删除了此命令以删除组件。 请参阅 导出、准备编辑和导入功能区

    命令特定于实体

    根据示例方案,你确定实体是 帐户 ,必须删除的命令是 Mscrm.DeletePrimaryRecord ,并且该命令在名为 DefaultPublisherCITTest 的发布者 的活动 非托管解决方案层中声明。

  • 打开 “高级设置”。

  • 导航到 “设置 > 解决方案 ”。

  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。 (在示例中,这是 DefaultPublisherCITTest .)

  • 选择 “实体 ”。

  • 选择 “添加现有项 ”。

  • 选择在示例中 (定义命令的实体,这是 帐户 ) 然后选择 “确定 ”。

  • 在选择 “完成 ”之前,请确保清除 “包括实体元数据 ”和“ 添加所有资产 ”选项。

  • 选择“ 保存 ”。

  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。

  • 提取.zip文件。

  • 打开 customizations.xml 文件。

  • <Entity> 找到要编辑的实体节点的节点子级,然后找到其子 <RibbonDiffXml> 节点。

  • 找到节点 <CommandDefinition> 。 (在此示例中,节点的 <CommandDefinition> ID 为 Mscrm.DeletePrimaryRecord 。因此,可以找到以下 node.)

  • <RibbonDiffXml> 编辑节点以删除具有要删除的命令 ID 的特定 <CommandDefinition> 节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。 (根据示例,将删除 <CommandDefinition> ID 为 Mscrm.DeletePrimaryRecord .)

  • 保存 customizations.xml 文件。

  • 将修改 后的customizations.xml 文件还原到解决方案.zip文件。

  • 导入解决方案文件。

  • 选择 “发布所有自定义项 ”。

    命令位于应用程序功能区中, (适用于“所有实体”)

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

  • 打开 “高级设置”。
  • 导航到 “设置 > 解决方案 ”。
  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。
  • 选择“ 客户端扩展 ”。
  • 选择 “添加现有项 ”。
  • 选择 “应用程序功能区 ”。
  • 选择“ 保存 ”。
  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。
  • 提取.zip文件。
  • 打开 customizations.xml 文件。
  • 找到根 <RibbonDiffXml> 节点。
  • 找到节点 <CommandDefinition>
  • 编辑 并 <RibbonDiffXml> 删除 <CommandDefinition> 具有要删除的命令 ID 的节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。
  • 保存 customizations.xml 文件。
  • 将修改后的 customizations.xml 文件还原到压缩的解决方案.zip文件。
  • 导入解决方案文件。
  • 选择 “发布所有自定义项 ”。
  • 命令来自我的公司创作的自定义托管解决方案。

    若要删除由创建的自定义托管解决方案安装的命令,请执行以下步骤:

  • 在具有自定义解决方案的非托管源版本的单独开发组织中,完成上面为 “命令位于非托管活动解决方案 ”选项中列出的步骤。
  • 递增自定义解决方案的版本。
  • 将解决方案导出为托管解决方案。
  • 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
  • 该命令来自我的公司未从第三方或 ISV) 创作 (的自定义托管解决方案。

    从第三方/ISV 从自定义托管解决方案中删除命令

    若要删除由第三方或 ISV 创建的自定义托管解决方案安装的命令,必须联系解决方案的作者,请求删除特定命令定义的新版本的解决方案,然后在受影响的组织中安装此新解决方案。

    选项 2:修复命令 JavaScriptFunction 声明
    命令位于非托管 Active 解决方案中。

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

    不要从命令中删除 Mscrm.HideOnModern 显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern 命令适用于旧版 Web 客户端接口,在统一接口中不受支持,并且可能无法正常工作。

    命令特定于实体

    根据示例方案,你确定实体是 帐户 ,必须修复的命令是 Mscrm.DeletePrimaryRecord ,并且该命令在名为 DefaultPublisherCITTest 的发布者 的活动 非托管解决方案层中声明。

  • 打开 “高级设置”。

  • 导航到 “设置 > 解决方案 ”。

  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。 (在示例中,这是 DefaultPublisherCITTest .)

  • 选择 “实体 ”。

  • 选择 “添加现有项 ”。

  • 在示例中,选择命令在 (上定义的实体(这是 帐户 ) ),然后选择“ 确定 ”。

  • 在选择 “完成 ”之前,请确保清除 “包括实体元数据 ”和“ 添加所有资产 ”选项。

  • 选择“ 保存 ”。

  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。

  • 提取.zip文件。

  • 打开 customizations.xml 文件。

  • <Entity> 找到要编辑的实体节点的子节点,并找到其子 <RibbonDiffXml> 节点。

  • 找到节点 <CommandDefinition> 。 (在此示例中,节点的 <CommandDefinition> ID 为 Mscrm.DeletePrimaryRecord 。因此,可以找到以下 node.)

  • <RibbonDiffXml> 编辑节点以对节点进行必要的更改, <CommandDefinition> 使命令能够在正确情况下正常运行,以修复命令。 有关如何声明命令的详细信息,请参阅 定义功能区命令 定义功能区操作 。 (根据示例,可以通过将 <CommandDefinition> 值设置为 FunctionName XrmCore.Commands.Delete.deletePrimaryRecord .) 来修改节点的 JavaScriptFunction

  • 将修改 后的customizations.xml 文件还原到解决方案.zip文件。

  • 导入解决方案文件。

  • 选择 “发布所有自定义项 ”。

    命令位于应用程序功能区中, (适用于“所有实体”)

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

  • 打开 “高级设置”。
  • 导航到 “设置 > 解决方案 ”。
  • 选择“ 新建 ”以创建新解决方案,并将 Publisher 设置为命令检查器的解决方案层列表中针对命令和活动解决方案层显示的值。
  • 选择“ 客户端扩展 ”。
  • 选择 “添加现有项 ”。
  • 选择 “应用程序功能区 ”。
  • 选择“ 保存 ”。
  • 选择“ 导出解决方案 ”,然后导出非托管解决方案。
  • 提取.zip文件。
  • 打开 customizations.xml 文件。
  • 找到根 <RibbonDiffXml> 节点。
  • <CommandDefinition> 找到 。
  • <RibbonDiffXml> 编辑节点以对节点进行必要的更改, <CommandDefinition> 使命令能够在正确情况下正常运行,以修复命令。 有关如何声明命令的详细信息,请参阅 定义功能区命令 定义功能区操作
  • 保存 customizations.xml 文件。
  • 将修改后的 customizations.xml 文件还原到压缩的解决方案.zip文件。
  • 导入解决方案文件。
  • 选择 “发布所有自定义项 ”。
  • 命令来自我创作的自定义托管解决方案。

    若要修复由创建的自定义托管解决方案安装的命令,请执行以下步骤:

  • 在具有自定义解决方案的非托管源版本的单独开发组织中,完成“ 命令位于非托管活动解决方案 ”选项中的上述步骤。
  • 递增自定义解决方案 的版本
  • 将解决方案导出为托管解决方案。
  • 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
  • 命令来自我未创作的自定义托管解决方案,或者我的组织不拥有来自第三方或 ISV) 的 (。

    若要修复由第三方或 ISV 创建的自定义托管解决方案安装的命令,必须联系解决方案的作者,请求包含固定命令定义的新版本的解决方案,然后在受影响的组织中安装此新解决方案。

    命令位于Microsoft发布的托管解决方案中。

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

  •