命令栏上的按钮应在 Power Apps 中可见时隐藏

适用于: Power Apps
原始 KB 编号: 4552163

确定隐藏按钮的原因

由于与按钮评估为 false 关联的命令上的启用规则显示规则,按钮可能会隐藏。 可能是关联的命令具有隐藏统一 Mscrm.HideOnModern 接口应用程序中按钮的显示规则。 还可以创建 HideCustomAction ,以强制隐藏按钮。 如果用户处于脱机状态,则不会显示自定义命令和没有 Mscrm.IsEntityAvailableForUserInMocaOffline 启用规则的默认命令。

警告

  • 如果实体启用了“移动版中只读”选项,则任何 PrivilegeType 值为以下其中一项的 EntityPrivilegeRule类型的显示规则 (创建写入删除分配共享) 都将计算为 false,这将强制实体仅允许读取权限。 在实体上启用“移动版中只读”标志时,一些最常见的默认系统规则的计算结果为 false 的示例如下,但不仅限于此列表 (Mscrm.CreateSelectedEntityPermission、、 Mscrm.CanWritePrimaryMscrm.DeleteSelectedEntityPermissionMscrm.AssignSelectedEntityPermissionMscrm.SharePrimaryPermissionMscrm.CanSavePrimaryMscrm.WritePrimaryEntityPermissionMscrm.ShareSelectedEntityPermissionMscrm.CanWriteSelectedMscrm.WriteSelectedEntityPermissionMscrm.CanDeletePrimaryMscrm.DeletePrimaryEntityPermission) 。 可以编辑实体并取消选中 “移动版中只读 ”选项,以允许这些规则的计算结果为 true,前提是该规则正在测试的权限也授予用户。
  • 不要从命令中删除 Mscrm.HideOnModern 显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern 命令适用于旧版 Web 客户端接口,在统一接口中不受支持,并且可能无法正常工作。
  1. 启用命令检查器,然后选择要检查的命令按钮

  2. 以下示例显示联系人实体网格页上的“ 新建 ”按钮不可见,并且由标记为 “新建 (隐藏) 的项表示。

    注意

    如果未列出按钮,则可能是由于已安装 HideCustomAction 自定义项,或者关联的命令具有 Mscrm.HideOnModern 显示规则。 在编写本指南时,命令检查器工具不会列出已被 或Mscrm.HideOnModern显示规则隐藏的HideCustomAction按钮。 我们目前正在努力扩充此列表,以在将来的更新中包含此信息。

    屏幕截图显示联系人实体网格页上的“新建”按钮不可见,由标记为“新建 (隐藏) 项表示。

    注意

    如果当所有规则的计算结果都为 True 时,按钮仍然处于隐藏状态,则可能是由于 网格中的上下文敏感命令导致的。 在网格中选择记录时,没有 SelectionCountRule 元素的所有按钮都被视为与所选记录 () 无关。 即使规则评估为 True,它们也会被隐藏。 请注意,浮出控件不受影响,因为浮出控件子级可能仍具有基于记录的命令。

  3. 选择“ 命令属性 ”选项卡以显示此按钮的命令的详细信息。 这将显示启用规则和显示规则,以及每个规则评估的结果 (TrueFalse跳过) 。 以下示例显示 “新建 (隐藏) 按钮的命令 Mscrm.NewRecordFromGrid ,并且有一个名为 new.contact.EnableRule.EntityRule 的启用规则的计算结果为 False,因此该按钮将被隐藏。

    屏幕截图显示了“新建 (隐藏) ”按钮的命令属性详细信息。

  4. new.contact.EnableRule.EntityRule展开启用规则,方法是在 v 形图标上选择以查看规则的详细信息。 若要了解规则的计算结果为何为 True 或 False,需要稍微了解规则类型。 有关每种类型的规则的详细信息,请参阅 定义功能区启用规则定义功能区显示规则。 以下示例显示规则类型为 Entity ,实体逻辑名称为 account。 由于当前实体是 contact,这不等于 account,因此此规则返回 False。

    屏幕截图显示了查看规则详细信息的示例。

  5. 修复按钮可见性所需的方法将取决于特定方案中的各种自定义项。 考虑我们的示例:

    • 如果错误地创建了此规则,使得在规则中声明的实体本来是 联系 实体,但设置为 帐户,则可以编辑 new.contact.EnableRule.EntityRule 启用规则并进行更改,使规则的计算结果为 true。
    • 如果无意中将此规则添加到命令,则可以修改命令并从 Mscrm.NewRecordFromGrid 命令定义中删除 new.contact.EnableRule.EntityRule 启用规则。
    • 如果命令是 Microsoft 已发布定义的替代,则可以删除该命令的此自定义版本以还原默认功能。

修复选项

从以下任一选项卡中选择修复选项。 第一个选项卡默认处于选中状态。

如何删除命令

如果有另一个解决方案层包含命令的工作定义,则可以删除该定义以还原非活动工作定义。

如果这是唯一层,并且不再需要 命令,则可以在没有其他按钮引用命令时将其从解决方案中删除。

