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

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学习笔记 系列汇总

时间: 2024-11-11 23:25:46

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

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

Dynamic CRM 2013学习笔记(一)插件输入实体参数解析 Dynamic CRM 2013学习笔记(二)插件基本用法及调试 Dynamic CRM 2013学习笔记(三)快速创建实体 EntityCreater 基本上每个实体form上都会有单据编号,而且不同的实体编号要求还不太一样,这时就需要一个通用的单据编号插件,可配置以应对不同的需求. 下面简单介绍下实现步骤: 1. 创建二个实体,以保存各实体所要求的不同单据规则及当前流水号 2. 为不同的实体配置各自的单据规则 3. 编写及注

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

插件是可与 Microsoft Dynamics CRM 2013 和 Microsoft Dynamics CRM Online 集成的自定义业务逻辑(代码),用于修改或增加平台的标准行为.也可以将插件认为是针对 Microsoft Dynamics CRM 触发的事件的处理程序.您可以让插件订阅或注册已知事件集,以便在事件发生时运行您的代码.   一.基本用法 1. 要继承IPlugin,并实现Excute方法 ( 1- 3 行) 2. 从service provide 里获取执行上下文 (

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

上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多实体要实现这个功能,有人觉得有点麻烦了,就不太喜欢这种方式,于是我写了一个通用的子表合计功能的通用插件,只用在注册插件时,填写不同的参数就可以实现这个功能了. 1. 首先看下效果: 2. 注册方法: 我们需要在子表上对create和update方法进行注册: 注册时要填写4个参数: 第一个参数是要被

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

  1. 添加service:     2.调用WCF BasicHttpBinding myBinding = new BasicHttpBinding(); myBinding.Name = "BasicHttpBinding_IAuthService"; myBinding.Security.Mode = BasicHttpSecurityMode.None; myBinding.Security.Transport.ClientCredentialType = HttpClie

Dynamic CRM 2013学习笔记(七)追踪、监控及性能优化

本文将介绍CRM的三个内容追踪.监控及性能优化.追踪是CRM里一个很有用的功能,它能为我们的CRM调试或解决错误.警告提供有价值的信息:我们可以用window的性能监控工具来了解CRM的性能状况:最后就是对CRM及其DB进行性能调整以让CRM达到最佳状态.   一.追踪 有二种追踪方式,一种是部署级,这种方式追踪所有的CRM 服务器上的角色.服务,默认情况,log文件在C:\crmdrop\logs:另一种是服务器级追踪,这种方式只追踪当前机器上运行的服务器角色.服务.默认情况,log文件在C:

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

CRM 2013 里流程有4个类别:操作(action).业务流程(business process flow).对话(dialog)和工作流(workflow).它们都是从 setting –> Process 进入,然后点击New按钮来创建: 这篇主要介绍操作:什么是操作.什么时候使用操作.如何创建以及如何调用 一.什么是操作 操作是CRM 2013 新增加的一个功能,用来扩展系统的标准功能.业务人员可以用它来实现业务逻辑,然后开发人员可以在系统事件里(比如update,create)来使用

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

审批通过后的单据,一般要对其进行控制,不能修改,不能添加,删除等,下面分别介绍下如何实现: 一. 禁止修改: 1. 主表控制,如果页面上审批状态为审批中或审批通过,就把整个页面都disable掉 1: function controlReadonly() { 2: var status = Xrm.Page.data.entity.attributes.get("new_approval_status").getValue(); 3: if (status == 2 || status

Dynamic CRM 2013学习笔记 系列汇总

这里列出所有 Dynamic CRM 2013学习笔记 系列文章 Dynamic CRM 2013学习笔记(一)插件输入实体参数解析 Dynamic CRM 2013学习笔记(二)插件基本用法及调试 Dynamic CRM 2013学习笔记(三)快速创建实体 EntityCreater Dynamic CRM 2013学习笔记(四)单据编号及插件批量注册工具 Dynamic CRM 2013学习笔记(五)禁止修改审批通过后的单据 Dynamic CRM 2013学习笔记(六)备份和恢复 Dyna

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

经常有这样的需求,一个单据上有太多要填写的内容,有时还关联多个子单据,客户不想一个一个地填写,他们想从已有的单据上复制数据,克隆成一条新的记录.本文将介绍如何克隆一条记录,包括它的子单据以生成一条新的记录. 主要用到Microsoft.Xrm.Client.EntityExtensions.Clone方法来克隆数据,以及用OrganizationServiceContext来动态复制子单据的数据. 首先在界面上新加一个Clone的按钮,加一个new_clone的字段:点击按钮时,把new_clo