适用于: Power Apps
原始 KB 数: 4552163
如果与该按钮关联的命令上的所有启用规则和显示规则的计算结果为 true,则会显示按钮。 如果这是意外的,则命令定义可能已被重写,并且缺少启用规则或显示规则,或者规则定义本身被重写,并导致按钮在预期隐藏时可见。
注意
某些按钮不可自定义。 有关详细信息,请参阅 功能区中的不可自定义按钮。
警告
不要从命令中删除 Mscrm.HideOnModern 显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern 命令适用于旧版 Web 客户端接口,在统一接口中不受支持,可能无法正常工作。
启用命令检查器,然后选择要检查的命令按钮。
以下示例显示了活动网格页上的两 个“约会” 按钮,其中一个按钮应隐藏。
选择 “命令属性 ”选项卡可显示此按钮的命令的详细信息。 这将显示每个规则评估的结果(True、False、跳过)的操作、启用规则和显示规则。 查看启用规则并显示规则,如果预期特定规则的计算结果应为 false,则规则可能自定义不正确,或者不满足返回 false 结果的必要情况。 如果是这样,请跳到步骤 9,否则命令可能缺少规则或规则,我们将查看命令解决方案层以供进一步分析。
选择命令名称下方的 “视图”命令定义解决方案层 链接,以查看安装了命令定义的解决方案(s)。
“解决方案层”窗格将显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义,其他层处于非活动状态,目前应用程序不会使用。 如果卸载顶部解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 当存在非托管 活动 解决方案层时,它始终是应用程序使用的定义。 如果没有列出的活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由Microsoft发布的自定义托管解决方案也将优先于Microsoft发布的解决方案层。
实体上下文指示功能区自定义对象(如果列出了“所有实体”),则层来自应用程序功能区客户端扩展而不是特定于实体的对象,否则将列出实体的逻辑名称。
当有两个或更多层时,可以选择两行,然后选择“比较”以查看每个解决方案引入的定义比较。
选择“后退”将返回到上一个命令检查器窗口。
如果只有一个解决方案层,请跳到步骤 9,否则,请选择前两个解决方案层(如果活动解决方案中有一个层,但它未在顶部列出,请选择活动解决方案层,然后选择顶部行),然后选择“ 比较”。
将显示当前活动定义和上一个非活动定义的比较,其中显示了差异(如果有)。 以下示例演示了自定义的非托管活动定义,该定义是使用删除非活动msdynce_ActivitiesPatchMicrosoft已发布解决方案层中包含的显示规则Mscrm.HideOnModern。
修复按钮可见性所需的方法将取决于特定方案中的各种自定义。 如果确定规则的计算错误为 false,并且规则定义未正确定义,则应修改规则定义并进行更改,以便规则在适当情况下评估为 false。 如果规则定义正确,则可能不符合使规则返回 false 的要求,例如字段值或安全权限未正确分配。 根据规则定义,要求可能会有很大差异,请参阅 “定义功能区启用规则”和 “定义功能区显示规则”。 考虑到我们的示例,该命令是使用删除显示规则进行自定义的 Mscrm.HideOnModern 。 此显示规则旨在隐藏此特定按钮以在统一接口应用程序中显示,并且仅在旧版 Web 客户端界面中可见。 我们可以修改命令的自定义版本,并将缺少的 Mscrm.HideOnModern 显示规则添加到命令定义。 由于这是Microsoft已发布定义的自定义替代,并且没有其他有意修改,因此建议删除该命令的此自定义版本以还原默认功能。
修复选项
从下面的选项卡之一中选择修复选项。 默认选择第一个选项卡。
如何删除命令
如果有另一个解决方案层包含此命令的工作定义,则可以删除此定义以还原下一个非活动的工作定义。
如果这是唯一的层,并且不再需要该命令,则如果没有其他按钮引用该命令,则可以将其从解决方案中删除。
选择与特定方案匹配的以下选项之一:
该命令位于非托管活动解决方案中
若要删除活动非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并编辑<RibbonDiffXml>customizations.xml文件中的节点,然后导入已删除此命令的此解决方案的新版本,以便删除组件。 请参阅 “导出”、“准备编辑”和导入功能区。
命令特定于实体
根据我们的示例方案,我们发现实体是 activitypointer,需要删除的命令是从Mscrm.CreateAppointment名为 DefaultPublisherCITTest 的发布者在 Active 非托管解决方案层中声明的。
打开 高级设置。
导航到 “设置 ”->“解决方案”。
选择“新建”以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。 (在我们的示例中,这是 DefaultPublisherCITTest)。
选择“实体添加现有实体>”。
选择命令定义的实体(在本示例中,这是 活动点器),然后选择“ 确定”。
在选择“完成”之前,请确保取消选中“包括实体元数据”,然后取消选中“添加所有资产”选项。
选择“保存”。
选择“ 导出解决方案 ”并导出非托管解决方案。
提取 .zip 文件。
打开 customizations.xml 文件。
<Entity>找到要编辑的实体节点的节点子节点,并找到其子<RibbonDiffXml>节点。
<CommandDefinition>找到节点(在我们的示例中,节点的 <CommandDefinition> ID 为Mscrm.CreateAppointment,因此我们将找到以下节点)。
<RibbonDiffXml>编辑节点并删除具有要删除的命令 ID 的特定<CommandDefinition>节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。 (根据我们的示例,我们将删除 <CommandDefinition> ID 为 Mscrm.CreateAppointment.)
保存customizations.xml文件。
将修改 后的 customizations.xml文件添加回解决方案.zip文件。
导入解决方案文件。
选择发布所有自定义项。
该命令位于应用程序功能区中(适用于“所有实体”)
如果命令不是特定于实体的,而是适用于应用程序功能区中声明的“所有实体”,则步骤将略有不同,如下所示:
- 打开 高级设置。
- 导航到设置>解决方案
- 选择“新建”以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。
- 选择“客户端扩展>添加现有>应用程序功能区”。
- 选择“保存”。
- 选择“ 导出解决方案 ”并导出非托管解决方案。
- 提取 .zip 文件。
- 打开 customizations.xml 文件。
- 找到根
<RibbonDiffXml> 节点。
- 找到 .
<CommandDefinition>
<RibbonDiffXml>编辑节点并删除<CommandDefinition>具有要删除的命令 ID 的节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。
- 保存customizations.xml文件。
- 将修改 后的customizations.xml 文件添加回压缩解决方案.zip文件。
- 导入解决方案文件。
- 选择发布所有自定义项。
该命令来自我的公司创作的自定义托管解决方案
若要删除由你创建的自定义托管解决方案安装的命令,请执行以下步骤:
- 在具有自定义解决方案的非托管源版本的单独开发组织中,完成上述命令的步骤 位于非托管活动解决方案 选项中。
- 递增自定义解决方案的版本。
- 将解决方案导出为托管解决方案。
- 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
该命令来自我的公司未创作的自定义托管解决方案(来自第三方/ISV)
若要删除由第三方/ISV 创建的自定义托管解决方案安装的命令,需要联系解决方案的作者并请求删除特定命令定义的新版本解决方案,然后将此新解决方案安装到受影响的组织中。
如何将缺少的启用/显示规则添加到命令
如果对需要保留的命令进行了修改,但仍希望在适当情况下隐藏该按钮,则可以将缺少的启用/显示规则添加到命令,而不是删除自定义定义。
选择与特定方案匹配的以下选项之一:
该命令位于非托管活动解决方案中
如果确定命令定义中缺少启用/显示规则,则可以修改 <CommandDefinition> 节点并添加规则以实现所需的行为。 若要修复 Active 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并编辑<RibbonDiffXml>customizations.xml文件中的节点,然后导入包含固定命令定义的此解决方案的新版本。 请参阅 “导出”、“准备编辑”和导入功能区。
命令特定于实体
根据我们的示例方案,我们发现实体是 activitypointer,需要修复的命令是在 Mscrm.CreateAppointment Active 非托管解决方案层中从名为 DefaultPublisherCITTest 的发布者声明的。
打开 高级设置。
导航到设置>解决方案。
选择“新建”以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。 (在我们的示例中,这是 DefaultPublisherCITTest)
选择“实体添加现有实体>”。
选择命令定义的实体(在本示例中,这是 活动点器),然后选择“ 确定”。
在选择“完成”之前,请确保取消选中“包括实体元数据”并添加所有资产选项。
选择“保存”。
选择“ 导出解决方案 ”并导出非托管解决方案。
提取 .zip 文件。
打开 customizations.xml 文件。
<Entity>找到要编辑的实体节点的节点子节点,并找到其子<RibbonDiffXml>节点。
<CommandDefinition>找到节点。 在此示例中,节点的 <CommandDefinition> ID 为 Mscrm.CreateAppointment. 因此,你将找到以下节点:
<RibbonDiffXml>编辑节点,并对节点进行必要的更改<CommandDefinition>,使命令能够在正确的情况下正常运行以修复命令。 有关如何声明命令的详细信息,请参阅 “定义功能区”命令。 (根据我们的示例,我们将通过添加正确隐藏此按钮的Mscrm.HideOnModern显示规则来修改<CommandDefinition>节点。
将修改 customizations.xml 文件还原到解决方案.zip文件。
导入解决方案文件。
选择发布所有自定义项。
该命令位于应用程序功能区中(适用于“所有实体”)
如果命令不是特定于实体的,而是适用于应用程序功能区中声明的“所有实体”,则步骤将略有不同,如下所示:
- 打开 高级设置。
- 导航到设置>解决方案。
- 选择“新建”以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。
- 选择“客户端扩展>添加现有>应用程序功能区”。
- 选择“保存”。
- 选择“ 导出解决方案 ”并导出非托管解决方案。
- 提取 .zip 文件。
- 打开 customizations.xml 文件。
- 找到根
<RibbonDiffXml> 节点。
- 找到 .
<CommandDefinition>
- 编辑
<RibbonDiffXml> 并对节点进行必要的更改 <CommandDefinition> ,使命令能够在正确的情况下正常运行以修复命令。 有关如何声明命令的详细信息,请参阅 “定义功能区”命令。
- 将修改 后的 customizations.xml文件添加回解决方案.zip文件。
- 导入解决方案文件。
- 选择发布所有自定义项。
该命令来自我创作的自定义托管解决方案
若要修复由你创建的自定义托管解决方案安装的命令,请执行以下步骤:
- 在具有自定义解决方案的非托管源版本的单独开发组织中,完成上述命令的步骤 位于非托管活动解决方案 选项中。
- 递增自定义解决方案的版本。
- 将解决方案导出为托管解决方案。
- 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
该命令来自我未创作的自定义托管解决方案或组织不拥有(即来自第三方/ISV)
若要修复由由第三方/ISV 创建的自定义托管解决方案安装的命令,需要联系解决方案的作者,并请求包含固定命令定义的解决方案的新版本,并将此新解决方案安装到受影响的组织中。
该命令位于Microsoft已发布的托管解决方案中
若要修复由Microsoft已发布的托管解决方案安装的命令,可能需要安装较新版本的解决方案,这通常在发布更新期间完成。 你可能已经发现了一个仍需要修复的 bug。 请联系客户支持以获取帮助。
如何修复启用/显示规则
选择规则名称下方的 “查看规则定义”解决方案层 链接,以查看安装了规则定义的解决方案。
“解决方案层”窗格将显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义,其他层处于非活动状态,目前应用程序不会使用。 如果卸载顶部解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 当存在非托管 活动 解决方案层时,它始终是应用程序使用的定义。 如果没有列出的活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由Microsoft发布的自定义托管解决方案也将优先于Microsoft发布的解决方案层。
实体上下文指示功能区自定义对象(如果列出了“所有实体”),则层来自应用程序功能区客户端扩展而不是特定于实体的对象,否则将列出实体的逻辑名称。
当有两个或更多层时,可以选择两行,然后选择“比较”以查看每个解决方案引入的定义比较。
选择“后退”将返回到上一个命令检查器窗口。
下图显示了示例中启用规则的解决方案层,并指示本例中有一个解决方案层,并且它是名为 Active 的解决方案所表示的非托管自定义项。 实际方案可能有所不同,你可能不是活动解决方案层,你可能有一个托管解决方案,该解决方案的名称将在此处列出。
现在,我们已经查看了解决方案层,并确定了安装了自定义项的解决方案,因此我们必须在相应的解决方案中修复定义。
选择与特定方案匹配的以下选项之一:
启用/显示规则位于非托管活动解决方案中
若要修复活动非托管解决方案层中的启用/显示规则,我们将导出包含实体或应用程序功能区的非托管解决方案,并在customizations.xml文件中编辑<RibbonDiffXml>节点,然后导入包含固定启用/显示规则定义的此解决方案的新版本。 请参阅 “导出”、“准备编辑”和导入功能区。
enable/display 规则特定于实体
根据我们的示例方案,我们发现实体是联系的,需要修复的启用规则是在 new.contact.EnableRule.EntityRule Active 非托管解决方案层中声明的,该规则由名为 DefaultPublisherCITTest 的发布者声明。
打开 高级设置。
导航到设置>解决方案。
选择“新建”以创建新解决方案,将 Publisher 设置为“命令检查器”解决方案层中为“启用规则”和“活动”解决方案层列出的值。 (在我们的示例中,这是 DefaultPublisherCITTest)
选择“实体添加现有实体>”。
选择启用/显示规则定义的实体(在本示例中,这是 联系人),然后选择“ 确定”。
在选择“完成”之前,请确保取消选中“包括实体元数据”并添加所有资产选项。
选择“保存”。
选择“ 导出解决方案 ”并导出非托管解决方案。
提取 .zip 文件。
打开 customizations.xml 文件。
<Entity>找到要编辑的实体节点的节点子节点,并找到其子<RibbonDiffXml>节点。
找到启用/显示规则。 在此示例中,启用规则的 ID 为 new.contact.EnableRule.EntityRule。 因此,你将找到以下节点:
<RibbonDiffXml>编辑节点,并对启用/显示规则进行必要的更改,使规则能够在正确的情况下评估为 True 以修复规则。 有关如何声明规则的详细信息,请参阅 “定义功能区启用规则”和 “定义功能区显示规则”。 (根据我们的示例,我们将规则定义更改为以下内容)
将修改 后的 customizations.xml文件添加回解决方案.zip文件。
导入解决方案文件。
选择发布所有自定义项。
启用/显示规则位于应用程序功能区中(适用于“所有实体”)
如果启用/显示规则不是特定于实体的,而是适用于应用程序功能区中声明的“所有实体”,则步骤将略有不同,如下所示:
- 打开 高级设置。
- 导航到设置>解决方案。
- 选择“新建”以创建新解决方案,将 Publisher 设置为命令检查器的解决方案层列表中显示的值,以便启用/显示规则和活动解决方案层。
- 选择“客户端扩展>添加现有>应用程序功能区”。
- 选择“保存”。
- 选择“ 导出解决方案 ”并导出非托管解决方案。
- 提取 .zip 文件。
- 打开 customizations.xml 文件。
- 找到根
<RibbonDiffXml> 节点。
- 找到启用/显示规则。
<RibbonDiffXml>编辑节点,并对启用/显示规则进行必要的更改,使规则能够在正确的情况下评估为 True 以修复规则。 有关如何声明规则的详细信息,请参阅 “定义功能区启用规则”和 “定义功能区显示规则”。
- 将修改 后的 customizations.xml文件添加回解决方案.zip文件。
- 导入解决方案文件。
- 选择发布所有自定义项。
启用/显示规则来自我创作的自定义托管解决方案
若要修复由创建的自定义托管解决方案安装的启用/显示规则,请执行以下步骤:
- 在具有自定义解决方案的非托管源版本的单独开发组织中,完成上面为 “启用/显示”规则列出的步骤位于非托管活动解决方案 选项中。
- 递增自定义解决方案的版本。
- 将解决方案导出为托管解决方案。
- 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
启用/显示规则来自我未创作的自定义托管解决方案或我的组织不拥有(来自第三方/ISV)
若要修复由第三方/ISV 创建的自定义托管解决方案安装的启用/显示规则,需要联系解决方案的作者并请求包含固定启用/显示规则定义的新版本解决方案,并将此新解决方案安装到受影响的组织中。
启用/显示规则位于Microsoft发布的托管解决方案中
若要修复由Microsoft已发布的托管解决方案安装的启用/显示规则,可能需要安装较新版本的解决方案,这通常在发布更新期间完成。 你可能已经发现了一个仍需要修复的 bug。 请联系客户支持以获取帮助。
参考
模型驱动应用功能区的命令检查器