Dynamics CRM自定义开发—Plug-in
1、Dynamics CRM的背景与发展
Dynamics 365是微软的最新一代客户关系管理(CRM)系统,提供了从第一次接触客户开始,经过商机创建,采购单生成到订单完成的整个购买流程的清晰管理。并且与Office 完美集成,可以快速地编辑管理数据。从业务角度,Dynamics 365可以强化和改进公司的销售、营销和客户服务流程,并且可以通过报表来直观获取销售数据,提供快速、灵活的解决方案。
delete in从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#语言来编写代码。为了能够编译,必须添加Microsoft.Xrm.Sdk.dll和Microsoft.Crm.Sdk.Proxy.dll 程序集的引用。
Microsoft.Xrm.Sdk命名空间提供了Plug-in开发所需要的类和接口。是必须要有的。
扩展Microsoft.Xrm.Sdk.IPlugin类也是必须的,需要注意要定义public类。
IPluginExecutionContext包含描述执行插件的运行时环境的信息、与执行管道相关的信息以及实体业务信息。包含在System.IServiceProvider参数中,该参数通过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.