我是微軟Dynamics 365 & Power Platform方面的工程師羅勇,也是2015年7月到2018年6月連續三年Dynamics CRM/Business Solutions方面的微軟最有價值專家(Microsoft MVP),歡迎關注我的微信公眾號 MSFTDynamics365erLuoYong ,回復415或者20200609可方便獲取本文,同時可以在第一間得到我發布的最新博文信息,follow me!
前面的博文 探索Dynamics 365 用戶能夠登錄使用的最小權限需求 提到了權限,提到了導出權限,今天我做一些驗證,主要涉及到導出、批量編輯和導入。
首先我給用戶只授予了 min priv apps use 這個角色(這個角色來自Common Data Service minimum privilege security role)的復制角色 mini priv with export ,並將 ThomasLuoDemoApp 這個Model-Driven App授予了 mini priv with export 角色,當然這里面顯示的實體中,至少要授予一個實體的讀取權限給這個用戶,否則該用戶登錄后會報錯。
用戶要能導出數據到Excel,需要他擁有的某個角色具有 【Export to Excel】這個Privacy Related Privilege,該權限在Business Management這個Tab下,如下圖所示。
如果點擊記錄報如下錯誤的話:
"code":"0x80040220","message":"Principal user (Id=63e7ad9d-f397-ea11-a811-000d3a80ccec, type=8, roleCount=1, privilegeCount=84, accessMode=0), is missing prvReadRoutingRule privilege (Id=151d85cf-dc0f-441c-9b81-8e413964138f) on OTC=8181 for entity 'routingrule'. context.Caller=63e7ad9d-f397-ea11-a811-000d3a80ccec"
授予該角色對Routing Rule Set的讀權限。
然后打開任何一個列表就可以看到導出Excel相關的命令如下:
第一個菜單項目 Open in Excel Online只有Online版本的Dynamics 365/Power Apps才有,可以使用類似Excel的進行數據編輯,保存時候會報權限錯誤,這個權限涉及到導入,后面會講。
第二個 Static Workheet,是導出當前視圖的所有記錄,當然最多導出組織參數 maxrecordsforexporttoexcel 指定的記錄數,如果沒有做更改,這個值是10萬條,可以更改。
第三個Static Workheet (Page Only) 是導出當前視圖的當前頁的記錄,當然了,一頁記錄最多250行記錄,這個可以自行設置,沒有設置默認是50行。
第四個Dynamic Workheet,是導出動態Excel數據,也就是可以刷新獲取到Dynamics 365/Power Apps中的最新數據,截圖示例如下:
第五個Dynamic PivotTable,將會生成Pivot Table。
如果用戶要能批量編輯的話,除了對批量編輯的實體有Write權限外,需要授予如下權限(Business Management下面的Bulk Edit權限):
如果需要導入功能呢?從定制該命令按鈕的Enable Rule來看,如果需要顯示【Import from Excel】按鈕,需要對Import實體(顯示名稱為Data Import)具有個人或者更高級別的 Create, Write, Delete, Read 權限,對importmap 實體(顯示名稱為Data Map)的實體具有個人或者更高級別Read,Create 和 AppendTo權限,如下圖所示:
但是實際導入的時候還會報錯,我這里添加了如下權限后就不報錯了,也可以導入成功了。也就是Data Import, Data Map, Import Source File三個實體都給最小級別的各種權限。
但是還有個問題,無法看到導入進度和結果,如果要看的話,需要授予對Custom Entities 下面的 SettingsSiteMap這個實體 (邏輯名稱msdynsm_sesttingssitemap)的讀權就可以了。
這個需要那個權限,具體通過后面的步驟看,有的不需要特別授予權限的,具體情況具體分析。
這個可以通過XrmToolBox中的 SiteMap Editor這個工具來查看到需要什么權限才能看到這個SubArea。
這樣用戶就可以通過Advanced Setting > Settings > Data Management > Imports來查看導入進度和結果了。
如果要能在這個界面導入,還需要授予這些實體的讀權限,如下圖:
常見的一個需求就是限制導出,因為導出權限給了用戶,那么對幾乎所有可見的數據都可以導出,有時候希望限制某些實體不能導出。
如果一個一個去定制實體的命令欄按鈕太慢,可以定制下Application Ribbon,這個相當於定制命令欄模版,可以應用到所有的實體。
新建一個解決方案,將 Application Ribbons 添加進來。
編輯下Home的EXPORT TO EXCEL按鈕,右擊選擇 【Customize Button】,這個步驟要做,否則后面步驟會沒有效果。
然后還是同樣的位置,點擊下【Customize Command】,然后為Id為Mscrm.ExportToExcel 的命令添加一個Enable Rule,這個Enable Rule中添加一個Custom Rule,設置如下:
這個Custom Rule的代碼就自己寫,傳遞的Crm Prameter就是當前實體的邏輯名稱,我這里使用的代碼如下,可以看到我不對系統管理員角色用戶作限制,其余我可以做額外條件,比如某些角色的用戶只能導出部分實體記錄。
"use strict"; var LuoYong = window.LuoYong || {}; LuoYong.Common = LuoYong.Common || {}; (function () { this.Export2ExcelEnableRule = function (SelectedEntityTypeName) { var returnVal = false; var currentRoles = Xrm.Utility.getGlobalContext().userSettings.roles; currentRoles.forEach(function (currentRole) { if ("system administrator" === currentRole.name.toLowerCase()) { returnVal = true; } }); if (SelectedEntityTypeName === "contact") { returnVal = true; } return returnVal; } }).call(LuoYong.Common);
發布后會看到大部分實體的列表界面的【Export to Excel】按鈕消失了,而且實體高級查找結果界面的Export按鈕也禁用了,子網格上的導出按鈕會被隱藏。
你可能還有問題,如果一個實體我要允許導出,部分字段不允許導出呢?這個定制可以參考我的博文:定制Dynamics CRM標准導出功能:不能導出指定列的值 。
還可以啟用Audit 和Activity Logging (請參考 Common Data Service and model-driven apps activity logging ),然后在 https://protection.office.com/unifiedauditlog 進行搜索用戶的導出記錄。