1. 问题描述

最近新建了一个post事件的插件,传入的参数处理如下:

  1:             if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
  2:             {
  3:                 Entity entity = (Entity)context.InputParameters["Target"];
  4:                 …
  5: 
  6:             }
  7: 
Unit test 也正常pass:
 

但当我发布插件时,发现报错了,有属性没值,奇怪了,明明unit test通过了啊!

2. 解决方法1

后来在调用这个传进来的实体参数前,重新取一次,一切正常:

  1: Entity entity = service.Retrieve(current.LogicalName, current.Id, new ColumnSet(new string[] { all }));
  2: 

后来才发现这个传进来的实体参数只有一些改变了的属性才会有值,而没有改变的属性则没有带进来。

3. 解决方法2

那么能不能把想要的属性带进来呢,是可以的,也就是说不用在插件里再取一次这个实体.

方法就是使用 “前期事件和后期实体映像”

PreEntityImages 和 PostEntityImages 包含核心平台操作之前 (pre) 和之后 (post) 的主要实体属性的快照。Microsoft Dynamics CRM 会基于模拟的系统用户的安全权限填充前期实体和后期实体映像。只有设置为某个值或 null 的实体属性才在前期或后期实体映像中可用。当您注册您的插件时,可以指定让平台填充这些 PreEntityImagesPostEntityImages 属性。插件代码会将您在插件注册期间指定的实体别名值用作插件代码中图像集合的键值。

某些事件没有可用的映像。例如,只有同步的后期事件和异步的注册插件填充了 PostEntityImages。创建操作不支持前期映像,删除操作不支持后期映像。

具体做法是,在注册插件及添加step后,右健step,选择注册新的映像

然后可以指定名称及哪些属性要传入插件:

这里指明后,在插件开始的地方就不用,

Entity entity = (Entity)context.InputParameters["Target"];

而是用下面的方式了:

(Entity)context.PreEntityImages["image"];

这样就不用在插件里面,再取一次实体的其它属性了。

Dynamic CRM 2013学习笔记 系列汇总

转载于:https://www.cnblogs.com/fengwenit/p/3971782.html

Dynamic CRM 2013学习笔记(一)插件输入实体参数解析相关推荐

  1. Dynamic CRM 2013学习笔记(二十二)插件里调用WCF服务

    1. 添加service: 2.调用WCF BasicHttpBinding myBinding = new BasicHttpBinding(); myBinding.Name = "Ba ...

  2. Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动

    当我们在流程里添加步骤时,有一些默认的步骤,像创建.更新.发邮件等,但如果你想加一个里面没有的步骤,比如发SMS消息,或者调用一个外部的web service,怎么办?这时就只能自定义一个流程活动了. ...

  3. Dynamic CRM 2013学习笔记(四十二)流程5 - 实时/同步工作流(Workflow)用法图解...

    实时工作流跟插件一样,也是用事件执行管道来执行,能在pre,post或核心操作中执行.跟插件一样,不能在创建之前和删除之后执行.如果执行过程中有异常发生,会取消并回滚整个操作.实时工作流里所有的活动和 ...

  4. Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮

    有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...

  5. Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理...

    上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...

  6. fetchxml 汇总_Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧

    我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...

  7. Microsoft Dynamic CRM 2013安装

    Microsoft Dynamic CRM 2013安装 Dynamic CRM可以和Exchange整合,通过CRM主页给用户收发邮件,和Lync整合做呼叫中心,通过CRM主页给客户打电话和视频会议 ...

  8. Polyworks脚本开发学习笔记(十一)-玩转获取参数(GET)与设置参数

    Polyworks脚本开发学习笔记(十一)-玩转获取参数(GET)与设置参数 Polyworks采用了脚本语言作为二次开发的工具,因此语言格式上非常规范和统一.其中一个重要的特点就是,几乎所有的对象都 ...

  9. 深度学习笔记(11) 超参数调试

    深度学习笔记(11) 超参数调试 1. 选择合适的范围 2. 超参数调试实践 1. 选择合适的范围 关于训练深度最难的事情之一是要处理的参数的数量 学习速率 a 到 Momentum(动量梯度下降法) ...

最新文章

  1. 优酷土豆:财报不是问题!
  2. [转]新版.Net开发必备十大工具
  3. 记个maven无法识别JAVA_HOME的问题 Error: JAVA_HOME is not defined correctly.
  4. First Scrum 冲刺
  5. Shell中的case语句
  6. 英语影视台词---六、Saving Private Ryan Quotes
  7. Android studio 使用SVN需要忽略的文件
  8. dubbo源码解析(一)
  9. java ftp 损坏_java ftp上传时断网,文件损坏
  10. 请问:如何在C#简单分布式程序的数据层中为其它层留出很好的接口?????...
  11. 【图像融合】主成分分析PCA
  12. python标准库之collections
  13. echarts3 地图文字位置设置
  14. Cadence中的homogeneous与hetergeneous的区别及注意事项
  15. cherry键盘使用备忘
  16. 【Unity】Google内购
  17. 不安装Office操作Excel文件(.xlsx)
  18. Law of continuity
  19. mysql变量环境配置文件_Day44 Mysql环境变量、配置文件(2)
  20. 普通用户不能登录linux图形界面,只有root用户可以登录到图形界面

热门文章

  1. python解释器的安装步骤-Python本地及虚拟解释器配置过程解析
  2. python基础实例-Python入门基础知识实例,
  3. python json.loads()中文问题-python中文编码json中文输出问题
  4. 学python要多少钱-参加python培训要多少钱?
  5. python爬虫正则表达式实例-Python爬虫(十一)_案例:使用正则表达式的爬虫
  6. python代码案例详解-Python实现电视里的5毛特效实例代码详解
  7. python花钱培训值吗-python培训需要花多少钱?
  8. python打开是什么样的-Python程序的执行过程是什么样的?
  9. python画折线图详解-python绘制简单折线图代码示例
  10. 爬虫python下载-python 下载 爬虫