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 进行搜索用户的导出记录。

posted @ 2020-06-09 22:51  微软MVP(15-18)罗勇  阅读(1663)  评论(0编辑  收藏  举报