场景说明:

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 操作,就不会因为权限问题导致所需的更新失效。

Dynamics CRM - 在 C# Plugin 里以 System Administrator 权限来更新 Entity的更多相关文章

  1. 为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权限

    CRM 2016 安装 为运行Microsoft Dynamics CRM 应用程序指定账户没有性能计数器权限 为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权 ...

  2. Dynamics CRM - 使用 C# Plugin 调用 SQL 存储过程

    有时候,在 Dynamics CRM Plugin 中通过 linq 查询数据会比较慢,可以通过采用在 C# plugin 中直接调用数据库存储过程的方式来提高效率,具体过程如下: 1.新建一个存储过 ...

  3. Dynamics CRM - 通过 C# Plugin 来 abandon Business Process Flow

    需求说明: 当一个 Entity 存在 Business Process Process 时,有时我们需要改变其状态,在之前写的博客有讲了可以通过 JavaScript 来实现,本篇就来讲一下如何通过 ...

  4. Dynamics CRM 2016 使用Plug-in Trace Log调试插件

    1.写插件 首先,让我们写一个简单的插件来测试新插件跟踪日志功能.请注意,在下面的示例代码中,我们增加ITracingService的一个实例,以及记录有关插件的执行信息记录的一些键值: 2.注册插件 ...

  5. Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询

    DynamicEntity postImageEntity = (DynamicEntity)context.PostEntityImages["PostImage"]; if ( ...

  6. Dynamics CRM 2011 通过工作流发邮件时的权限问题

    场景: 在CRM中配置工作流,完成某个步骤后,发送邮件通知其他用户.发件人统一配置为管理员,收件人则根据业务需要设定动态值. 相关权限配置 首先启动流程的用户, 需要允许其他用户代表发送电子邮件 另外 ...

  7. 一、Microsoft Dynamics CRM 4.0 SDK概述

    Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...

  8. Dynamics CRM - 不同类型字段在 Plugin 里的赋值方式

    在编写 Plugin 代码之前,我们可以需要用 SDK bin 目录下的 CrmSvcUtil.exe 来将 CRM Site 上所有的 Entity 转换成类,而 Entity 里的 Field 也 ...

  9. Dynamics CRM - Plug-in Class 和 Workflow Class 的用法与区别

    在 Dynamics CRM 开发中,我们可以使用 JavaScript 在前端对 Entity Form 进行数据操作,与此同时,我们也可以使用 C# 写后台插件,其中就包括了 Plug-in Cl ...

随机推荐

  1. python爬虫笔记01

    1.urllib库中request,parse的学习 1.1 简单的请求页面获取,并下载到本地 request的使用 from urllib import request # 获取此网页的demout ...

  2. dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.63.dylib

    本地环境报错有 3 处,如下: 1. 执行命令,无论执行 php 的什么命令,统一报错 dyld: Library not loaded: /usr/local/opt/icu4c/lib/libic ...

  3. 51nod 1208 && POJ 2482:Stars in Your Window

    1208 Stars in Your Window 题目来源: Poj 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  取消关注 整点上有N颗星星,每颗 ...

  4. Nachos-Lab2-线程调度模块实现

    源码获取 https://github.com/icoty/nachos-3.4-Lab 内容一:总体概述 本实习希望通过修改Nachos系统平台的底层源代码,达到"扩展调度算法" ...

  5. Spring Boot2(004):关于 Build Systems (构建系统)

    Spring Boot Ref 建议使用 maven 或者 gradle 来进行依赖管理和应用构建. 一.Dependency Management(依赖管理) Spring Boot 的每个版本都会 ...

  6. python基础(变量,字符串,列表,元组)

    #列表的操作list1 = ['wuqiang','lichang','changhao'] #列表的定义print(list1) #操作列表print(list1[-1]) #操作列表的最后一位li ...

  7. Linux基础命令-02

    Linux基础命令-02:

  8. 【剑指Offer】面试题06.从尾到头打印链表

    题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 1000 ...

  9. 将已有微信小程序转换为多端应用

    文档地址 https://nervjs.github.io/taro/

  10. 【Vue中的坑】Vue中的修改变量没有效果?

    使用箭头函数 this.$forceUpdate();