若要删除命令,需要确定哪个解决方案安装了自定义项:

  1. 选择命令名称下方的 “查看命令定义解决方案层 ”链接,查看安装了命令定义的解决方案 () 。

    命令名称下的“查看命令定义解决方案层”链接的屏幕截图。

  2. “解决方案层”窗格将显示已安装特定解决方案的每个功能区组件定义的分层。 列表顶部的层是应用程序使用的当前定义,其他层处于非活动状态,应用程序目前不使用。 如果卸载顶层解决方案或安装了删除定义的更新版本,则下一层将成为应用程序使用的当前活动定义。 当存在非托管 活动 解决方案层时,它将始终是应用程序使用的定义。 如果没有列出活动解决方案,则列表顶部列出的解决方案将是应用程序使用的定义。 任何未由 Microsoft 发布的自定义托管解决方案也优先于 Microsoft 发布的解决方案层。

    实体上下文指示功能区自定义的对象,如果列出了“所有实体”,则层来自应用程序功能区客户端扩展,而不是特定于实体,否则将列出实体的逻辑名称。

    当存在两个或更多层时,可以选择两行,然后选择“ 比较 ”以查看每个解决方案引入的定义比较。

    选择“ 后退 ”将返回到上一个“命令检查器”窗口。

    下图显示了示例中命令的解决方案层,并指示联系人实体有一个解决方案层,该层是名为 Active 的解决方案所表示的非托管自定义项。 你的实际方案可能有所不同,你可能没有 活动 解决方案层,你可能有一个托管解决方案,并且该解决方案的名称将在此处列出。

    屏幕截图显示了解决方案层的示例。

  3. 现在,我们已查看解决方案层并标识了安装自定义项的解决方案,因此必须在相应的解决方案中修复定义。

选择与特定方案匹配的以下选项之一:

命令位于非托管活动解决方案中

若要删除活动非托管解决方案层中的命令,我们将导出包含实体或应用程序功能区的非托管解决方案,并在 customizations.xml 文件中编辑<RibbonDiffXml>节点,然后导入该解决方案的新版本,其中删除了此命令以删除组件。 请参阅 导出、准备编辑和导入功能区

命令特定于实体

根据我们的示例方案,我们确定实体是 contact ,需要删除的命令是 Mscrm.NewRecordFromGrid ,并且它从名为 DefaultPublisherCITTest 的发布者在 Active 非托管解决方案层中声明。

  1. 打开“高级设置”。

  2. 导航到 “设置>解决方案”。

  3. 选择“ 新建 ”创建新解决方案,将 “发布服务器 ”设置为命令检查器的解决方案层列表中针对命令和“活动”解决方案层显示的值。 (在我们的示例中,这是 DefaultPublisherCITTest)

  4. 选择“实体添加现有实体>”。

  5. 选择在 (上定义命令的实体在我们的示例中,这是 联系人) 并选择 “确定”。

  6. 在选择“完成”之前,请确保取消选中“包括实体元数据”和“添加所有资产”选项。

  7. 选择“保存”。

  8. 选择“ 导出解决方案 ”并导出非托管解决方案。

  9. 提取 .zip 文件。

  10. 打开 customizations.xml 文件。

  11. <Entity>找到要编辑的实体节点的子节点,并找到其子<RibbonDiffXml>节点。

  12. 找到节点 <CommandDefinition> 。 (在我们的示例中,节点的 <CommandDefinition> ID 为 Mscrm.NewRecordFromGrid,因此我们会找到以下节点)

    屏幕截图显示了 CommandDefinition 节点的位置。

  13. <RibbonDiffXml>编辑节点并删除具有要删除的命令 ID 的特定<CommandDefinition>节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。 (根据我们的示例,我们将删除 <CommandDefinition> ID 为 Mscrm.NewRecordFromGrid.)

    删除 CommandDefinition 节点的屏幕截图。

  14. 保存 customizations.xml 文件。

  15. 将修改后的 customizations.xml 文件添加回解决方案 .zip 文件。

  16. 导入解决方案文件。

  17. 选择 “发布所有自定义项”。

命令位于应用程序功能区 (适用于“所有实体”)

如果命令不是特定于实体的,而是适用于应用程序功能区中声明的“所有实体”,则步骤将略有不同,如下所示:

  1. 打开“高级设置”。
  2. 导航到 “设置>解决方案”。
  3. 选择“ 新建 ”创建新解决方案,将 “发布服务器 ”设置为命令检查器的解决方案层列表中针对命令和“活动”解决方案层显示的值。
  4. 选择“ 客户端扩展>”“添加现有>应用程序功能区”。
  5. 选择“保存”。
  6. 选择“ 导出解决方案 ”并导出非托管解决方案。
  7. 提取 .zip 文件。
  8. 打开 customizations.xml 文件。
  9. 找到根 <RibbonDiffXml> 节点。
  10. 找到节点 <CommandDefinition>
  11. <RibbonDiffXml>编辑节点并删除<CommandDefinition>具有要删除的命令 ID 的节点。 请确保不会无意中删除可能存在的其他 <CommandDefinitions> 节点。
  12. 保存 customizations.xml 文件。
  13. 将修改 后的customizations.xml 文件添加回压缩解决方案 .zip 文件。
  14. 导入解决方案文件。
  15. 选择 “发布所有自定义项”。
命令来自我的公司创作的自定义托管解决方案

若要删除由创建的自定义托管解决方案安装的命令,请执行以下步骤:

  1. 在具有自定义解决方案的非托管源版本的单独开发组织中,完成上面为 “命令位于非托管活动解决方案 ”选项中列出的步骤。
  2. 递增自定义解决方案的版本。
  3. 将解决方案导出为托管解决方案。
  4. 在单独的受影响的组织中,导入此新版本的自定义托管解决方案。
该命令来自我的公司未从第三方/ISV) 创作 (的自定义托管解决方案

若要删除由第三方/ISV 创建的自定义托管解决方案安装的命令,需要联系解决方案的作者并请求已删除特定命令定义的新版本解决方案,然后将此新解决方案安装到受影响的组织中。