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

适用于: Power Apps
原始 KB 数: 4552163

确定按钮隐藏的原因

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

警告

  • 如果实体启用了“移动”选项,则 EntityPrivilegeRule 类型的任何显示规则(创建、写入、删除、分配、共享)的 PrivilegeType 值之一(创建写入删除分配、共享)的计算结果为 false,这将强制实体仅允许读取权限。 在实体上启用只读移动标志时 可以编辑实体并取消选中 “移动 中的只读”选项,以允许这些规则评估为 true,前提是规则所测试的权限也授予用户。
  • 不要从命令中删除 Mscrm.HideOnModern 显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern 命令适用于旧版 Web 客户端接口,在统一接口中不受支持,可能无法正常工作。
  1. 启用命令检查器,然后选择要检查的命令按钮。

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

    注意

    如果按钮未显示在列表中,则可能出于以下原因之一将其隐藏:

    1. HideCustomAction 自定义:

      • 在左侧导航面板中,查找位于顶部的 HideCustomAction 部分。
      • 展开列表并查看每个项。 检查与按钮名称匹配的位置属性。
      • 如果找到了匹配项,这可能就是按钮被隐藏的原因。 若要解决此问题,请按照 修复选项 说明进行操作,但应用于 HideCustomAction 而不是命令。
    2. Mscrm.HideOnModern 显示规则:

      • 关联的命令可能有一个 Mscrm.HideOnModern 显示规则,该规则隐藏统一接口应用程序中的按钮。
      • 目前,命令检查器工具不会列出此规则隐藏的按钮。 将来的更新中正在解决此限制。
    3. 手动隐藏在命令栏设计器中:

      • 打开应用的 命令栏设计器
      • 找到按钮并检查属性窗格。
      • 在底部,验证“ 隐藏 ”字段是否未选中。

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

    注意

    如果按钮保持隐藏状态,即使所有规则的计算结果为 True,请检查导航面板中的隐藏原因:

    • 按选择隐藏:

      • 这意味着该按钮由于 网格中的上下文敏感命令而隐藏。
      • 在网格中选择记录时,任何不带 SelectionCountRule 元素的按钮都被视为与所选记录无关,并且将隐藏,即使其规则评估为 True 也是如此。
      • 请注意,弹出控件不会受到影响,因为弹出控件的子元素可能仍具有基于记录的命令。
    • 隐藏离线状态:

      • 由于你处于脱机状态,或者应用默认设置为脱机,因此该命令处于隐藏状态。
      • 脱机模式下不支持此命令。 可以调整应用的 脱机设置 ,并根据需要禁用首选脱机。
  3. 选择 “命令属性 ”选项卡可显示此按钮的命令的详细信息。 这将显示启用规则和显示规则,以及每个规则评估的结果(TrueFalse跳过)。 以下示例显示了要包含的“新建”(隐藏)按钮的命令Mscrm.NewRecordFromGrid,并且有一个名为new.contact.EnableRule.EntityRule“False”的启用规则,因此该按钮将被隐藏。

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

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

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

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

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

修复选项

从下面的选项卡之一中选择修复选项。 默认选择第一个选项卡。

如何删除命令

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

命令特定于实体

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

  1. 打开 高级设置

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

  3. 选择“新建以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。 (在我们的示例中,这是 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. 选择“新建以创建新解决方案,将 Publisher 设置为命令和活动解决方案层的命令检查器解决方案层列表中显示的值。
  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 创建的自定义托管解决方案安装的命令,需要联系解决方案的作者并请求删除特定命令定义的新版本解决方案,然后将此新解决方案安装到受影响的组织中。