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>
相關文章
相關標籤/搜索