Dynamics 365中的导出至Excel,批量编辑,导入权限及限制导出至Excel
我是微软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 进行搜索用户的导出记录。