适用于: Power Apps
原始 KB 数: 4552163
由于启用规则或与按钮评估为 false 的按钮关联的命令上的显示规则,按钮可能会隐藏。 关联的命令可能有一个显示规则,该规则将隐藏统一 Mscrm.HideOnModern
接口应用程序中的按钮。 也可以创建 HideCustomAction,以强制隐藏按钮。 如果用户处于脱机状态,则不显示启用规则的 Mscrm.IsEntityAvailableForUserInMocaOffline
自定义命令和默认命令。
警告
- 如果实体启用了“移动”选项,则 EntityPrivilegeRule 类型的任何显示规则(创建、写入、删除、分配、共享)的 PrivilegeType 值之一(创建、写入、删除、分配、共享)的计算结果为 false,这将强制实体仅允许读取权限。 在实体上启用只读移动标志时,一些最常用默认系统规则的计算结果为 false 的示例如下所示,但包括但不限于此列表(
Mscrm.CreateSelectedEntityPermission
、、Mscrm.CanSavePrimary
、Mscrm.CanDeletePrimary
Mscrm.WritePrimaryEntityPermission
Mscrm.CanWriteSelected
Mscrm.CanWritePrimary
Mscrm.WriteSelectedEntityPermission
、 。 Mscrm.ShareSelectedEntityPermission
Mscrm.DeletePrimaryEntityPermission
Mscrm.DeleteSelectedEntityPermission
Mscrm.AssignSelectedEntityPermission
Mscrm.SharePrimaryPermission
可以编辑实体并取消选中 “移动 中的只读”选项,以允许这些规则评估为 true,前提是规则所测试的权限也授予用户。
- 不要从命令中删除
Mscrm.HideOnModern
显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern
命令适用于旧版 Web 客户端接口,在统一接口中不受支持,可能无法正常工作。
启用命令检查器,然后选择要检查的命令按钮。
以下示例显示联系人实体网格页上的“新建”按钮不可见,并且由标记为“新建”的项表示。
注意
如果未列出按钮,可能是由于 可能已安装的 HideCustomAction 自定义,或者关联的命令具有 Mscrm.HideOnModern
显示规则。 编写本指南时,命令检查器工具不会列出已被隐藏 HideCustomAction
或 Mscrm.HideOnModern
显示规则的按钮。 我们目前正在努力扩充此列表,以便在将来的更新中包含此信息。
注意
如果所有规则的计算结果为 True 时按钮仍然隐藏,则可能是因为 网格中的上下文敏感命令。 在网格中选择记录时,不带 SelectionCountRule
元素的所有按钮都将被视为与所选记录无关。 即使规则评估为 True,它们也会隐藏。 请注意,浮出控件不会受到影响,因为浮出控件子级可能仍具有基于记录的命令。
选择 “命令属性 ”选项卡可显示此按钮的命令的详细信息。 这将显示启用规则和显示规则,以及每个规则评估的结果(True、 False、 跳过)。 以下示例显示了要包含的“新建”(隐藏)按钮的命令Mscrm.NewRecordFromGrid
,并且有一个名为new.contact.EnableRule.EntityRule
“False”的启用规则,因此该按钮将被隐藏。
new.contact.EnableRule.EntityRule
展开启用规则,方法是在 V 形图标上选择以查看规则的详细信息。 若要了解规则的计算结果为 True 或 False 的原因,需要对规则类型稍有了解。 有关每种规则类型的详细信息,请参阅 “定义功能区启用规则”和 “定义功能区显示规则”。 以下示例显示规则类型为 Entity ,实体逻辑名称为 帐户。 由于当前实体是 联系人,这不等于 帐户,因此此规则返回 False。
修复按钮可见性所需的方法将取决于特定方案中的各种自定义。 考虑我们的示例:
- 如果此规则被错误地创建,以便规则中声明的实体旨在 联系 但已设置为 帐户,则可以编辑
new.contact.EnableRule.EntityRule
启用规则并进行更改,以便规则的计算结果为 true。
- 如果无意中将此规则添加到命令,则可以修改
Mscrm.NewRecordFromGrid
命令并从命令定义中删除 new.contact.EnableRule.EntityRule
启用规则。
- 如果命令是Microsoft已发布定义的替代,则可以删除该命令的此自定义版本以还原默认功能。
修复选项
从下面的选项卡之一中选择修复选项。 默认选择第一个选项卡。
如何删除命令
如果有另一个解决方案层包含命令的工作定义,则可以删除该定义以还原非活动的工作定义。
如果这是唯一的层,并且不再需要该命令,则如果没有其他按钮引用该命令,则可以将其从解决方案中删除。
若要删除命令,我们需要确定安装了自定义项的解决方案:
选择命令名称下方的 “视图”命令定义解决方案层 链接,以查看安装了命令定义的解决方案(s)。
“解决方案层”窗格将显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义,其他层处于非活动状态,目前应用程序不会使用。 如果卸载顶部解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 当存在非托管 活动 解决方案层时,它始终是应用程序使用的定义。 如果没有列出的活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由Microsoft发布的自定义托管解决方案也将优先于Microsoft发布的解决方案层。
实体上下文指示功能区自定义对象(如果列出了“所有实体”),则层来自应用程序功能区客户端扩展而不是特定于实体的对象,否则将列出实体的逻辑名称。
当有两个或更多层时,可以选择两行,然后选择“比较”以查看每个解决方案引入的定义比较。
选择“后退”将返回到上一个命令检查器窗口。
下图显示了示例中命令的解决方案层,并指示联系人实体的解决方案层是非托管自定义项,如标题 为“活动”的解决方案所示。 实际方案可能有所不同,你可能没有活动解决方案层,你可能有一个托管解决方案,该解决方案的名称将在此处列出。
现在,我们已经查看了解决方案层并确定了安装自定义项的解决方案,因此我们必须在相应的解决方案中修复定义。
选择与特定方案匹配的以下选项之一:
该命令位于非托管活动解决方案中
若要删除活动非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并编辑<RibbonDiffXml>
customizations.xml文件中的节点,然后导入已删除此命令的此解决方案的新版本,以便删除组件。 请参阅 “导出”、“准备编辑”和导入功能区。
命令特定于实体
根据我们的示例方案,我们发现实体是 联系 的,需要删除的命令是在 Mscrm.NewRecordFromGrid
Active 非托管解决方案层中从名为 DefaultPublisherCITTest 的发布者声明的。
打开 高级设置。
导航到设置>解决方案。
选择“新建”以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。 (在我们的示例中,这是 DefaultPublisherCITTest)
选择“实体添加现有实体>”。
选择命令定义的实体(在本示例中,这是 联系人),然后选择“ 确定”。
在选择“完成”之前,请确保取消选中“包括实体元数据”并添加所有资产选项。
选择“保存”。
选择“ 导出解决方案 ”并导出非托管解决方案。
提取 .zip 文件。
打开 customizations.xml 文件。
<Entity>
找到要编辑的实体节点的节点子节点,并找到其子<RibbonDiffXml>
节点。
<CommandDefinition>
找到节点。 (在我们的示例中,节点的 <CommandDefinition>
ID 为 Mscrm.NewRecordFromGrid
,因此我们将找到以下节点)
<RibbonDiffXml>
编辑节点并删除具有要删除的命令 ID 的特定<CommandDefinition>
节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition>
节点。 (根据我们的示例,我们将删除 <CommandDefinition>
ID 为 Mscrm.NewRecordFromGrid
.)
保存customizations.xml文件。
将修改 后的 customizations.xml文件添加回解决方案.zip文件。
导入解决方案文件。
选择发布所有自定义项。
该命令位于应用程序功能区中(适用于“所有实体”)
如果命令不是特定于实体的,而是适用于应用程序功能区中声明的“所有实体”,则步骤将略有不同,如下所示:
- 打开 高级设置。
- 导航到设置>解决方案。
- 选择“新建”以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。
- 选择“客户端扩展>添加现有>应用程序功能区”。
- 选择“保存”。
- 选择“ 导出解决方案 ”并导出非托管解决方案。
- 提取 .zip 文件。
- 打开 customizations.xml 文件。
- 找到根
<RibbonDiffXml>
节点。
<CommandDefinition>
找到节点。
<RibbonDiffXml>
编辑节点并删除<CommandDefinition>
具有要删除的命令 ID 的节点。 请确保不会无意中删除可能存在的其他 <CommandDefinitions>
节点。
- 保存customizations.xml文件。
- 将修改 后的customizations.xml 文件添加回压缩解决方案.zip文件。
- 导入解决方案文件。
- 选择发布所有自定义项。
该命令来自我的公司创作的自定义托管解决方案
若要删除由你创建的自定义托管解决方案安装的命令,请执行以下步骤:
- 在具有自定义解决方案的非托管源版本的单独开发组织中,完成上述命令的步骤 位于非托管活动解决方案 选项中。
- 递增自定义解决方案的版本。
- 将解决方案导出为托管解决方案。
- 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
该命令来自我的公司未创作的自定义托管解决方案(来自第三方/ISV)
若要删除由第三方/ISV 创建的自定义托管解决方案安装的命令,需要联系解决方案的作者并请求删除特定命令定义的新版本解决方案,然后将此新解决方案安装到受影响的组织中。
如何修复启用/显示规则
选择规则名称下方的 “查看规则定义”解决方案层 链接,以查看安装了规则定义的解决方案。
“解决方案层”窗格将显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义,其他层处于非活动状态,目前应用程序不会使用。 如果卸载顶部解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 当存在非托管 活动 解决方案层时,它始终是应用程序使用的定义。 如果没有列出的活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由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。 请联系客户支持以获取帮助。
如何修复命令
若要修复命令,我们需要确定安装了自定义项的解决方案。
选择命令名称下方的 “视图”命令定义解决方案层 链接,以查看安装了命令定义的解决方案(s)。
“解决方案层”窗格将显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义,其他层处于非活动状态,目前应用程序不会使用。 如果卸载顶部解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 当存在非托管 活动 解决方案层时,它始终是应用程序使用的定义。 如果没有列出的活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由Microsoft发布的自定义托管解决方案也将优先于Microsoft发布的解决方案层。
实体上下文指示功能区自定义对象(如果列出了“所有实体”),则层来自应用程序功能区客户端扩展而不是特定于实体的对象,否则将列出实体的逻辑名称。
当有两个或更多层时,可以选择两行,然后选择“比较”以查看每个解决方案引入的定义比较。
选择“后退”将返回到上一个命令检查器窗口。
下图显示了示例中命令的解决方案层,并指示此联系人中有一个解决方案层,并且它是名为 Active 的解决方案所表示的非托管自定义项。 实际方案可能有所不同,你可能没有活动解决方案层,你可能有一个托管解决方案,该解决方案的名称将在此处列出。
现在,我们已经查看了解决方案层并确定了安装自定义项的解决方案,因此我们必须在相应的解决方案中修复定义。
选择与特定方案匹配的以下选项之一:
该命令位于非托管活动解决方案中
若要修复 Active 非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在customizations.xml文件中编辑<RibbonDiffXml>
节点,然后导入包含固定命令定义的此解决方案的新版本。 请参阅 “导出”、“准备编辑”和导入功能区。
警告
不要从命令中删除 Mscrm.HideOnModern
显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern
命令适用于旧版 Web 客户端接口,在统一接口中不受支持,可能无法正常工作。
命令特定于实体
根据我们的示例方案,我们发现实体是 联系 的,需要修复的命令是在 Mscrm.NewRecordFromGrid
Active 非托管解决方案层中从名为 DefaultPublisherCITTest 的发布者声明的。
打开 高级设置。
导航到设置>解决方案。
选择“新建”以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。 (在我们的示例中,这是 DefaultPublisherCITTest)
选择“实体”。
选择“ 添加现有”。
选择命令定义的实体(在本示例中,这是 联系人),然后选择“ 确定”。
在选择“完成”之前,请确保取消选中“包括实体元数据”并添加所有资产选项。
选择“保存”。
选择“ 导出解决方案 ”并导出非托管解决方案。
提取 .zip 文件。
打开 customizations.xml 文件。
<Entity>
找到要编辑的实体节点的节点子节点,并找到其子<RibbonDiffXml>
节点。
<CommandDefinition>
找到节点。 (在我们的示例中,节点的 <CommandDefinition>
ID 为 Mscrm.NewRecordFromGrid
,因此我们将找到以下节点)
<RibbonDiffXml>
编辑节点,对节点进行必要的更改<CommandDefinition>
,使命令在正确的情况下能够正常运行以修复命令。 有关声明命令的更多帮助,请参阅 “定义功能区”命令。 (根据我们的示例,我们将通过删除new.contact.EnableRule.EntityRule
导致按钮隐藏的启用规则来修改<CommandDefinition>
节点。
将修改 后的customizations.xml 文件添加回解决方案.zip文件
导入解决方案文件。
选择发布所有自定义项。
该命令位于应用程序功能区中(适用于“所有实体”)
如果命令不是特定于实体的,而是适用于应用程序功能区中声明的“所有实体”,则步骤将略有不同,如下所示:
- 打开 高级设置。
- 导航到设置>解决方案。
- 选择“新建”以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。
- 选择“客户端扩展>添加现有>应用程序功能区”。
- 选择“保存”。
- 选择“ 导出解决方案 ”并导出非托管解决方案。
- 提取 .zip 文件。
- 打开 customizations.xml 文件。
- 找到根
<RibbonDiffXml>
节点。
<CommandDefinition>
找到节点。
<RibbonDiffXml>
编辑节点,对节点进行必要的更改<CommandDefinition>
,使命令在正确的情况下能够正常运行以修复命令。 有关声明命令的更多帮助,请参阅 “定义功能区”命令。
- 将修改 后的 customizations.xml文件添加回解决方案.zip文件。
- 导入解决方案文件。
- 选择发布所有自定义项。
该命令来自我创作的自定义托管解决方案
若要修复由你创建的自定义托管解决方案安装的命令,请执行以下步骤:
- 在具有自定义解决方案的非托管源版本的单独开发组织中,完成上述命令的步骤 位于非托管活动解决方案 选项中。
- 递增自定义解决方案的版本。
- 将解决方案导出为托管解决方案。
- 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
该命令来自我未创作的自定义托管解决方案,或者我的组织不拥有(来自第三方/ISV)
若要修复由由第三方/ISV 创建的自定义托管解决方案安装的命令,需要联系解决方案的作者,并请求包含固定命令定义的解决方案的新版本,并将此新解决方案安装到受影响的组织中。
该命令位于Microsoft已发布的托管解决方案中
若要修复由Microsoft已发布的托管解决方案安装的命令,可能需要安装较新版本的解决方案,这通常在发布更新期间完成。 你可能已经发现了一个仍需要修复的 bug。 请联系客户支持以获取帮助。
参考
模型驱动应用功能区的命令检查器