场景说明:

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. wamp修改端口localhost

    一.修改Apache端口 1.在界面中选Apache,弹出隐藏菜单选项,打开配置文件httpd.conf: 2.找到 Listen 80: ServerName localhost:80; 3.将 8 ...

  2. [CSS]水平垂直居中方案

    简单总结一下常用的水平垂直居中方案 直接在父级元素设置 text-align 和 line-height ,针对未浮动的行内元素 <div class="box"> & ...

  3. Java中的package和Import关键字的作用

    一.package关键的作用 1.包的概念 package翻译为包,本质上就是一个文件夹,通过包组织项目结构的过程,就是通过包对应的文件夹管理.java和.class文件的过程. 2.包的作用 通过包 ...

  4. Elasticsearch 使用集群

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  5. P1018 锤子剪刀布

    转跳点:

  6. HDU - 6025 Coprime Sequence(前缀gcd+后缀gcd)

    题意:去除数列中的一个数字,使去除后数列中所有数字的gcd尽可能大. 分析:这个题所谓的Coprime Sequence,就是个例子而已嘛,题目中没有任何语句说明给定的数列所有数字gcd一定为1→_→ ...

  7. HDU 5281 BestCoder Round #47 1002:Senior's Gun

    Senior's Gun  Accepts: 235  Submissions: 977  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  8. EUI库 - EXML

        EXML是可以运行时加载解析的   <e:Skin class="skins.ButtonSkin" states="up,down,disabled&qu ...

  9. 国内OLED产业与三星到底是差之千里还是近在咫尺?

    此前,市面上几乎大部分智能手机搭载的刘海屏,都是来自三星的AMOLED屏幕.虽然三星总是被诟病为中国手机厂商提供的是"次品",不过没办法,OLED屏幕的核心技术.产能等都掌握在三星 ...

  10. 进度5_家庭记账本App_数据库的添加和查看

    今天继续在昨天的基础上完成了家庭记账单的在数据库中的添加和查看功能 在之前的基础上舍弃了Fragment,重新在百度上找到了学习资料,并且自我完成了实践 首先在之前的基础上创建CostListAdap ...