BPMN2.0协议简介
BPMN2.0相对于BPMN1.0最大的区别就是定义、规范了流程引擎的执行语义和格式,利用标准的图元描述真实的业务发生过程,保证相同的流程在不同的流程引擎中得到一致的执行结果。在2.0的这套标准中,主要对流程执行定义了三类基本要素,分别为Activities(活动)、Gateways(网关)、Events(事件)
一、BPMN是什么
如果想了解BPMN是什么,就先需要了解BPM是什么。
BPM(Business Process Managment)--“通过建模、自动化、管理和优化流程,打破跨部门跨系统业务过程依赖、打破信息孤岛,提高业务效率和效果”,通俗一点讲,就是工作流引擎。在进行流程设计时,需要将流程的元素进行定义,并按照一定的格式、标准运行,这就需要一套业务规范,这套规范就是BPMN。
BPMN(Business Process Model and Notation)--“业务流程建模标注”,从语义上我们就能理解,BPMN就是将流程定义标准化的一套规则、规范。提出这套标准化的就是OMG(国际性、开放式会员制的非盈利技术标准联盟),这套标准是独立于企业的标准。
BPMN2.0相对于BPMN1.0最大的区别就是定义、规范了流程引擎的执行语义和格式,利用标准的图元描述真实的业务发生过程,保证相同的流程在不同的流程引擎中得到一致的执行结果。在2.0的这套标准中,主要对流程执行定义了三类基本要素,分别为Activities(活动)、Gateways(网关)、Events(事件)。
二、监听
在讲各种任务时,需要先讲一下监听,因为监听这个属性,会在下面中多次提到。
监听,就是可以监听流程在运行期间所有的动作,包括流程发起、任务创建、任务执行、任务删除等等;它是一个事件,流程在运行期间可以通过集成监听类重写方法,来实现要达到的目的。
三、Activities(活动)
Activities(活动)在流程中也可以称之为任务,任务又根据场景应用,分为多种类型,比如用户任务、子流程、调用任务等等。
Task(任务),是流程中的原子级的活动,用来指代一个由人或设备来完成的活动。
User Task(用户任务),这个比较好理解,就是由人来处理的任务,可以通过设置处理人、候选组、候选人三个属性来指定任务处理人。
Send Task(发送任务),也可以称为消息任务,主要用来发送消息。
Receive Task(接收任务),也可以称为触发式任务,外部通过事件触发 ReceiveTask,任务流转进入下一步,这个事件可以是消息、信号等等。
Manual Task(手工任务),不需要计算机参与的任务,没有taskservice可以执行它,但是可以通过配置监听(手动敲代码)来进行一些业务处理等。可以理解为自动任务,只是在运行轨迹中留下轨迹。
Business Rule Task(业务规则任务),用于同步执行一个或更多任务,可以使用drool规则引擎来执行业务规则。任务节点中,需要定义一个输入变量与输出变量,输入变量用于规则引擎执行业务逻辑判断,输出变量用于流程引擎接收,并存储在变量表中。
Service Task(服务任务),可以通过调用某个服务执行的任务节点,流程中一般多使用配置监听的方式执行调用。
Script Task(脚本任务),脚本任务是一个自动化活动,当流程执行到达脚本任务时,执行相应的脚本。脚本代码必须和JSR-223兼容,比如Groovy,如果想使用其他的脚本引擎,需要添加相应的jar包。
Call Activity(调用活动),一般用于父子流程,但是并不是调用的嵌入式子流程,而是调用的本流程之外的一个流程。在配置调用活动时,需要指定被调用的子流程信息。
Sub Process(子流程),子流程是流程中包含的另一个流程,可以是折叠或者展开的状态。
四、Gateways(网关)
网关,也成为路由,主要用来控制流程走向,通过配置转向条件来达到流程走向控制。
Exclusive Gateway(排他网关),如果流程有多个分支,通过排他网关,排除不符合条件的分支,只保留第一个符合条件的分支进行流转。
Paraller Gateway(并行网关),可以同时发送给多个分支,值得注意的是,官方对它的定义“用来实现无条件的聚合分支决策和发散分支决策”,也就是说如果设置方向条件的话,这些条件都会被忽略不计算。
Inclusive Gateway(相容网关),也称为包容网关,它的特点就是包含了Exclusive Gateway(排他网关)与Paraller Gateway(并行网关)的特性,既可以设置方向条件控制流程走向,又可以同时发送给多个分支,等所有分支全部聚合之后再发送到下一步。
Complex Gateway(复杂网关),相当于Inclusive Gateway(相容网关)的升级版,有一点不同的是,在进行分支合并(聚合)时,可以按照完成率进行合并,当达到指定的完成率之后,再进入下一步。而且它最主要的特点就是进行分支聚合(完成率),所以它可以与Paraller Gateway(并行网关)、Inclusive Gateway(相容网关)以及Event-Based Gateway(事件网关)搭配使用,即通过以上几种网关进行分支拆分,通过它本身进行分支合并,当然也可以自己进行拆分再合并。
Event-Based Gateway(事件网关),在实际场景应用中,并不是所有的条件都通过设置系统参数来设定,也可以根据事件进行设定,这种情况下就需要使用事件网关。事件网关只负责分支拆分,不管聚合,所以可以使用Complex Gateway(复杂网关)或Inclusive Gateway(相容网关)进行分支合并(聚合)。
事件网关可以执行的事件:
Receive Task(接收任务),上面我们已经讲过。
Catch Message Intermediate Event(消息事件),向流程发送一个消息,接收到消息的时候该分支被选择。比如,付款之后,收到回执单,走该分支,进入下一步。
发送消息的方法:
runtimeService.messageEventReceived(string s,string excutionid);
Timer Intermediate Event(定时器事件),到达指定的时间时,该分支被选择。比如,发货3天后,无论对方是否收到货都进入下一步。
Catch Signal Intermediate Event(信号事件),向流程发送一个信号,接收到信号之后,该分支被选择。
发送信号的方法:
runtimeService.signalEventReceived(string s,string excutionid);
五、Events(事件)
用来定义流程中的动作,比如开始事件、结束事件等,这里我们主要讲开始事件、边界事件与结束事件,其他事件参考Event-Based Gateway(事件网关)。
其他事件列表:
Start Event(开始事件),表示一个流程的开始,所有的流程都是从这里开始启动。由于它只是一个事件,启动一个流程实例之后,流程实例的活动节点实际上是第一个任务节点。比如以下流程:
按照BPMN2.0的标准,如果我们要发起这个流程的话,首先要通过StartEvent(开始事件)启动这个流程实例,启动之后,活动节点位于“填写申请”这个任务节点,然后再由“填写申请”这个任务节点的处理人进行任务处理。
如果我们想开始就“填写申请”,填写完成后进入“部门负责人审核”,就需要做两步操作,第一步启动实例,第二步发送任务,这种情景在国内绝大多数的流程应用中都是不合理的。
如果要实现我们上述所说的,就需要在启动之前填写好申请单,然后执行启动实例的方法,完成之后,再执行一个任务执行处理的方法。为何要这样做,因为启动实例的接口与任务处理的接口是独立的两个接口。
Intermediate Event(边界事件),它有很多种类型,比如Timer Intermediate Event(定时器事件)、Catch Signal Intermediate Event(信号事件)都可以理解成是一个边界事件,它主要应用于Start Event(开始事件)与End Event(结束事件)之间。在流程的实际应用中,可以通过边界事件进行业务处理、业务扩展等操作。
End Event(结束事件),流程需要闭环,结束事件就相关于闭环,表示一个流程实例的结束,通常放在流程最后一个任务节点或者可以结束流程的任务节点后面,当流程流转到End Event时,流程结束。
总结
通过BPMN2.0规范的三要素,活动、网关、事件,我们可以做出一个完整闭环的流程,通过网关与事件的配置,几乎可以完成我们所有的业务需求,而且流程的各个环节与场景一目了然,符合BPMN2.0规范的工作流产品也都是很专业的。但是,它也有一个缺点,规范、元件太多,实际应用中需要很多的专业知识,除了需要了解业务场景之外,还需要根据各个业务场景解析各个环节所用到的元件。
BPMN2.0是外国的一套标准,站在国内使用者的角度去看,如果我们想用BPMN2.0标准做一套国内特色的工作流引擎的话,需要封装的内容较多,比如:各个参数的配置语法、格式,如何使用自然语言、如何扩展它的任务接收人、如何与表单挂接等等。
更多推荐
所有评论(0)