流程-活动节点

活动包括子流程和任务

活动类图

通用属性

  1. isForCompensation: boolean = false

    标识此活动是否用于补偿目的的标志。 如果为false,则此活动作为正常执行流的结果执行。如果为true,则此活动仅在检测到补偿事件并在补偿事件可见性作用域下启动时激活

  2. loopCharacteristics: LoopCharac- teristics [0..1]

    一个活动可以执行一次,也可以重复执行。如果是重复的,活动必段定义 loopCharacteristics(如果流程isExecutable属性被设置为true)。

  3. resources: ResourceRole [0..*]

    定义将执行或将负责活动的资源。资源,例如执行者,可以以特定的个人、团体、组织角色或职位或组织的形式指定。

  4. default: SequenceFlow [0..1]

    默认分支, 当其它条件不满足时 默认走该分支, 该分支不用配置条件。

  5. ioSpecification: Input OutputSpecification [0..1]

    定义了活动的输入和输出以及输入集和输出集。

  6. properties: Property [0..*]

    其它属性

  7. boundaryEventRefs: BoundaryEvent [0..*]

    绑定的边界事件

  8. dataInputAssociations: DataIn- putAssociation [0..*]

    可选引用。数据输入关联定义了如何填充活动的输入输出规范的数据输入。

  9. dataOutputAssociations: DataOutputAssociation [0..*]

    可选引用。对数据输出关联.

  10. startQuantity: integer = 1

    缺省值为1。不小于1。这个属性定义了在活动开始之前不能到达的令牌的数量。

  11. completionQuantity: integer = 1

    缺省值为1。不小于1。这个属性定义了从活动中生成的令牌的数量。这个数目的令牌将在任何传出序列流(假设满足任何序列流条件)时发送。

活动与资源的关系

任务的标示

image.png

任务类图

image.png

任务类型说明

服务任务 Service Task

  1. 属性

    绑定一个操作,且有输入与输出
    implementation: string = ##webService
    operationRef: Operation [0..1]
  2. 作用

    调用外部服务
  3. 标示

  4. 类图

发送消息任务 Send Task

  1. 属性

    绑定一个消息, 但不是必须的
    messageRef: Message [0..1]
    operationRef: Operation [0..1]
    implementation: string = ##webService
  2. 作用

    发送消息
  3. 标示

  4. 类图

接收消息的任务 Receive Task

  1. 属性

    绑定一个消息, 但不是必须的
    messageRef: Message [0..1]
    operationRef: Operation [0..1]
    implementation: string = ##webService
    instantiate: boolean = false
  2. 作用

    接收消息, 当接收到消息时自动完成任务;
    通常用于启用一个实例;如果想要触发一个实例,需要将属性 instantiate 设置成 true
  3. 标示

    可作为开始节点 :

业务规则节点 Business Rule Task

  1. 作用

    DMN 任务
  2. 标示

脚本任务 Script Task

  1. 属性

    script:string[0..1] 脚本, 如果没有配置脚本, 当作一个空任务进行执行
    scriptFormat: string[0..1] 脚本格式,该值一定是一个 mime-type 类型, 如果脚本指定了, 该值需要必须配置
  2. 作用

    执行指定的脚本
  3. 标示

人工任务 User Task

  1. 属性

    implementation: string = ##unspecified  一个webservice提供实现
    renderings: Rendering [0..*] 这个属性充当一个hook,它允许bpmn采用者使用bpmn扩展机制来指定任务呈现方式。
  2. 作用

    人员参与完成任务,该节点的实现可以交由业务方根据业务场景自行实现
  3. 标示

  4. 类图



操作任务 Manual Task

  1. 属性

    只继承自Task,无其它属性
  2. 作用

    不被引擎管理,可以理解为不受管的任务,即引擎不管理他的开始和结束;例如: 需要某一个人去给用户安装电话;
  3. 标示

  4. 类图

子流程 Call SubProcess Activity

  1. 属性

    triggeredByEvent: boolean = false 是否有事件触发,即事件子流程
    method: Transaction- Method 事务子流程,该方法是用来提交或取消事务用的,如果是事务子流程,需要两个圈
  2. 作用

    不被引擎管理,可以理解为不受管的任务,即引擎不管理他的开始和结束;例如: 需要某一个人去给用户安装电话;
  3. 标示


  1. 类图

  2. 子流程案例

可被调用的 活动 Call Activity

  1. 属性

    calledElement: CallableElement [0..1] : CallableElements,GlobalTask
  2. 作用

    用来引用全局的Task或流程
  3. 标示



  4. 类图

可被引用的元素 CallableElements

