插件注册

事件管道执行阶段

在插件注册到 CRM 系统时,会设置它在哪个执行阶段(如预验证、预操作、后操作)触发,一旦设置完成,CRM 系统就会在相应阶段自动调用插件,代码里可以无需再次判断。

  • Pre - validation:预验证阶段,在此阶段可对即将进行的操作进行合法性检查等
  • Pre - operation:预操作阶段,在实际操作(如创建、更新实体)执行前触发
  • Post - operation:后操作阶段,在操作完成后触发

插件的step

  • 定义与作用
    • Step是插件中定义的一个执行单元,它规定了插件在特定事件(如创建、更新、删除实体等)发生时的具体执行逻辑和顺序。每个Step可以与不同的事件、实体以及消息相绑定,从而实现对不同业务场景的精确控制。通过配置不同的Step,开发人员可以灵活地定制插件在不同阶段和条件下的行为,以满足复杂的业务需求。
  • 关键属性
    • 事件:指定Step所响应的 Dynamics 365 平台事件,如Create(创建实体时触发)、Update(更新实体时触发)、Delete(删除实体时触发)等。开发人员可以根据业务需求选择合适的事件来触发插件逻辑的执行。
    • 消息:与事件相关联,进一步细化插件触发的条件。例如,对于Update事件,可以通过消息指定具体是更新哪些字段时触发插件。常见的消息包括SetState(设置实体状态)、Assign(分配实体所有权)等。
    • 实体:明确Step所作用的 Dynamics 365 实体对象,如客户、订单、联系人等。插件可以针对特定实体进行数据操作和业务逻辑处理。
    • 执行顺序:定义了在多个Step存在的情况下,它们的执行先后顺序。通过设置执行顺序,可以确保插件逻辑按照预期的顺序依次执行,避免出现逻辑冲突或数据不一致的情况。
    • 模式:包括同步和异步两种模式。同步模式下,插件会在主业务流程中立即执行,直到插件执行完成,主流程才会继续;异步模式则是将插件的执行放入后台队列,不影响主业务流程的继续执行,适用于一些耗时较长的操作,以提高系统的响应性能和用户体验。

插件执行判断

执行实体判断

在 CS 文件中会有针对某一个或多个实体的判断逻辑,确保代码只在处理该实体相关操作时执行。

1
2
3
4
5
if (pluginContext.LogicalName.ToString() == "ns_outsourcingbudget")
{
// 这里编写针对ns_outsourcingbudget实体的特定处理代码
// 如获取该实体特定属性值、根据属性值进行业务判断等
}

消息类型判断

在CS文件中,一般会有类似如下代码结构来响应创建、更新、删除等消息类型:

1
2
3
4
5
if (pluginContext.GetMessageType() == PluginContext.MessageType.Create)
{
// 这里放置针对创建操作的处理代码
// 比如获取创建实体的相关属性、进行数据校验等操作
}

插件开发

取得实体属性值并打log

1
2
3
4
5
if (entity.Attributes.ContainsKey(PluginConsts.NS_WORKSTARTDATE_NM))
{
startdate = input.ns_workstartdate;
pluginContext.Logger.Debug(class_name + ":入力値より開始日取得=" + (startdate.HasValue ? startdate.ToString() : "NULL"));
}

Pre-Image

在 Dynamics 365 插件开发中,预镜像(Pre - Image)是在实体发生特定操作(如更新、删除等)之前,系统为该实体创建的一个副本。它的目的是提供实体在操作前的状态信息,以便插件能够根据操作前的数据执行相应的逻辑。一般情况下,预镜像会包含实体的所有字段及其当时的值,这样插件可以全面地了解实体在操作前的完整状态。

1
ab_outsourcing preImage = pluginContext.GetPreImage<ab_outsourcing>();

Input

1
Entity entity = pluginContext.GetInputEntity<Entity>();

Post-Image

插件的连锁启动