BPMN2.0 规范

1 启动事件

每个流程总是以启动事件作为入口,启动事件在BPMN2.0 中以细线圆圈表示。分为三种类型

  • 空启动事件
  • 定时启动事件
  • 异常启动事件
  • 消息启动事件

启动事件都是等待第三方触发才可以启动。

定时启动事件用于定期循环流程或一次性流程。定时事件是使用 <timerEventDefinition> 描述一个定时事件

异常启动事件:是在另外一个流程抛出异常结束事件时被触发,异常启动事件是“捕获型”,异常结束事件是“抛出型”。异常结束事件对应throw,异常启动事件是catch,并且执行catch 后获取不同类型的异常。异常启动事件必须要嵌套在事件子流程中。

消息启动事件:可以通过一个消息名称触发,从而启动一个流程实例。可以和消息抛出事件一块使用,由流程自动根据消息名称启动对应的流程。借助这个功能在实际应用中可以为不同的业务处理结果启动不同的流程。

2 结束事件,BPMN2.0 中以加粗的圆圈表示,结束事件是抛出型的。

结束事件可以分为以下3种类型

  • 空结束事件
  • 异常结束事件
  • 终止结束事件
  • 取消结束事件

空结束事件,正常结束后流程引擎就不会再执行其他操作了,没有其他后续处理。一般用于正常结束流程。如果需要处理异常就需要异常结束事件或边界事件处理。

异常结束事件,是有抛出结果的,他定义了需要抛出的错误代码,如果找到了异常开始事件定义的异常代码,则会触发异常开始事件,否则按照空结束事件规则处理。

说明:异常结束事件的错误代码不能为空。

终止结束事件,可以终止一个流程实例的执行,空结束事件结束的是一条输出流,而终止结束事件结束的是整个流程实例。

取消结束事件,可以取消一个事务子流程,同时也只能在子流程中使用。取消结束事件可以和取消边界事件结合使用针对取消操作做后续处理。

3 顺序流,是两个模型之间的连接者。BPMN2.0 默认顺序流是并行的,多个输出顺序流会创建多条独立、并行的执行路径。

顺序流可以分为两种,使用sequenceFlow 表示顺序流,

  • 标准顺序流
  • 条件顺序流

  3.1 标准顺序流,使用 sourceRef 属性指定顺序流的源, 使用 targetRef 指定顺序流的目的模型。

  3.2 条件顺序流,在标准顺序流上添加条件表达式,只有满足条件才能通过顺序流达到目标活动。在不设置条件顺序流就是标准顺序流,设置条件的就是条件顺序流。

4 任务,任务分类如下

4.1 用户任务,需要有人来参与,因为他必须人为触发。可以设置任务名称、优先级、到期日和任务处理人

activiti 在 BPMN2.0 基础上进行扩展,简化设置用户、组的方式,而且支持运行时获取用户、组分配给用户任务。还可以为用户任务添加任务监听,监听选项有创建、分配、完成。扩展属性如下

4.2 脚本任务,可以运行引擎依赖语言之外的脚本语言,例如 Groovy,javascript,juel。

4.3 java Service,不属于BPMN2.0 规范,是activiti 扩展的专门用于java语言的 serviceTask,允许定义一个实现了指定接口的 java 类或者执行一个表达式。

4.4 web service,可以调用外部的 Web Service 资源,只需要一些必须的配置即可。支持标准的 Web Service 和 REST 风格的 Service,

4.6 邮件任务,可以通过activiti发送邮件,其中的邮件信息通过变量方式传递。由 activiti 扩展专门处理邮件任务。

发送邮件需要配置邮件服务器信息到流程引擎中,可以在 activiti.cfg.xml 定义的引擎属性中设置。

4.7 Camel 任务是用来解决消息路由的框架

4.8 手动任务,他不做任何事情,仅用来定义 BPM 不能完成的任务。

4.9 接受任务,任务创建之后等待消息的到来,直到被触发才会完成任务。仅能通过 RuntimeService 接口的 signal(),方法发送信号触发接受任务,原理类似现成的等待和恢复。

5 网关,用于控制流程走向(BPMN2.0 中称为执行令牌),可以分为4种网关

  • 排他网关
  • 并行网关
  • 包容网关
  • 事件网关

5.1 排他网关 (Exclusive gateway 也称为 XOR gateway),流程执行到该网关时,按照输出流的顺序逐个计算,当条件的计算结果为true时,继续执行当前网关的输出流。

如果多条线路计算结果都是 true,则会执行第一个值为 true 的线路。如果所有网关计算结果没有true,则引擎会抛出异常。

排他网关需要和条件顺序流结合使用,default 属性指定默认顺序流,当所有的条件不满足时会执行默认顺序流。

5.2 并行网关(Parallel Gateway),能把单条线路任务拆分成多个路径并行执行或将多条线路合并。

  • 拆分,并行执行所有输出顺序流,为每一条顺序流创建一个并行执行线路。
  • 合并,所有从并行网关拆分并执行完成的线路均在此等候,直到所有的线路都执行完成才继续向下执行。

5.3 包容网关(inclusivegateway),可以同时执行多条线路,也可以在网关上设置条件。

  • 拆分,计算每条线路上的表达式,当表达式计算结果为true时,创建一个并行线路并继续执行。
  • 合并,所有从并行网关拆分并执行完成的线路均在此等候,直到所有的线路都执行完成才继续向下执行。

5.4 事件网关(EventGateway),专门为中间捕获事件设置的,允许设置多个输出流指向多个不同的中间捕获事件。当流程执行到事件网关后,流程处于等待状态,需要等待抛出事件才能将等待状态转换为活动状态。

说明:

1)事件网关的输出流数量必须大于2个

2)输出流类型只能是中间捕获事件,activiti 不支持接受任务后面的事件网关

3)中间捕获事件的输出流只能有一个

6 子流程和调用活动,子流程是嵌入在主流程中,调用活动是有子流程的特性又保持通用。

说明:

子流程的限制

1)只能且仅能包含一个空启动事件

2)至少要有一个结束事件

3)子流程中顺序流不能直接设置输出流到子流程之外的活动上,如果需要可以通过边界事件代替。

6.2 调用活动和子流程的作用一致,通过创建一个调用活动模型并指定外部流程的 ID 方式作为主流程的一个子活动。

6.3 事件子流程:和子流程类似,不同的是事件子流程不能直接启动,需要有相应事件触发启动。

6.4 事务子流程:处理一组必须在同一个事务中完成的活动,这些活动要么一块完成,要么一起失败。

7 边界与中间事件,中间事件提供的特殊功能可以处理流程执行过程中抛出、捕获的事件。有边界事件、中间捕获事件、中间抛出事件。

7.1 边界事件:是绑定在活动上的“捕获型”事件,会一直监听所有处于运行中活动的某种事件的触发,在捕获到事件之后中断活动,然后从边界事件类型的输出流继续运行。

一旦触发边界事件,当前的活动就会被中断,按照边界事件之后的输出流执行。一个活动只能绑定一个边界事件。

原文地址:https://www.cnblogs.com/zhaopengcheng/p/8343302.html