zoukankan      html  css  js  c++  java
  • Dynamics CRM

    场景说明:

          1.在使用 CRM 系统时,经常会有需要在某个 Entity 下对其他 Entity 的 Record 进行更新,或者在 post 中对自身进行更新,这里就需要用到 SDK 上的 update() 方法(或者 updateObject() 方法),但是执行 update 方法时,需要 User 对要进行更新的 Entity 拥有 Assign to 的权限;

          2.由于 CRM 系统可以对 User 进行权限配置,所以 User 可能不具备对应 Entity 的 Assign to 权限,现在要求在不改动 User 的权限配置的基础上,对 Entity 进行更新(执行 update)。

          基于以上两点,我们可以在 Plugin 里用 System Administrator 来执行更新操作,方法有以下两种:

    解决方案一:

          用Linq(或者其他方式)查询拥有管理员角色的用户 ID,并用其执行 update:

    using (OrganizationServiceContext orgService = new OrganizationServiceContext(service))
    {
        var systemUserId = (from userrole in orgService.CreateQuery<Entities.SystemUserRoles>()
                            join role in orgService.CreateQuery<Entities.Role>()
                            on userrole.RoleId equals role.Id
                            where role.Name == "System Administrator"
                            select userrole.SystemUserId).FirstOrDefault();
    
        if (systemUserId != null)
        {
            IOrganizationService SystemService = factory.CreateOrganizationService(systemUserId);
            SystemService.Update(new_entity);
        }//end if systemUserId != null
    }

          这种通过联合系统用户角色查询,来获取管理员角色用户 ID 的方法存在一个很大的缺点:就是如果当前用户没有权限读取对应表的权限时,无法获得管理员角色用户的 ID,会导致代码没有执行到 update 操作。这里这是列出这种方法,并不推荐使用。

    解决方案二:

          不通过查询管理员角色用户 ID 的方法,直接在 CreateOrganizationService() 的时候传一个参数 null,它会直接以管理员等级来创建服务。

    IOrganizationService SystemService = factory.CreateOrganizationService(null);
    SystemService.Update(new_entity);

            推荐使用这种方法来执行 update 操作,就不会因为权限问题导致所需的更新失效。

  • 相关阅读:
    循环
    if条件语句
    中文字符,全角字符的正则表达式
    常用正则表达式大全!(例如:匹配中文、匹配html)
    PHP中$_SERVER的详细参数与说明
    IIS 伪静态配置(安装ISAPI_Rewrite配置)
    iis php 服务器设置问题
    Apache Rewrite 拟静态配置
    DEDE时间
    DEDE 字符串操作常见问题
  • 原文地址:https://www.cnblogs.com/Sunny20181123/p/10939261.html
Copyright © 2011-2022 走看看