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

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

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

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

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

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

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

 

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

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

而是用下面的方式了:

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

 

 

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

 

Dynamic CRM 2013学习笔记 系列汇总

Dynamic CRM 2013学习笔记(一)插件输入实体参数解析的更多相关文章

  1. Dynamic CRM 2013学习笔记(二)插件基本用法及调试

      插件是可与 Microsoft Dynamics CRM 2013 和 Microsoft Dynamics CRM Online 集成的自定义业务逻辑(代码),用于修改或增加平台的标准行为.也可 ...

  2. Dynamic CRM 2013学习笔记(四)单据编号及插件批量注册工具

    基本上每个实体form上都会有单据编号,而且不同的实体编号要求还不太一样,这时就需要一个通用的单据编号插件,可配置以应对不同的需求. 下面简单介绍下实现步骤: 1. 创建二个实体,以保存各实体所要求的 ...

  3. Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件

    上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...

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

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

  5. Dynamic CRM 2013学习笔记 系列汇总

    这里列出所有 Dynamic CRM 2013学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址: Dynamic CRM 2013学习笔记 系列汇总 ...

  6. Dynamic CRM 2013学习笔记(五)禁止修改、删除审批通过后的单据

    审批通过后的单据,一般要对其进行控制,不能修改,不能添加,删除等,下面分别介绍下如何实现: 一. 禁止修改: 1. 主表控制,如果页面上审批状态为审批中或审批通过,就把整个页面都disable掉 1: ...

  7. Dynamic CRM 2013学习笔记(三十八)流程1 - 操作(action)开发与配置详解

    CRM 2013 里流程有4个类别:操作(action).业务流程(business process flow).对话(dialog)和工作流(workflow).它们都是从 setting –> ...

  8. Dynamic CRM 2013学习笔记(十四)复制/克隆记录

    经常有这样的需求,一个单据上有太多要填写的内容,有时还关联多个子单据,客户不想一个一个地填写,他们想从已有的单据上复制数据,克隆成一条新的记录.本文将介绍如何克隆一条记录,包括它的子单据以生成一条新的 ...

  9. Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新

    CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...

随机推荐

  1. CSS3常用选择器(一)

    在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素.比如最常用到的#id,.class,标签选择器. 随着CSS3到来,增加了很多新型选择器,这里就常用的做一个总结. 1.属性选择器. 在c ...

  2. 7.29 H5学习笔记

    常用实体字符小于号  < 大于号  > 和号  & 引号  " 撇号  &apos; 分  ¢ 镑  £ 日元  ¥ 欧元  € 小节  § 版权  © 注册  ...

  3. args

    java 中args一般存在main主类方法内,String args[ ]或者String[ ] args表示给主方法传一个字符串数组. 而args是一个字符串数组的变量名,不是关键字,是argum ...

  4. NLPP-00-Preparation

    NLPP is short for Natural Language Processing with Python <Python 自然语言处理(Natural Language Process ...

  5. Java制作证书的工具keytool用法总结

    一.keytool的概念 keytool 是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.在 ...

  6. (转载)selenium-webdriver(python)

    转载地址: http://www.cnblogs.com/fnng/p/3183777.html 本节重点: 简单对象的定位 -----自动化测试的核心 对象的定位应该是自动化测试的核心,要想操作一个 ...

  7. PHP安装rrdtool扩展

    首先,我的环境是Centos 6.5 PHP版本是5.51.首先安装rrdtool需要的依赖库文件   yum -y install pango* 2.先服务器安装rrdtool  wget http ...

  8. Scrum会议10.19

    Scrum会议 组名称:好好学习 项目名称:记账本 参会成员:林莉(Master)胡丽娜 宫丽君 汪东涵 时间:2016.10.19 已完成内容: 1.完成新项目的查找,查找学姐的代码和项目. 2.理 ...

  9. 問題排查:在 ServiceModel 客戶端配置部份中,找不到名稱 和協定 的終結點元素。

    同樣都是刪掉服務參考再重建重編譯重發行,為什麼之前幾次都沒事? 這次只不過是刪掉服務參考,然後換了個名稱重建而已,做完就變這樣? 後來發現問題出在 app.config,因為之前 app.config ...

  10. db2 怎么计算两个时间相差多少个月。如2015-10-10 和2014-1-12

    SELECT timestampdiff (256, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23')) ...