Dynamics CRM - 在 C# Plugin 里以 System Administrator 权限来更新 Entity
场景说明:
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的更多相关文章
- 为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权限
CRM 2016 安装 为运行Microsoft Dynamics CRM 应用程序指定账户没有性能计数器权限 为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权 ...
- Dynamics CRM - 使用 C# Plugin 调用 SQL 存储过程
有时候,在 Dynamics CRM Plugin 中通过 linq 查询数据会比较慢,可以通过采用在 C# plugin 中直接调用数据库存储过程的方式来提高效率,具体过程如下: 1.新建一个存储过 ...
- Dynamics CRM - 通过 C# Plugin 来 abandon Business Process Flow
需求说明: 当一个 Entity 存在 Business Process Process 时,有时我们需要改变其状态,在之前写的博客有讲了可以通过 JavaScript 来实现,本篇就来讲一下如何通过 ...
- Dynamics CRM 2016 使用Plug-in Trace Log调试插件
1.写插件 首先,让我们写一个简单的插件来测试新插件跟踪日志功能.请注意,在下面的示例代码中,我们增加ITracingService的一个实例,以及记录有关插件的执行信息记录的一些键值: 2.注册插件 ...
- Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
DynamicEntity postImageEntity = (DynamicEntity)context.PostEntityImages["PostImage"]; if ( ...
- Dynamics CRM 2011 通过工作流发邮件时的权限问题
场景: 在CRM中配置工作流,完成某个步骤后,发送邮件通知其他用户.发件人统一配置为管理员,收件人则根据业务需要设定动态值. 相关权限配置 首先启动流程的用户, 需要允许其他用户代表发送电子邮件 另外 ...
- 一、Microsoft Dynamics CRM 4.0 SDK概述
Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...
- Dynamics CRM - 不同类型字段在 Plugin 里的赋值方式
在编写 Plugin 代码之前,我们可以需要用 SDK bin 目录下的 CrmSvcUtil.exe 来将 CRM Site 上所有的 Entity 转换成类,而 Entity 里的 Field 也 ...
- Dynamics CRM - Plug-in Class 和 Workflow Class 的用法与区别
在 Dynamics CRM 开发中,我们可以使用 JavaScript 在前端对 Entity Form 进行数据操作,与此同时,我们也可以使用 C# 写后台插件,其中就包括了 Plug-in Cl ...
随机推荐
- node - 读取cookie
req.headers.cookie
- MongoDB 副本集搭建
搭建mongodb副本集 [root@ mongodb]# cd /u02 [root@ u02]# mkdir -p mongodb/data_2777 [root@ u02]# mkdir -p ...
- Oracle rownum用法、分页
转载:ORACLE 中ROWNUM用法总结! 第一部分 1.对于 Oracle 的 rownum 问题,很多资料都说不支持 >, >= , =, between...and ,只能用 ...
- 135-PHP final类和方法都是不可被继承或覆盖的
<?php final class final_class{ //定义final修饰的类 } class myclass extends final_class{ //试图继承final修饰的类 ...
- spark任务日志配置
样例代码: public class SparkTest { private static Logger logger = Logger.getLogger(SparkTest.class); pub ...
- idea自定义快捷鍵
一 生成方法注释 1. File -> Settings... 2. Editor -> Live Templates,点击最右边的+ 3. 依自己情况选择,我这里选择的 Live Te ...
- P 1019 数字黑洞
转跳点:
- HDU 5464:Clarke and problem
Clarke and problem Accepts: 130 Submissions: 781 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- 【LeetCode】克隆图
[问题]给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆).图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node]). 解释: 节点 的值是 ,它有两个邻居:节点 和 ...
- 【LeetCode】最长回文子串-中心扩展法
[问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...