【转】Dynamics 365中的事件框架与事件执行管道(Event execution pipeline)

本文介绍了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有效,也就是只对被部署到沙箱的plugin有效。更多信息: Plug-in isolation, trusts, and statistics

管道阶段 (Pipeline stages)

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

Event

Stage name

Stage number

Description

Pre-Event

Pre-validation

10

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

System_CAPS_security 安全注意事项

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

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以传递给它的Execute方法中的context的形式接收消息信息。消息也会传递给平台核心操作。

Plugin注册

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

数据库事务

Plugin有可能在数据库事务内执行,也有可能不在,这取决于管道如何处理消息请求。你可以通过读取 IsInTransaction属性来检查这点。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

转载于:https://www.cnblogs.com/hhelibeb/p/11086723.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle临时表空间组,证明临时表空间组在并发session时的作用

本帖最后由 zcs0237 于 2013-7-16 20:26 编辑a.感谢对本帖补充、建议、错误更正b.为节省篇幅,部分输出结果做了精简c.可按本文先后顺序复制文中代码进程调试d.测试环境:Ora10.2.0.1.0(Ora11.2.0.1.0暂时还没测)****************************证明不同session会调用临…

家乡的楼房正在往高层发展

几年前家乡的楼房都是一马平川,偶尔有些鹤立鸡群的楼房就能一览众山小,到了上海看到随处可见的摩天大厦,感叹家乡何时才能拥有如此的繁华。 今年回到家乡发现有多座大楼正拨地而起,虽然有特色的没有几座,但高大耸立的楼…

【转】ABP源码分析二十:ApplicationService

IApplicationService : 空接口,起标识作用。所有实现了IApplicationService 的类都会被自动注入到容器中。同时所有IApplicationService对象都会被注入一些拦截器(例如:auditing, UnitOfWork等)以实现AOP AbpServiceBase&#xf…

oracle 600 session,记一次ORA-600[4042]故障的处理

【IT168 技术文档】一套运行在Linux下的Oracle 9.2.0.4的库,出现了大量的ORA-600[4042]错误。ORA-00600: internal error code, arguments: [4042], [31760], [], [], [], [], [], []ORA-00600: internal error code, arguments: [4042], [31760], [], [], [], [], …

权限系统思路

1、角色只与模块(功能)对应 2、具备“管理选项”的角色可被授予其他角色(这是从Oracle得到的启发)转载于:https://www.cnblogs.com/xiaotaoliang/archive/2005/02/26/109463.html

【转】ADFS 概念与基本开发介绍

(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系 menap7.com) ADFS 相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候搞的比较辛苦,因此总结此文档,以解后人之忧。 本文会首先介绍…

oracle更新数据没反应,ORACLE更新数据时如果有就更新没有就插入

SQL写法:beginupdate table_name set salary 10000 where emp_id 5;if sql%notfound theninsert into table_name (id,name,salary)values("","","") ;end if;end;SQL%NOTFOUND 是一个布尔值。与最近的sql语句(update,insert,delet…

【转】使用FiddlerCore来测试WebAPI

大家在调试Web相关的API时,经常会用Fiddler来查看相关的请求,以及返回结果。当然你也可以尝试修改或者重复发送你的请求信息。本文主要介绍如何使用代码来实现fiddler的功能。 Fiddler Core API Fiddler Core几乎实现了你能用fiddler做的所有功能。直接…

matlab lmi 定义一个任意方阵,matlab中LMI应用说明

我们要实现的就利用LMI进行求解。首先我们要用setlmis([])命令初始化一个LMI系统。接下来,我们就要设定矩阵变量了。采用函数为lmivar语法:X lmivar(type,struct)type1: 定义块对角的对称矩阵。每一个对角块或者是全矩阵,标量,或…

想学C#很久了。

去年年底我就想着学C#了,还计划着两个星期学熟他,因为工作二年了,原来一直搞些ASP,有些基础,后来来这个公司,全部是用在asp.net环境下C#做后台开发的,同事兼密友陶成比我来得早许多,…

【转】程序在内存中的分布

前些天学习到了程序在虚拟内存中分布的一些知识点,结合在网上查阅的一些资料,整理一下知识点。本博客参考博主 hackbuteer1的《程序在内存中的分布》这篇文章。 v 在现代的操作系统中,当我们说到内存,往往需要分两部分来讲&#x…

php怎么创建进程,在php中为长时间运行的进程创建后台进程

好的,请原谅我,如果这是另一个问题的重复,但在搜索后我还没有找到一个明确的答案.我基本上想要做的是让我的php web应用程序触发一些事件(如电子邮件或报告生成器)可能需要几分钟才能完成并立即将控制权返回给页面.我来自.NET世界,可以通过线程轻松完成.所以这是工作流程&#…

GARFIELD@04-02-2005

treat 转载于:https://www.cnblogs.com/rexhost/archive/2005/04/02/130985.html

【转】TechEd第一课:新一代关系管理系统XRM**

提起微软的CRM产品,最先想到的是CRM 4.0。除了字面理解上的客户关系管理系统外,微软也赋予这款产品“应用开发平台”的角色,并给它一个新名字——XRM。XRM到底是什么东西?它能用来做什么?这些问题都在今天这节“微软新…

linux打包启动这着的文件,linux – 打开一个RPM文件并重新打包它

修改您没有源的RPM的最佳方式是按照以下步骤操作:>使用rpm2cpio命令将rpm解压缩到目录中>在该子目录内进行必要的更改制作一个“虚拟”规范文件并构建它.该虚拟规范文件可能如下所示:Name: blahVersion: 1.0Release: 1Summary: blahLicense: blahD…

学习Java的相关知识

工作的原因现在学习Java极其相关的技术,包括JBoss,Struts,JSP,EJB等. 感觉Java的库比较多,但做的真的一般,易用性很差,编程也非常的“片断”性,不像.NET思想连贯性强。可能是才学习几天的缘故吧。 Java的throws我很讨厌,我觉得绝对是个设计的错误。 转载…

【转】ASP.NET 2.0 - 导航(Navigation)SiteMap导航菜单关系

ASP.NET 2.0 拥有内建的导航控件。 网站导航 维护大型站点的导航菜单是很困难,也很费时的。 在 ASP.NET 2.0 中,菜单可存储在文件中,这样维护起来更加方便。这个文件通常名为 web.sitemap,被存放在网站的根目录中。 此外&…

Up or out!!!

近日获知浙江大学计算中心被撤销,心里感慨万千。忽然想起前几天听到的一句话:Up or out!如是而已。转载于:https://www.cnblogs.com/pipisong/archive/2005/06/14/174099.html

linux内核的邻居表,Linux内核报文收发-L3 - Section 3. IP协议、邻居子系统主要是接收、转发和发送三部分...

版本说明Linux版本: 3.10.103网卡驱动: ixgbe网络协议注册inet_init主要是注册各种协议注册TCP协议proto_register(&tcp_prot, 1)继续注册UDP、RAW、PINGarp_init, ip_init, tcp_init, udp_init, ping_init, icmp_initdev_add_pack(&ip_packet_t…

【转】EntityFramework使用Code First模式创建数据库控制生成单数形式的表名

使用Code-First模式生成数据库时,默认生成的数据库表的名称为类型的复数形式,例如实体类名称是"User",默认生成的数据库表名为“Users”,多数情况下我们并不想生成的数据库表名为复数形式,那么应该如何来控制…