2024年5月30日发(作者:)

Dynamics CRM自定义开发—Plug-in

1、Dynamics CRM的背景与发展

Dynamics 365是微软的最新一代客户关系管理(CRM)系统,提供了从第一次接触客户

开始,经过商机创建,采购单生成到订单完成的整个购买流程的清晰管理。并且与Office

完美集成,可以快速地编辑管理数据。从业务角度,Dynamics 365可以强化和改进公司的

销售、营销和客户服务流程,并且可以通过报表来直观获取销售数据,提供快速、灵活的解

决方案。

从2017年11月份正式加入P-Dash项目组开始使用Dynamics 365以来,通过学习

和探索,对标准功能的流程和逻辑都有了一定的理解,同时,在标准功能的基础上,实际项

目中,我们可能还需要定制化功能来满足客户的需求。这篇主要介绍目前普遍应用于自定义

开发扩展Dynamics 365的Plug-in。

2、Plug-in介绍

Plug-in是能够与Dynamics 365集成的自定义逻辑代码,使用.Net进行开发和编译,

用于修改平台的标准行为或新建执行程序。 也可以理解成是针对Dynamics 365 触发的事

件的处理程序。可以让Plug-in注册已知事件集,以便在事件发生时运行自定义代码。

2.1 Plug-in Message

Message是Plug-in的触发事件,有数以百计的触发事件可以使用。下面介绍一些我

们常用的Message。

Create:在记录被创建时触发。所有的字段都包括在目标实体里,不可选择。

Update:在记录被更新时触发。可以自定义目标实体包括哪些字段,并且,只有选中

的字段发生更新时才会触发Plug-in执行。

Delete:在记录被删除时触发。需要注意的是,DeleteRequest虽然也有Target属性,

但是它的类型是EntityReference,而不是Entity。

Retrieve:在记录被检索时触发。例如在用户操作打开某条记录时。

RetrieveMultiple: 在多条记录被批量检索时触发。例如在用户打开系统View查看

时。

2.2 Plug-in Image

这个Image并不是图像的意思,可以理解成是程序执行前后实体的所有字段的数据备

份。下面的表格给出了不同类型事件的Image。

Image在执行Update的Plug-in时用的比较多。上面提到Update的目标实体只包

含指定字段,但是在执行Plug-in时很可能会需要其他字段的信息。这个时候Image就可

以避免再次从系统进行二次查询的麻烦。

3、开发一个Plug-in

Plug-in是实现 IPlugin 接口的自定义类。可以使用Visual Studio用C#语言来编写

代码。为了能够编译,必须添加和 程

序集的引用。

命名空间提供了Plug-in开发所需要的类和接口。是必须要有的。

扩展n类也是必须的,需要注意要定义public类。

IPluginExecutionContext包含描述执行插件的运行时环境的信息、与执行管道相关的

信息以及实体业务信息。包含在ceProvider参数中,该参数通过Execute

方法在执行时传递到插件。

代码示例:

在这里编写业务逻辑代码

4、注册和部署Plug-in

在完成代码编写之后,要使用Plug-in还需要把它注册到服务器。SDK提供了Plug-in

注册部署的专门工具:PluginRegistration。我们需要使用这个工具,把自定义代码编译之

后的dll部署到服务器。步骤如下:

(1) 连接到所属组织:

(2) 如果所属组织没有Assembly,需要首先注册一个Assembly。如果有则只需

要更新即可。选择编译完成的dll文件,勾选Plugin即可。

(3) 选择注册好的Assembly。一个Assembly可能包含多个Plug-in,选中需要添

加Step的,注册Step。

Step示例:其中Message是上面介绍过的,此处是Update,可以看见字段

是做了筛选的。

(4) 如果需要的话,可以对这个Step注册Image。Update经常会用到Image。

Image示例:这个Step注册了Pre Image,通过字段选择,来实现变更前后

字段信息的获取。

(5) 在完成了完整的注册Assembly-注册Step-注册Image(可选)的流程之后,现

在这个插件已经是在使用中了。

5、总结和一些感悟

本篇主要介绍了Dynamics 365的Plug-in自定义开发的背景和基本的操作。之后也

会进一步结合项目中的案例,详细地说明开发过程中什么样的需求需要Plug-in来实现、如

何实现等等。

对于我个人而言,在接触Dynamics 365之前完全从事的是从零开始的开发项目和保

守,而随着越来越多的优秀的产品的涌现,平台化产品化也是目前IT领域的发展方向。在

产品基础上的二次开发是需要对现有标准功能有着扎实的掌握的,在实际的开发过程中,可

能会遇到一些小难题,也会总结出来自己的一些小技巧。Anyway,Practice makes perfect.