ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

介绍Command Checker及重新生成Ribbon元数据的方法

2021-06-10 11:03:31  阅读:245  来源: 互联网

标签:layer Rule Checker Command 按钮 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按钮。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

点击全局的Command Checker图标出来的窗口截图如下。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

可以看到有个 【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.

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

然后我们转到 Advanced Settings > Customization > Solution History 去看,注意切换到 Ribbon Metadata Generation Operations 或者 All Operations视图 ,我这里截图如下:

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

然后重点介绍下命令栏中的Command Checker按钮,左边栏中按钮文字旁边如果有 (hidden) 字样代表该按钮是隐藏的,右边显示了按钮的很多属性,比如Id,LabelText等,可以看到有个链接,链接文本是 View button solution layers 。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

点击 View button solution layers 链接会打开类似下面的窗口。如果Solution layer有多个的话,可以选中两个点击下面的【Compare】按钮就会出来比较。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

对于使用托管解决方案部署的话,很容易存在多个solution layer,我这里提供一个Compare的结果截图如下,可以看到右边的Solution产生的solution layer 增加了一个Display Rule,这样比较起来还是很容易的。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

这里提一个小技巧,如果是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。

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

那我们展开去看看到底是什么规则返回false,展开如下。可知是一个OrBlockRule下面的两个Rule都返回了False,都是FormStateState,这样就知道为啥没有显示了。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

如果要看点击后执行的是什么,可以看下这个按钮的Actions,我这里截图如下。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

标签:layer,Rule,Checker,Command,按钮,Ribbon,图标
来源: https://blog.51cto.com/luoyong/2888242

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有