命令栏上的按钮在 Power Apps 中无法正常工作
适用于: Power Apps
原始 KB 编号: 4552163
确定按钮无法正常工作的原因
多个因素可能会导致按钮操作失败。 其中包括无效的功能区自定义项,其中错误地声明了按钮的关联命令定义。
警告
不要从命令中删除 Mscrm.HideOnModern
显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern
命令适用于旧版 Web 客户端接口,在统一接口中不受支持。 因此,它们可能无法正常工作。
如果未正确声明命令,选择按钮可能不执行任何操作或显示错误消息。
选择最符合你的情况的以下选项之一,以帮助我们提供最佳解决方案。 第一个选项卡默认处于选中状态。
修复选定时不执行任何操作的按钮
选择按钮且未发生任何操作时,这通常是由与该按钮关联的 命令 配置不正确导致的。
下面是声明JavaScriptFunction
操作值时的典型命令配置错误。 这些错误可能会导致按钮发生故障,在选择按钮时似乎没有任何作用。
- FunctionName 无效:JavaScript 函数的名称与分配给 Library 属性的 JavaScript Web 资源中的有效函数名称不匹配。
-
无效的库:此路径未引用有效的 JavaScript Web 资源,或者不带
$webresource:
前缀。 - 缺少参数:JavaScript 函数需要特定参数,并且命令定义不会声明这些参数。
- 参数类型或顺序不正确:参数使用不正确的类型进行声明,或者其顺序与 JavaScript 函数声明中列出的参数不同。
有关更多配置帮助,请参阅 定义功能区操作 。
如果这些配置正确,则可能是 JavaScript 代码错误的原因。 如果自定义 JavaScript 函数编码不正确,并且未调用预期行为,则按钮将无法按预期工作。 如果发现列出的配置错误之一,请修复命令定义以解决此问题。 否则,可能需要调试并修复 JavaScript 函数代码,以使按钮正常工作。
确定按钮命令是什么以及哪个解决方案安装了错误的定义。
选择“ 命令属性 ”选项卡以显示此按钮的命令的详细信息。
“ 命令属性 ”选项卡显示操作和相应的
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 解决方案中。
若要修复 活动 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,编辑 <RibbonDiffXml>
customizations.xml 文件中的节点,然后导入包含固定命令定义的此解决方案的新版本。 请参阅 导出、准备编辑和导入功能区。
警告
不要从命令中删除 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/错误)
修复选定时显示错误的按钮
如果选择了功能区命令栏按钮并发生错误,则错误通常是由不正确的功能区 命令 自定义引起的。
修复脚本错误“无效的 JavaScript 操作库”
你可能会收到类似于以下内容的脚本错误消息:
无效的 JavaScript 操作库:[脚本名称]不是 Web 资源,不受支持。
这是由在命令 的 JavaScriptFunction
上声明了错误的库的功能区命令自定义无效导致的。
以下示例显示帐户实体窗体页上的“ 新建 ”按钮是可见的,由标记为 “新建”的项表示。
选择“ 命令属性 ”选项卡以显示此按钮的命令的详细信息。 这将显示 Actions 和 JavaScriptFunction 声明,任何启用或显示规则以及每个规则评估的结果 (True、 False、 跳过) 。
通过选择“vron”图标展开 “JavaScriptFunction” 以查看函数声明的详细信息。 Library 属性必须是 JavaScript Web 资源并带有
$webresource:
前缀。 以下示例显示 Library 属性为 _/_static/common/scripts/RibbonActions.js。 这不是有效 JavaScript Web 资源的路径。 接下来,应查看 命令的解决方案层,尝试确定正确的值来解决问题。选择命令名称下方的 “查看命令定义解决方案层 ”链接,查看安装了命令定义的解决方案。
“解决方案层”窗格将显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义,其他层处于非活动状态,目前应用程序不使用。 如果卸载顶层解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 当存在非托管 活动 解决方案层时,它将始终是应用程序使用的定义。 如果没有列出活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由 Microsoft 发布的自定义托管解决方案也优先于 Microsoft 发布的解决方案层。
实体上下文指示功能区自定义的对象,如果列出了“所有实体”,则层来自应用程序功能区客户端扩展,而不是特定于实体,否则将列出实体的逻辑名称。
当存在两个或更多层时,可以选择两行,然后选择“ 比较 ”以查看每个解决方案引入的定义比较。
选择“ 后退 ”将返回到上一个“命令检查器”窗口。
下图显示了示例中命令的解决方案层,并指示有两个解决方案层,一个是名为 Active 的解决方案表示的非托管自定义,另一个来自 Microsoft 发布的系统解决方案。 你的实际方案可能有所不同,你可能没有活动解决方案层,你可能有一个托管解决方案,并且该解决方案的名称将在此处列出。
选择前两行,然后选择“ 比较 ”以查看每个解决方案引入的定义比较。 如果只有一个解决方案层,则跳过此步骤。
命令定义之间的比较将显示两个层之间可能存在的任何差异。 以下示例清楚地显示了库值是不同的。 活动解决方案中的非托管条目设置为不正确的路径 _/_static/common/scripts/RibbonActions.js , (特定路径) 可能略有不同,并且 Microsoft 的默认定义已将库设置为
$webresoure:Main_system_library.js
。 这是此特定命令的支持路径, (此值可能有所不同,具体取决于特定命令) 。 唯一支持的路径是一个以$webresource:
有效 JavaScript Web 资源的名称开头并结束的路径。查看解决方案层并确定安装自定义项的解决方案后,必须在相应的解决方案中修复定义。
选择与特定方案匹配的以下选项之一:
命令位于非托管 Active 解决方案中。
修复命令的方法将有所不同,具体取决于你的定义是唯一的,还是是否存在其他非活动定义,以及更改是否是有意的。
选择反映方案的选项:
-
命令没有任何特意修改,我想删除此自定义层。
若要删除 活动 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,编辑
<RibbonDiffXml>
customizations.xml 文件中的节点,然后导入该解决方案的新版本,其中删除了此命令以删除组件。 请参阅 导出、准备编辑和导入功能区。命令特定于实体
根据示例方案,你确定实体是帐户,必须删除的命令是
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。 请联系客户支持获取帮助。