历览千载书,时时见遗烈。这篇文章主要讲述介绍Command Checker及重新生成Ribbon元数据的方法相关的知识,希望能为你提供帮助。
我是微软Dynamics 365 &
Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复445或者20210610可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
Command Checker是排查按钮为什么没有按照期望的隐藏/显示,按钮的定义(如定义的Enable Rule, Display Rule, 执行的Action)等的利器,介绍它的官方博文请参考 Introducing Command Checker for model-app ribbons ,我就不一一翻译了,捡重点简要说说。
假设我打开的页面是 https://luoyongdemo.crm5.dynamics.com/main.aspx?appid=485f3e02-f496-eb11-b1ac-0022485699e8&
pagetype=entityrecord&
etn=appointment&
id=4c008680-32c4-eb11-8235-000d3ac81031 ,那么我要显示出Command Checker很简单,在打开的Url最后加上 ribbondebug=true 即可,比如我这里就用 https://luoyongdemo.crm5.dynamics.com/main.aspx?appid=485f3e02-f496-eb11-b1ac-0022485699e8&
pagetype=entityrecord&
etn=appointment&
id=4c008680-32c4-eb11-8235-000d3ac81031&
ribbondebug=true 。
然后我们就会发现两个变化如下图,一个是最右上角的设置图标旁边多出了一个图标,这个图标我姑且称之为全局的Command Checker图标,另外就是命令栏的最后会多出一个Command Checker按钮。
文章图片
点击全局的Command Checker图标出来的窗口截图如下。
文章图片
可以看到有个 【Regenerate ribbon metadata】,这个有时候会有用处,比如按钮的定义等都没有问题,就是看不到,那有可能是ribbon metadata生成有问题,这个时候可以试试点击这个按钮,我们点击看下,有提示如下:
Do you want to regenerate all ribbon client metadata for this environment? This background operation may take 15 minutes or longer and may delay other background operations while in-progress. The status can be viewed within Solution history. Once completed clear your browser cache and reopen the application.
文章图片
然后我们转到 Advanced Settings > Customization > Solution History 去看,注意切换到 Ribbon Metadata Generation Operations 或者 All Operations视图 ,我这里截图如下:
文章图片
然后重点介绍下命令栏中的Command Checker按钮,左边栏中按钮文字旁边如果有 (hidden) 字样代表该按钮是隐藏的,右边显示了按钮的很多属性,比如Id,LabelText等,可以看到有个链接,链接文本是 View button solution layers 。
文章图片
点击 View button solution layers 链接会打开类似下面的窗口。如果Solution layer有多个的话,可以选中两个点击下面的【Compare】按钮就会出来比较。
文章图片
对于使用托管解决方案部署的话,很容易存在多个solution layer,我这里提供一个Compare的结果截图如下,可以看到右边的Solution产生的solution layer 增加了一个Display Rule,这样比较起来还是很容易的。
文章图片
这里提一个小技巧,如果是Entity Ribbon有unmanaged layer的话,如何去掉呢?目前我知道的有效方法是,将实体的元数据通过一个非托管解决方案导出,然后修改解决方案中的 customizations.xml 文件,将 RibbonDiffXml 元素的值修改为如下值,也就是设置为没有定制该实体Ribbon的样子,导入到目标环境就会去掉unmanager layer. 当然还是要告诫各位如果使用托管解决方案来做部署的话,不要手工在目标环境修改元数据。
<
RibbonDiffXml>
<
CustomActions />
<
Templates>
<
RibbonTemplates Id="Mscrm.Templates"/>
<
/Templates>
<
CommandDefinitions />
<
RuleDefinitions>
<
TabDisplayRules />
<
DisplayRules />
<
EnableRules />
<
/RuleDefinitions>
<
LocLabels />
<
/RibbonDiffXml>
然后我们来看看Command properties,这个Mark Complete按钮为啥没有显示,可以看到是因为一个名称为 Mscrm.CanSavePrimary 的Enable Rule返回了false。
文章图片
那我们展开去看看到底是什么规则返回false,展开如下。可知是一个OrBlockRule下面的两个Rule都返回了False,都是FormStateState,这样就知道为啥没有显示了。
文章图片
如果要看点击后执行的是什么,可以看下这个按钮的Actions,我这里截图如下。
【介绍Command Checker及重新生成Ribbon元数据的方法】
文章图片
推荐阅读
- 基本命令学习 -查看文件内容的六种方法
- Linux内核浅入浅出
- windows server 2012R2安装RD服务并发布remoteapp应用
- 审计 Linux 系统的操作行为的 5 种方案对比
- 基于 Ubuntu 21.04BPF 开发环境全攻略
- 我正在使用wordpress模板,并且可以添加属性。但是有些字段我不需要
- 在WordPress中导入CSS文件
- 导入Avada Demos错误-无法访问demo服务器。请在”系统状态”页面上检查wp_remote_get
- WordPress页面模板中的图像