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

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

确定按钮可见的原因

如果与按钮关联的命令上的所有启用规则显示规则的计算结果为 true,则会显示按钮。 如果这是意外的,则可能是命令定义已被重写,缺少启用规则或显示规则,或者规则定义本身被重写,导致按钮在预期隐藏时可见。

注意

某些按钮不可自定义。 有关详细信息,请参阅 功能区中的不可自定义按钮

警告

不要从命令中删除 Mscrm.HideOnModern 显示规则,以强制按钮显示在统一接口中。 具有显示规则的 Mscrm.HideOnModern 命令适用于旧版 Web 客户端接口,在统一接口中不受支持,并且可能无法正常工作。

  1. 启用命令检查器,然后选择要检查的命令按钮

  2. 以下示例显示了活动网格页上的两个 “约会” 按钮,其中一个应隐藏。

    屏幕截图显示活动网格页上有两个“约会”按钮。

  3. 选择“ 命令属性 ”选项卡以显示此按钮的命令的详细信息。 这将显示操作、启用规则和显示规则,以及每个规则评估的结果 (TrueFalse跳过) 。 查看启用规则和显示规则,如果预期特定规则的评估结果应为 false,则可能是错误地自定义了该规则,或者不满足返回错误结果的必要情况。 如果是这样,请跳到步骤 9,否则命令可能缺少一个或多个规则,我们将查看命令解决方案层以供进一步分析。

    选择“命令属性”选项卡以显示此按钮的命令详细信息的屏幕截图。

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

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

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

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

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

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

    如果只有一个解决方案层,请跳到步骤 9,否则,选择前两个解决方案层 (如果活动解决方案中有一个层,但它未在顶部列出,请选择“活动解决方案层”,然后选择顶部行) 并选择“ 比较”。

    选择前两个解决方案层并选择“比较”选项的屏幕截图。

  6. 将显示当前活动定义与上一个非活动定义的比较,其中显示了差异(如果有)。 以下示例显示已自定义的非托管 Active 定义,删除了非活动 msdynce_ActivitiesPatch Microsoft 发布的解决方案层中包含的显示规则Mscrm.HideOnModern

    屏幕截图显示了当前活动定义与上一个非活动定义的比较。

  7. 修复按钮可见性所需的方法将取决于特定方案中的各种自定义项。 如果确定规则的计算错误为 false,并且规则定义定义不正确,则应修改规则定义,并进行更改,使规则在适当情况下的计算结果为 false。 如果规则定义正确,则可能不符合使规则返回 false 的要求,例如未正确分配字段值或安全特权。 根据规则定义,要求可能会有很大差异,请参阅 定义功能区启用规则定义功能区显示规则。 考虑到我们的示例,命令是使用删除显示规则自定义的 Mscrm.HideOnModern 。 此显示规则旨在隐藏此特定按钮,使其不显示在统一接口应用程序中,并且仅在旧版 Web 客户端界面中可见。 我们可以修改命令的自定义版本,并将缺少的 Mscrm.HideOnModern 显示规则添加到命令定义。 由于这是 Microsoft 已发布定义的自定义重写,并且没有其他有意的修改,因此建议删除命令的此自定义版本以还原默认功能。

修复选项

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

如何删除命令

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

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

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

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

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

命令特定于实体

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

  1. 打开“高级设置”。

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

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

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

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

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

  7. 选择“保存”。

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

  9. 提取 .zip 文件。

  10. 打开 customizations.xml 文件。

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

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

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

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

    屏幕截图显示了删除 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 的节点。 请确保不会无意中删除可能存在的其他 <CommandDefinition> 节点。
  12. 保存 customizations.xml 文件。
  13. 将修改 后的customizations.xml 文件添加回压缩解决方案 .zip 文件。
  14. 导入解决方案文件。
  15. 选择 “发布所有自定义项”。
命令来自我的公司创作的自定义托管解决方案

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

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

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