本文介绍了Microsoft Dynamics 365(以下简称D365)中的两个概念,事件框架(Event Framework)与事件执行管道(Event execution pipeline)。

本文适用于:Applies To: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

注意:本文的一些内容可能已经不适用于最新的D365,翻译只为参考、学习。

本文链接:https://www.cnblogs.com/hhelibeb/p/11086723.html

原文链接:https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/developers-guide/gg334361(v=crm.8)

事件框架(Event Framework)

通过D365你可以通过集成自定义业务逻辑(代码)来扩展或自定义服务器的功能。你可以自定义产品来支持自己公司的业务,可以向产品添加新的特性。事件框架技术允许你将自开发代码集成到D365系统中。

事件框架允许你创建丰富的垂直和水平解决方案,它通过支持可靠、便携的开发与集成自定义业务逻辑实现这点。你的自定义逻辑在集成到系统中后,可以作为D365主要执行路径的一部分被同步执行,也可以在一个托管队列中异步执行。业务数据可以传输到你的自定义代码中,可以根据数据的性质执行相应的action,或者直接修改数据。

业务框架提供以下关键特性:

  • 一个改进的业务处理子系统。该子系统提供了执行plugin和workflow的统一方法,提高了可靠性、增强的特性集和plugin的可移植性。
  • 事件框架API。可以以plugin和workflow的形式扩展D365平台。
  • 一个用于部署plugin和workflow到数据库的API。它使你可以将plugin和workflow自动分发到数据中心的所有相关服务器上。
  • 同步和异步的plugin执行。同步plugin作为主要的D365事件处理的一部分以预定义的顺序执行,异步plugin被队列化并独立执行。

只有D365 server和Outlook客户端支持事件框架。有关扩展D365 Web应用的信息,可以参考Customize Microsoft Dynamics 365 applications

事件执行管道(Event execution pipeline)

D365的事件处理子系统会基于消息管道处理模型执行plugin。由plugin或其它应用调用的用户action、SDK方法会产生一个消息,发送给organization Web Service。消息包含业务实体信息和核心操作信息。消息被传递给事件执行管道,通过管道,消息可以被平台核心和其它任何注册的plugin读取。

注意:虽然D365平台托管了多个Web Service,只有由organization和OData端触发的事件会导致plugin执行。

架构和相关组件

下图是D365平台中有关异步和同步事件处理的整体架构,

事件执行管道要么同步处理事件,要么异步处理事件。平台核心操作和同步执行的plugin立即执行,同步plugin以定义好的顺序执行。异步执行的插件由异步队列代理(Asynchronous Queue Agent),并在晚些时候由异步服务执行。

注意:不管是异步还是同步执行的plugin,都有一个2分钟的执行时间限制。如果执行超时,就会产生System.TimeoutException异常。对于需要超过2分钟的执行时间的情况,考虑使用workflow或其它后台处理方式实现。2分钟限制只对在部分信任下注册的的plugin,也叫做沙箱。更多信息: Plug-in isolation, trusts, and statistics

管道阶段 (Pipeline stages)

管道被分为多个阶段,有4个可以用于自定义开发或者第三方plugin。在阶段内注册的多个plugin可以进一步在阶段内排序。

Event

Stage name

Stage number

Description

Pre-Event

Pre-validation

10

在主系统操作前执行的阶段。有可能在数据库事务外执行。

 安全注意事项

这个阶段比安全检查要早,安全检查是指对调用的检验或用户执行权限检查日志。

Pre-Event

Pre-operation

20

在主系统操作前执行的阶段。在数据库事务内执行。

Platform Core Operation

MainOperation

30

系统主操作事务,比如创建更新删除等等。自定义plugin无法使用这个阶段。它只用于内部使用。

Post-Event

Post-operation

40

在主系统操作后执行的阶段。在数据库事务内执行。

消息处理

无论何时,当应用代码或workflow调用D365 Web service方法的时候,系统中会发生状态变化,触发一个事件。信息作为参数传输给web service方法,会在内部被包装到一个OrganizationRequest消息,由管道处理。在OrganizationRequest消息中的信息被传输到第一个为当前事件注册的plugin,可以被读取和修改,然后再传输给第二个,以此类推...plugin以context的形式接收消息信息,context被传输到它们的Execute方法中。消息也会传输给平台核心操作。

Plugin注册

Plugin可以注册为在核心平台操作前或后运行。Pre-event注册plugin可以首先接收OrganizationRequest,并在它传输到核心核心操作前对其进行修改。在核心平台操作完成后的消息称为OrganizationResponse。Response被传递给post-event plugin。 Post-event plugin有机会在消息副本被传递给异步plugin前修改消息。最终,响应返回给调用原始web service方法的应用或workflow。

数据库事务

