keijyu's blog keijyu's blog
首页
  • CRM
  • 学习笔记

    • 数据结构与算法
    • 计算机组成原理
    • 计算机操作系统
    • 计算机网络
    • 数据库
商业
个人成长
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

keijyu

喜欢折腾的IT初心者
首页
  • CRM
  • 学习笔记

    • 数据结构与算法
    • 计算机组成原理
    • 计算机操作系统
    • 计算机网络
    • 数据库
商业
个人成长
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 系统设计
  • ASP.NET页面开发
  • 插件开发
    • CRM
    keijyu
    2025-04-09
    目录

    插件开发

    # 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.2 消息类型判断

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

    if (pluginContext.GetMessageType() == PluginContext.MessageType.Create)
    {
        // 这里放置针对创建操作的处理代码
        // 比如获取创建实体的相关属性、进行数据校验等操作
    }
    
    1
    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

    # 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)
    #CRM
    上次更新: 2025/05/29, 15:46:53
    ASP.NET页面开发

    ← ASP.NET页面开发

    最近更新
    01
    _未来玩玩
    06-06
    02
    书籍合集
    06-06
    03
    博客合集
    06-06
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 keijyu
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式