Dynamics 365执行Remove Active Customizations的多种方法

我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注个人微信公众号 MSFTDynamics365erLuoYong ,回复423或者20201009可方便获取本文,同时能够在第一间获得我发布的最新博文信息,follow me!web

非托管层(Unmanaged Layer) 在你使用托管解决方案(Managed Solution)的时候挺烦的,通常是在目标环境手动修改某些组件而产生,产生后它一直会居于Solution Layer的最上层,会遮住Managed Solution导入而产生的Solution Layer,这样看起来就是Managed Solution导入后没有效果。通常咱们是须要删除掉非托管层(Unmanaged Layer) 的,有多种方法,请听我说道来。api

最多见的是在界面上操做的方法。查看组件的Solution Layers方法以下,打开某个Solution,选择某个组件,而后点击【Solution Layers】按钮。浏览器

 

 若是出来的界面显示有一个Solution名称为Active的Solution Layer,这个Solution Layer就是Unmanaged Layer。由于它的Order老是最大的,会覆盖下面的Solution Layer,会致使导入的Managed Solution没有效果。安全

 

 删除它也很简单,点击【Active】旁边的 【...】符号,点击出来【Remove Active Customizations】进行删除便可。微信

  

你应该会想,一个个看,删除太慢太麻烦了,有批量处理工具吗?有的,XrmToolBox中有个工具叫作 Solution Layer Removal 能够批量查看和移除。app

  

操做也比较简单,点击【Load Solutions】按钮,而后选择某个Solution,再点击【Load Unmanaged Components】就会列出该Solution中全部含有Unmanaged Layers的组件。ide

选中要移除Unmanaged Layer的组件,点击【Remove Active Customizations】按钮进行移除便可。函数

 

 有时候还会用到特殊的方法来Remove Active Customizations,这就是 RemoveActiveCustomizations Function,这个函数包括两个输入参数,第一个输入参数SolutionComponentName,官方文档有说明它是string类型,并无讲有哪些值,我这里列表以下,第二个参数ComponentId这个容易猜出来,就是要移除的组件的id,通常在解决方案中双击某个组件而弹出的窗口中就会有这个id的值。工具

SolutionComponentName 说明
AppModule
AttributePicklistValue
LocalizedLabel
OptionSet
PluginAssembly
PluginType
SdkMessageProcessingStep
SiteMap
SystemForm
WebResource
Workflow
SavedQuery
Custom Connectors
FieldSecurityProfile
FieldPermission
Field (attribute)

除了这些类型都支持: image, file, customer, owner, virtual, partylist, calendarrules, rollup / calculatedurl

Role
RolePrivileges
Relationships
Entity 暂不支持,实际上Entity上的非托管层没有关系
AIModel 开发中
AIConfiguration 开发中
Custom Components

 

值得说明的是,若是你要处理的对象是仪表盘(Dashboard),则使用SystemForm做为SolutionComponentName参数的值。

那怎么使用呢?很简单。我在解决方案中双击某个Role,打开的窗口的URL相似 https://luoyongdemo.crm.dynamics.com/biz/roles/edit.aspx?appSolutionId=%7b02A296F0-BB49-4A19-9D1B-A0746319B0DB%7d&id=%7b758F55FB-9D8E-EA11-A811-000D3A33BE69%7d&_CreateFromType=7100&_CreateFromId=%7b02A296F0-BB49-4A19-9D1B-A0746319B0DB%7d 

从这个url中能够知道这个Role的id是758F55FB-9D8E-EA11-A811-000D3A33BE69,要删除安全角色的Active Customizations,第一个参数SolutionComponentName须要传递Role,而后直接用浏览器发起以下请求:

https://luoyongdemo.crm.dynamics.com/api/data/v9.1/RemoveActiveCustomizations(SolutionComponentName='Role',ComponentId=758F55FB-9D8E-EA11-A811-000D3A33BE69)

若是成功则结果相似以下:


还有可能会碰到命令栏上的按钮部署后没有效果,在url的最后加上 &ribbondebug=true ,而后点击命令栏由于url增长这部分而出现的 Command Checker 按钮的下面部分看下layer的状况:

image.png


有时候可能会看到Enable Rule或者Display Rule上有非托管层,这个非托管层也会优先起做用,覆盖托管层,从而致使托管层没有生效。能够选择两个层进行比较,看有什么变化,好比这里就是Active 层(也就是非托管层)和某个托管层比较的样子。

image.png


那这种非托管层如何去掉呢?我从Microsoft CSS处获得了一种方法。就是将这个实体的元数据用非托管解决方案导出,解压开,编辑解压后的 customizations.xml 文件,将其中的 RibbonDiffXml 元素的值替换成以下值,而后将文件打包成Zip文件,导入到Dynamics 365中发布就能够会删除这种Enable Rule或者Dispaly Rule的非托管层。

<RibbonDiffXml>
<CustomActions />
<Templates>
<RibbonTemplates Id="Mscrm.Templates"/>
</Templates>
<CommandDefinitions />
<RuleDefinitions>
<TabDisplayRules />
<DisplayRules />
<EnableRules />
</RuleDefinitions>
<LocLabels />
</RibbonDiffXml>
相关文章
相关标签/搜索