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