命令栏上的按钮在 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。 否则,请选择前两个解决方案层。 (如果活动解决方案中有一个层,但它未在顶部列出,请选择活动解决方案层,然后选择顶部行。然后选择“ 比较”。
将显示当前活动定义和以前的非活动定义的比较,并显示差异(如果有)。 以下示例显示,非托管 Active 定义是通过错误地指定
FunctionName
值来自定义的,与Microsoft发布的系统解决方案层中的其他非活动定义相比。 该值FunctionName
应为XrmCore.Commands.Delete.deletePrimaryRecord
,但自定义定义已FunctionName="deletePrimaryRecord"
声明。 在这种情况下,选择按钮时不会发生任何操作,因为找不到该函数。修复按钮的操作功能所需的方法将取决于特定方案中的各种自定义。 考虑到此示例,该命令是通过指定不正确的
FunctionName
值来自定义的。 可以修改命令的自定义版本,并修复FunctionName
该值。 由于这是Microsoft发布的定义的自定义替代,并且没有其他有意修改,因此建议删除该命令的此自定义版本以还原默认功能。
选择以下修复选项之一。
选项 1:删除具有不正确 JavaScriptFunction 声明的命令
该命令位于非托管 Active 解决方案中。
若要删除 Active 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,并在 customizations.xml 文件中编辑<RibbonDiffXml>
节点,然后导入此解决方案的新版本,在该解决方案中删除此命令以删除组件。 请参阅 “导出”、“准备编辑”和导入功能区。
命令特定于实体
根据示例方案,你确定实体是帐户,必须删除的命令,Mscrm.DeletePrimaryRecord
并在 Active 非托管解决方案层中从名为 DefaultPublisherCITTest 的发布服务器声明该实体。
打开 高级设置。
导航到设置>解决方案。
选择“新建”以创建新解决方案,并将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。 (在本示例中,这是 DefaultPublisherCITTest.)
选择“实体添加现有实体>”。
选择命令定义的实体(在本示例中为“帐户”),然后选择“ 确定”。
在选择“完成”之前,请确保清除“包括实体元数据”和“添加所有资产”选项。
选择“保存”。
选择“ 导出解决方案”,然后导出非托管解决方案。
提取 .zip 文件。
打开 customizations.xml 文件。
<Entity>
找到要编辑的实体节点的节点子节点,并找到其子<RibbonDiffXml>
节点。<CommandDefinition>
找到节点。 (在此示例中,节点的<CommandDefinition>
ID 为Mscrm.DeletePrimaryRecord
.因此,你将找到以下节点。<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 解决方案中。
若要修复 Active 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,编辑<RibbonDiffXml>
customizations.xml文件中的节点,然后导入包含固定命令定义的此解决方案的新版本。 请参阅 “导出”、“准备编辑”和导入功能区。
警告
请勿从命令中删除 Mscrm.HideOnModern
显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern
命令适用于旧版 Web 客户端接口,在统一接口中不受支持,可能无法正常工作。
命令特定于实体
根据示例方案,你确定实体是帐户,必须修复的命令,Mscrm.DeletePrimaryRecord
并且该命令在名为 DefaultPublisherCITTest 的发布者的活动非托管解决方案层中声明。
打开 高级设置。
导航到设置>解决方案。
选择“新建”以创建新解决方案,并将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。 (在本示例中,这是 DefaultPublisherCITTest.)
选择“实体添加现有实体>”。
选择命令定义的实体(在本示例中,这是 帐户),然后选择“ 确定”。
在选择“完成”之前,请确保清除“包括实体元数据”和“添加所有资产”选项。
选择“保存”。
选择“ 导出解决方案”,然后导出非托管解决方案。
提取 .zip 文件。
打开 customizations.xml 文件。
<Entity>
找到要编辑的实体节点的节点子节点,并找到其子<RibbonDiffXml>
节点。<CommandDefinition>
找到节点。 (在此示例中,节点的<CommandDefinition>
ID 为Mscrm.DeletePrimaryRecord
.因此,你将找到以下节点。<RibbonDiffXml>
编辑节点,并对节点进行必要的更改<CommandDefinition>
,使命令能够在正确的情况下正常运行以修复命令。 有关如何声明命令的详细信息,请参阅 “定义功能区”命令和 “定义功能区操作”。 (根据示例,通过将<CommandDefinition>
JavaScriptFunction
值设置为FunctionName
XrmCore.Commands.Delete.deletePrimaryRecord
.)将修改 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、 跳过)以及任何启用或显示规则。
通过选择“vvron”图标来查看函数声明的详细信息,展开 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
设置为 。 这是此特定命令支持的路径(此值可能有所不同,具体取决于特定命令)。 唯一支持的路径是以有效 JavaScript Web 资源的名称开头$webresource:
和结尾的路径。查看解决方案层并确定安装自定义的解决方案后,必须在相应的解决方案中修复定义。
选择与特定方案匹配的以下选项之一:
该命令位于非托管 Active 解决方案中。
修复命令的方法因定义是唯一的,或者是否存在其他非活动定义以及更改是否有意而有所不同。
选择反映方案的选项:
该命令没有任何有意修改,我想删除此自定义层。
若要删除 Active 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,编辑
<RibbonDiffXml>
customizations.xml文件中的节点,然后导入已删除此命令的此解决方案的新版本,以便删除组件。 请参阅 “导出”、“准备编辑”和导入功能区。命令特定于实体
根据示例方案,你确定实体是帐户,必须删除的命令,
Mscrm.NewRecordFromForm
并在 Active 非托管解决方案层中从名为 DefaultPublisherCITTest 的发布服务器声明该实体。打开 高级设置。
导航到设置>解决方案。
选择“新建”以创建新解决方案,并将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。 (在本示例中,这是 DefaultPublisherCITTest.)
选择“实体添加现有实体>”。
选择命令所定义的实体。 (在本示例中,这是 帐户),然后选择“ 确定”。
在选择“完成”之前,请确保清除“包括实体元数据”和“添加所有资产”选项。
选择“保存”。
选择“ 导出解决方案”,然后导出非托管解决方案。
提取 .zip 文件。
打开 customizations.xml 文件。
<Entity>
找到要编辑的实体节点的节点子节点,并找到其子<RibbonDiffXml>
节点。<CommandDefinition>
找到节点(在本示例中,ID<CommandDefinition>
为Mscrm.NewRecordFromForm
.因此,你将找到以下节点。<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文件。
- 导入解决方案文件。
- 选择发布所有自定义项。
该命令具有我想保留的其他修改,并且我想修复此解决方案层。
若要修复 Active 非托管解决方案层中的命令,需要导出包含实体或应用程序功能区的非托管解决方案,并在 customizations.xml 文件中编辑
<RibbonDiffXml>
节点,然后导入包含固定命令定义的此解决方案的新版本。 请参阅 “导出”、“准备编辑”和导入功能区。警告
请勿从命令中删除
Mscrm.HideOnModern
显示规则,以强制按钮显示在统一接口中。 具有显示规则的Mscrm.HideOnModern
命令适用于旧版 Web 客户端接口,在统一接口中不受支持,可能无法正常工作。命令特定于实体
根据示例方案,你确定实体是帐户,必须修复的命令,
Mscrm.NewRecordFromForm
并且该命令在名为 DefaultPublisherCITTest 的发布者的活动非托管解决方案层中声明。打开 高级设置。
导航到设置>解决方案。
选择“新建”以创建新解决方案,并将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。 (在本示例中,这是 DefaultPublisherCITTest.)
选择“实体添加现有实体>”。
选择命令定义的实体(在本示例中,这是 帐户),然后选择“ 确定”。
在选择“完成”之前,请确保清除“包括实体元数据”和“添加所有资产”选项。
选择“保存”。
选择“ 导出解决方案”,然后导出非托管解决方案。
提取 .zip 文件。
打开 customizations.xml 文件
<Entity>
找到要编辑的实体节点的节点子节点,并找到其子<RibbonDiffXml>
节点。<CommandDefinition>
找到节点。 (在此示例中,节点的<CommandDefinition>
ID 为Mscrm.NewRecordFromForm
.因此,你将找到以下节点。编辑
<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。 请联系客户支持部门获取帮助。