插件开发
# 1. 插件注册
# 1.1 事件管道执行阶段
在插件注册到 CRM 系统时,会设置它在哪个执行阶段(如预验证、预操作、后操作)触发,一旦设置完成,CRM 系统就会在相应阶段自动调用插件,代码里可以无需再次判断。
- Pre - validation:预验证阶段,在此阶段可对即将进行的操作进行合法性检查等
- Pre - operation:预操作阶段,在实际操作(如创建、更新实体)执行前触发
- Post - operation:后操作阶段,在操作完成后触发
# 1.2 插件的step
- 定义与作用
Step
是插件中定义的一个执行单元,它规定了插件在特定事件(如创建、更新、删除实体等)发生时的具体执行逻辑和顺序。每个Step
可以与不同的事件、实体以及消息相绑定,从而实现对不同业务场景的精确控制。通过配置不同的Step
,开发人员可以灵活地定制插件在不同阶段和条件下的行为,以满足复杂的业务需求。
- 关键属性
- 事件:指定
Step
所响应的 Dynamics 365 平台事件,如Create
(创建实体时触发)、Update
(更新实体时触发)、Delete
(删除实体时触发)等。开发人员可以根据业务需求选择合适的事件来触发插件逻辑的执行。 - 消息:与事件相关联,进一步细化插件触发的条件。例如,对于
Update
事件,可以通过消息指定具体是更新哪些字段时触发插件。常见的消息包括SetState
(设置实体状态)、Assign
(分配实体所有权)等。 - 实体:明确
Step
所作用的 Dynamics 365 实体对象,如客户、订单、联系人等。插件可以针对特定实体进行数据操作和业务逻辑处理。 - 执行顺序:定义了在多个
Step
存在的情况下,它们的执行先后顺序。通过设置执行顺序,可以确保插件逻辑按照预期的顺序依次执行,避免出现逻辑冲突或数据不一致的情况。 - 模式:包括同步和异步两种模式。同步模式下,插件会在主业务流程中立即执行,直到插件执行完成,主流程才会继续;异步模式则是将插件的执行放入后台队列,不影响主业务流程的继续执行,适用于一些耗时较长的操作,以提高系统的响应性能和用户体验。
- 事件:指定
# 2. 插件执行判断
# 2.1 执行实体判断
在 CS 文件中会有针对某一个或多个实体的判断逻辑,确保代码只在处理该实体相关操作时执行。
if (pluginContext.LogicalName.ToString() == "ns_outsourcingbudget")
{
// 这里编写针对ns_outsourcingbudget实体的特定处理代码
// 如获取该实体特定属性值、根据属性值进行业务判断等
}
1
2
3
4
5
2
3
4
5
# 2.2 消息类型判断
在CS文件中,一般会有类似如下代码结构来响应创建、更新、删除等消息类型:
if (pluginContext.GetMessageType() == PluginContext.MessageType.Create)
{
// 这里放置针对创建操作的处理代码
// 比如获取创建实体的相关属性、进行数据校验等操作
}
1
2
3
4
5
2
3
4
5
# 3. 插件开发
# 3.1 取得实体属性值并打log
if (entity.Attributes.ContainsKey(PluginConsts.NS_WORKSTARTDATE_NM))
{
startdate = input.ns_workstartdate;
pluginContext.Logger.Debug(class_name + ":入力値より開始日取得=" + (startdate.HasValue ? startdate.ToString() : "NULL"));
}
1
2
3
4
5
2
3
4
5
# 3.2 Pre-Image
在 Dynamics 365 插件开发中,预镜像(Pre - Image)是在实体发生特定操作(如更新、删除等)之前,系统为该实体创建的一个副本。它的目的是提供实体在操作前的状态信息,以便插件能够根据操作前的数据执行相应的逻辑。一般情况下,预镜像会包含实体的所有字段及其当时的值,这样插件可以全面地了解实体在操作前的完整状态。
ab_outsourcing preImage = pluginContext.GetPreImage<ab_outsourcing>();
1
# 3.3 Input
Entity entity = pluginContext.GetInputEntity<Entity>();
1
# 3.4 Post-Image
# 4. 插件的连锁启动
编辑 (opens new window)
上次更新: 2025/05/29, 15:46:53