zoukankan      html  css  js  c++  java
  • 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,然后在 https://protection.office.com/unifiedauditlog 进行搜索用户的导出记录。

  • 相关阅读:
    现在有很多第三方的SDK来做直播,那么我们改选择哪一种?
    移动直播app怎么做
    服务器上如何再另外添加一个E盘
    服务器上如何将D盘修改为E盘
    修改数据库中的内容报错:PropertyAccessException:Null value was assinged to a property of primitive type setter of
    怎样才能做好SNS社区网站
    Linux服务器上如何设置MySQL的max_allowed_packe
    [AST Eslint] No console with schema options && isPrimitive
    [Javascript] Deep partial equal Object LooksLike
    [AST Eslint] No Console allowed
  • 原文地址:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Export_To_Excel_Bulk_Edit_Data_Import.html
Copyright © 2011-2022 走看看