Plugin有可能在也有可能不在数据库事务内执行,这取决于管道如何处理消息请求。你可以通过读取 IsInTransaction属性来检查这点,它继承自IPluginExecutionContext,被传递给plugin。如果plugin在数据库事务内执行,并允许传输异常给平台,整个事务将回滚。阶段20和40保证是数据库事务的一部分,而10有可能是其一部分。

任何在数据库事务内执行的注册的plugin返回异常的时候,平台会取消核心操作,导致核心操作回滚。此外,任何任何注册到pre-event或post event的plugin都不运行,任何被相同事件触发的workflow亦然。

参考:http://ashishmahajancrm.blogspot.com/2012/07/microsoft-dynamics-crm-2011-event.html

Dynamics 365中的事件框架与事件执行管道(Event execution pipeline)的更多相关文章

  1. 自定义工作流活动报错:您无法登陆系统。原因可能是您的用户记录或您所属的业务部门在Microsoft Dynamics 365中已被禁用。

    本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复265或者20170926可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...

  2. 将Dynamics 365中的用户及其角色、角色导出到Excel中

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复240或者20161204可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  3. Dynamics 365中的应用程序介绍

    本人微信和易信公众号:微软动态CRM专家罗勇 ,回复275或者20180630可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...

  4. Dynamics 365中配置和使用文件夹级别的跟踪(folder-level tracking)

    本人微信和易信公众号:微软动态CRM专家罗勇 ,回复274或者20180630可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...

  5. Dynamics 365工作流报错:您无法登陆系统。原因可能是您的用户记录或您所属的业务部门在Microsoft Dynamics 365中已被禁用。

    本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复265或者20170926可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...

  6. Dynamics 365中开发和注册插件介绍

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  7. 图解“管道过滤器模式”应用实例:SOD框架的命令执行管道

    管道和过滤器 管道和过滤器是八种体系结构模式之一,这八种体系结构模式是:层.管道和过滤器.黑板.代理者.模型-视图-控制器(MVC) 表示-抽象-控制(PAC).微核.映像. 管道和过滤器适用于需要渐 ...

  8. Dynamics 365中的Client API form context (formContext)

    适用于Dynamics 365 for Customer Engagement apps 9.x版本. 本文是一篇翻译,原文来源是微软官方文档. 本文链接:https://www.cnblogs.co ...

  9. Dynamics 365中审核用户权限变化的一种方法

    摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复268或者20180311可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...

随机推荐

  1. python 和为S的连续正数序列

    题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...

  2. android网络开源框架volley(五岁以下儿童)——volley一些细节

    最近的一次volley整理出下一个.我以前没有再次遭遇了一些小问题,在该记录: 1.HttpUrlConnection DELETE 信息不能加入body问题:java.net.ProtocolExc ...

  3. 网络编程Socket之TCP之connect具体解释

    对TCP套接字调用connect会激发三次握手,例如以下: client是主动打开连接的一端,会发送第一个SYN分节,然后等待确认,此时连接状态为SYN_SENT,当收到服务端的确认后连接建立,状态变 ...

  4. 3 学习UML图 学习DDD的基本概念

    今天在学习DDD的过程中看到了大神 圣杰的博文 个人觉得非常经典 强烈推荐  在此提供url链接: UML类图10分钟快速入门 关于聚合 的理解 :一类没有紧密相关的东西聚在一起 ,分开了也可以独立存 ...

  5. Linux性能测试 命令大全

    Linux 系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工 具来判断究竟是哪一部分(内存.CPU.硬盘……)出了问题.在 Linux 系统中,所有的运行 参数保存在虚拟目录 ...

  6. 【Quartz】定时器初步实验(一)

    原文:[Quartz]定时器初步实验(一)     以前就了解了Quartz这个定时框架,但是一直没有认真的去关注他,最近忽然看到已经更新到3.0.4支持异步操作了所以就写个简单的小例子看看好用不. ...

  7. 怎么给罗技K480 增加Home、End键

    最近看张大妈上很多人分享了我的桌面,有感于整天低头码字不利健康,隧鼓捣起自己的电脑桌了. 此处省略N字... 进入正文,我码字用的是罗技的K480蓝牙键盘 码了几行代码,发现没有Home.End键,这 ...

  8. Ubuntu+NDK编译openssl(为了Android上使用libcurl且支持HTTPS协议)

    为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的o ...

  9. Oracle召回

    后几集录制视频,记录在记录开始的时候不知道怎么,录了几集没有什么,够又一次录,过程中也也把Oracle数据库这部分看了一遍,收获也挺多的,学习是反复积累的过程,对于一些零散的知识点又回想了一下,又一次 ...

  10. Swift 的 Currying 特性 | SwiftCafe 咖啡时间

    Currying 也是 Swift 的众多先进特性之一,用一句话说就是将接受多个参数的函数,转变成每次之接受一个参数的调用序列. 上面一句话说得可能大家感觉不是那么清楚,那么没关系,咱们举一个例子来说 ...