全局任务 Global Task

流程引擎发展

第一代 第二代 第三代 第三代 第五代 第六代
2003年, jBPM 1.0发布。
运行环境:J2EE 过程定义语言:jPDL(当时工作流厂商都有各自的过程定义语言和建模工具) 当时的主流的技术: applets, Swing桌面和EJB
2004年,jBPM 2.0发布
同时jBPM加入JBoss基金会. 运行环境:任何JAVA环境(POJO实现过程运行时),不需要应用服务器
2005年, jBPM 3.0发布,支持BPEL
- 过程定义语言:过程虚拟机
- 架构:与二代相比,架构发生了巨大变化。可以操作的业务功能大范围扩展,不仅通过JAVA实现状态机,而且支持建模;
- HIBERNETE作为持久机制并同时提供会话对象的概念,
- 工作流引擎所有的相关性交互都纳入contextual block范畴
这为以后的工作流命令设计模式和命令拦截设计模式的广泛应用打下良好的基础
2009年, jBPM 4.0 alpha版发布.
- PVM 成功工作流引擎的核心。
- 过程定义语言:BPMN, jPDL 和 BPEL
- 因为团队人员离开并启动Activiti,正式版没能发布。
- 主要改进:      - 无状态的服务API      - 运行时和历史数据的分离:保证运行时持久的性能
2010年, Activiti 1发布
改变:
- 版权从LGPL转到APACHE. - 过程定义语言:BPMN(唯一) - 从性能和扩展性加强PVM - 多租户支持 - 轻量级架构
2017年,flowable 6.0发布。
改变:
- 过程模型:放弃PVM,使用原生BPMN,实现真正的动态过程执行和复杂的过程迁移 - 数据远完全抽象:支持NoSQL - CMMN支持 - 函数式工作流



Tom Baeyens Effektif 诞生

流程-网关Gateway

网关可以是流程的开端,也可以没有连出的线;
网关可以有多个连入的线或多个连出的线(即,它可以合并或分流)

默认网关

排它(独占)网关

Exclusive Gateway

属性

  1. 条件(所有分支)
  2. 是否为默认分支
  3. 分支的顺序

规则

  1. 选择第一个满足条件的分支
  2. 如果没有匹配的分支,选择默认分支

表示

排它网关示意图

排它网关类图

排它网关类图

包容网关

Inclusive Gateway

属性

  1. 条件(所有分支)
  2. 是否为默认分支
  3. 分支的顺序

规则

  1. 选择一条和多条满足条件的分支
  2. 如果没有匹配的分支,选择默认分支
  3. 可以对多条进入的线进行汇集,汇集后再判断连出分支

表示

包容网关

包容网关类图

包容网关类图

并行网关

Parallel Gateway

属性

  1. 多条连接的线
  2. 多条连出的线

规则

  1. 汇集, 并行节点 会 等待所有进入的线都到达时才向后流转
  2. 分发

表示

并行网关汇集
并行网关分发

并行网关类图

并行网关

复杂网关

Complex Gateway

属性

  1. 指定向该节点要完成的连入线的占比或数量
  2. 多条连出的分支
  3. 分支需要配置条件表达式(默认分支除外)

规则

  1. 汇集,可以激活的条件(哪些进入的线被同步等待)满足后,进行第二步的分发(可以选择 其它未到达的分支 策略, 是直接取消,还是达到时再次激活当前网关)
  2. 分发

表示

复杂网关

复杂网关类图

复杂网关类图

事件网关

Event-Based Gateway

属性

  1. 实例化 true or false (如果 true, 可以没有连入的线 作为流程的开端,同时事件分支类型可以选择并行)

  2. 事件网关类型(并行,排它)

    规则

  3. 多条分支连出 >=2

  4. 分支需要配置事件 (只能是事件,不能是表达式)

  5. 支持的事件 Message, Signal, Timer, Conditional, and Multiple (which can only include the previous triggers)

表示


实例化=true, 可以作为流程的开始

复杂网关类图

事件网关

BPMN2.0

Version 2.0
OMG Document Number: formal/2011-01-03
Standard document URL: http://www.omg.org/spec/BPMN/2.0

一. 流程引擎发展

二. 流程元素

分类
事件 event
任务 task
子流程 sub-processes
CallActivity
网关 Gateway
泳道 Lane
数据 Data Object
消息,组,备注 Message,Group,Text Annotation
线 Sequence Flow
消息 Message Flow

三. BPMN 发展

四. 开源引擎介绍

五. 主流程的引擎对比

六. 流程PaaS中的实现

七. 流程在PaaS中的最佳实践