BPMN2是Business Process Model and Notation 2.0的缩写,是一种用于业务流程建模和定义的标准化符号和语法,由OMG(Object Management Group)制定和维护。
BPMN2提供了一套标准化的符号和语法,用于描述业务流程中的各个元素,包括流程、任务、网关、事件等,并且可以通过流程引擎执行,是业务人员和IT人员共享的通用流程描述语言。
BPMN2的主要目的是为了实现业务流程的标准化建模和定义,帮助企业梳理和优化业务流程,提高工作效率和质量。
BPM 8.0支持BPMN2.0的标准。
本节包括以下主题:
# 事件
# 开始和结束事件
开始事件
开始事件定义流程或子流程的开始位置。
FlowPortal 8.0支持以下类型的开始事件:
空白开始事件,一般用在常规流程和子流程的开始位置。
消息开始事件,见消息事件。
定时开始事件,见定时器事件。
条件开始事件,见条件事件。
信号开始事件,见信号事件。
结束事件
结束事件定义流程或子流程的结束位置。
FlowPortal 8.0支持以下类型的结束事件:
空白结束事件,一般用在常规流程和子流程的结束位置。
消息结束事件,见消息事件。
升级结束事件,见升级事件。
错误结束事件,见错误事件。
补偿结束事件,见补偿结束。
信号结束事件,见信号事件。
终止结束事件,见终止事件。
# 信号事件
信号事件是引用命名信号的事件。信号是全局范围的事件,并被传递给所有活动的流程。
信号事件被捕获后不会被消耗,比如有两个节点的信号边界事件捕获相同的信号事件,则这两个边界事件都会被触发,即使它们是不同流程实例的一部分。
信号开始事件
信号开始事件可用于使用命名信号启动流程实例。
当多个流程定义具有相同信号名称的信号开始事件时,抛出的信号可以启动多个流程实例。
信号开始事件会捕获由信号中间抛出事件或信号结束事件抛出的信号。
为信号开始事件命名:
信号中间捕获事件
当流程到达信号中间捕获事件节点时,它将在那里等待,直到捕获到对应名称的信号。
信号边界事件
当流程到达信号边界事件所附加的流程节点时,信号边界事件将捕获对应名称的信号。
如果流程在此节点时,没有捕获到相应的信号,流程继续往下执行。若捕获到相应的信号,则流程沿着信号边界事件路径执行。
信号边界事件分为中断和非中断:
- 中断边界事件:中断是默认值,原活动被中断,流程沿着边界事件路径继续执行。
- 非中断边界事件:不中断事件不中断原来的活动,并且,会创建一个额外的执行路径,并沿着边界路径执行。 只要附加到的活动处于活动状态,就可以多次触发非中断条件事件。
注意:
1、如果流程已经执行过拥有信号边界事件的节点,此时有相应的信号抛出,此节点的信号边界事件是不能捕获到的。
2、如果信号边界事件是在子流程上,如果子流程已结束,此时有相应的信号抛出,子流程上的信号边界事件也是不能捕获到的。
信号中间抛出事件
当流程到达信号中间抛出事件节点时,它抛出的信号将被传播到所有流程,被所有对应名称的信号事件所捕获。
注意:信号中间抛出事件,抛出信号后,流程继续往下执行,不停留在信号抛出事件节点。
信号结束事件
信号结束事件为定义的信号引发信号事件,当前执行路径结束。它与信号中间抛出事件具有相同的行为。
注意:如果信号结束事件在子流程中或者并行的分支上,仅仅结束子流程或当前路径,不结束整个流程。
小结:
可以捕获信号的事件:信号开始事件、信号边界事件、信号中间捕获事件。
可以抛出信号的事件:信号中间抛出事件、信号结束事件。
抛出事件抛出的信号,会传播到所有流程,符合条件的流程都将捕获到相应的信号。
应用场景示例:
# 消息事件
消息事件是引用命名消息的事件。与信号不同,消息事件总是针对单个接收者。
消息开始事件
消息开始事件可用于使用命名消息启动流程实例。
消息启动事件的名称在所有部署的流程定义中必须是唯一的。
为消息开始事件命名:
消息中间捕获事件
当流程到达消息中间捕获事件节点时,它将在那里等待,直到捕获到正确名称的消息。
消息边界事件
当流程到达消息边界事件所附加的流程节点时,消息边界事件将捕获对应名称的消息。
如果流程在此节点时,没有捕获到相应的消息,流程继续往下执行。若捕获到相应的消息,则流程沿着消息边界事件路径执行。
消息边界事件分为中断和非中断:
- 中断边界事件:中断是默认值,原活动被中断,流程沿着边界事件路径继续执行。
- 非中断边界事件:不中断事件不中断原来的活动,并且,会创建一个额外的执行路径,并沿着边界路径执行。
只要附加到的活动处于活动状态,就可以多次触发非中断条件事件。
注意:
1、如果流程已经执行过拥有消息边界事件的节点,此时有相应的消息抛出,此节点的消息边界事件是不能捕获到的。
2、如果消息边界事件是在子流程上,如果子流程已结束,此时有相应的信号抛出,子流程上的消息边界事件也是不能捕获到的。
消息中间抛出事件 当流程到达消息中间抛出事件节点时,会抛出的具有命名的消息事件,会被对应名称的消息事件所捕获。
注意:消息中间抛出事件,抛出信号后,流程继续往下执行,不停留在消息抛出事件节点。
消息结束事件
当流程执行到达消息结束事件时,当前执行路径结束并抛出消息。消息结束事件与消息中间抛出事件具有相同的行为。
注意:如果消息结束事件在子流程中或者并行的分支上,仅仅结束子流程或当前路径,不结束整个流程。
小结:
可以捕获消息的事件:消息开始事件、消息边界事件、消息中间捕获事件。
可以抛出消息的事件:消息中间抛出事件、消息结束事件。
抛出事件抛出的消息,会被正在活动流程的消息中间捕获事件,消息边界事件和具有消息开始事件的流程所捕获。
消息抛出事件会传播到所有流程, 由于消息事件总是针对单个接收者,所以只会有一个符合条件的消息捕获事件到相应的消息或没有符合条件的消息捕获事件。
应用场景示例:
# 升级事件
升级事件是引用命名升级的事件。它们主要用于从子流程到父流程的通信。
升级开始事件
升级开始事件只能用于触发事件子流程,不能用于启动流程实例。
注意:具有升级开始事件的事件子流程由发生在相同范围或更低范围(例如,子流程)中的升级事件触发。
为升级开始事件命名:
升级边界事件
升级边界事件,捕获在定义它的活动范围内引发的升级。
升级边界事件只能附加在子流程,因为升级只能由升级中间抛出事件或升级结束事件引发。
升级边界事件分为中断和非中断:
- 中断边界事件:中断是默认值,原活动被中断,流程沿着边界事件路径继续执行。
- 非中断边界事件:不中断事件不中断原来的活动,并且,会创建一个额外的执行路径,并沿着边界路径执行。
只要附加到的活动处于活动状态,就可以多次触发非中断条件事件。
升级中间抛出事件
当流程执行到达升级中间抛出事件时,会抛出一个具有命名的升级。这种升级可以被升级边界事件或具有升级开始事件的事件子流程捕获。
注意:升级中间抛出事件,抛出升级后,若没有被捕获,流程将继续往下执行,不停留在升级抛出事件节点。若被捕获,则沿着捕获升级事件的路径执行,结束原有路径。
升级结束事件
当流程执行到达升级结束事件时,当前执行路径将结束并抛出命名升级。它具有与升级中间抛出事件相同的行为。
注意:如果升级结束事件在子流程中或者并行的分支上,仅仅结束子流程或当前路径,不结束整个流程。
小结:
可以捕获升级的事件:升级开始事件、升级边界事件。
可以抛出升级的事件:升级中间抛出事件、升级结束事件。
抛出事件抛出的升级,会传递到当前流程范围内的升级边界事件和具有升级开始事件的事件子流程,不会传播到当前流程之外。
应用场景示例:
# 取消和补偿事件
在BPMN2.0中对于已经完成的活动,可以使用补偿机制,而对于一些正在进行的活动,不能使用补偿机制,而使用取消机制。
取消事件一般与补偿事件配合使用。
取消结束事件
取消结束事件只能与事务子流程结合使用。当达到取消结束事件时,将引发取消事件,该事件必须被取消边界事件捕获。
取消边界事件
当取消边界事件被触发时,它首先中断当前作用域内的所有活动执行。接下来,它开始对事务范围内所有活动的补偿边界事件进行补偿。
补偿是同步进行的,即边界事件在补偿完成之前等待,然后离开事务。当补偿完成时,事务子流程将使用取消边界事件的路径继续执行。
注意:事务子流程只允许一个取消边界事件。
如果事务子流程包含嵌套子流程,则仅对已成功完成的子流程触发补偿。
补偿中间抛出事件
可以使用中间投掷补偿事件来触发补偿。
补偿中间抛出事件具有一个特殊的属性:特定活动。用于指定补偿哪个边界事件,特定活动是补偿边界事件属性上的活动编号。
多个补偿中间抛出事件,可以根据特定活动,来指定触发补偿的顺序。
补偿结束事件
当流程执行到达补偿结束事件时,当前执行路径结束并触发补偿。它具有与补偿中间投掷事件相同的行为。
补偿边界事件
可用于将补偿处理程序附加到流程节点或嵌入式子流程。
补偿边界事件与其他边界事件具有不同的激活策略。其他边界事件,例如信号边界事件,在它们附加到的活动进行时才会被激活。
当活动离开或未到达时,不会被激活。补偿边界事件不同,当附加到的活动成功完成时,才会激活补偿边界事件。
注意:当补偿被触发时,与补偿边界事件关联的补偿处理程序被调用的次数与它附加到的活动成功完成的次数相同。
补偿开始事件
补偿开始事件只能用于触发事件子流程,它不能用于启动流程实例。这种事件子流程称为补偿事件子流程。
小结:
可以捕获取消的事件:取消边界事件。
可以抛出取消的事件:取消结束事件。
可以触发补偿的事件:补偿开始事件、补偿边界事件。
可以抛出补偿的事件:补偿中间抛出事件、补偿结束事件、取消结束事件。
取消事件会触发事物子流程内的补偿,补偿已完成的活动,然后沿取消边界事件路径执行。
补偿中间抛出事件和补偿结束事件会触发流程范围内的补偿开始事件子流程和已完成的补偿活动。
补偿边界事件和补偿开始事件子流程具有相似的意图,二者选其一即可。
# 错误事件
错误事件是由定义的错误触发的事件。
错误开始事件
错误启动事件只能用于触发事件子流程 - 它不能用于启动流程实例。错误开始事件总是中断。
错误开始事件会捕获由错误结束事件引发的错误。
为错误开始事件命名:
错误边界事件
错误由错误结束事件引发。这样的错误将向上传播其父作用域,直到找到定义了与错误事件定义匹配的错误边界事件的作用域。
当捕获到错误事件时,定义边界事件的活动被销毁,同时销毁其中的所有当前执行(例如,并发活动、嵌套子流程等)。流程沿边界事件路径继续执行。
错误结束事件
当流程执行到达错误结束事件时,当前执行路径结束并抛出错误。错误由错误开始事件和错误边界事件捕获。
如果没有找到匹配的错误捕获事件,则执行语义默认为无结束事件语义。
小结: 可以捕获错误的事件:错误开始事件、错误边界事件。
可以抛错误的事件:升错误结束事件。
# 定时器事件
定时器事件是由定义的定时器触发的事件。它们可以用作开始事件、中间事件或边界事件。边界事件可以中断也可以不中断。
定时开始事件
计时器启动事件用于在给定时间创建流程实例。它既可用于仅启动一次的流程,也可用于以特定时间间隔启动的流程。
为定时开始事件设置启动频率:
定时边界事件
计时器边界事件充当秒表和闹钟。当执行到达边界事件所附加到的活动时,将启动一个计时器。当定时器触发时(例如,在指定的时间间隔之后),活动被中断,并且沿着定时边界事件路径继续执行。
定时边界事件分为中断和非中断:
- 中断边界事件:中断是默认值,原活动被中断,流程沿着边界事件路径继续执行。
- 非中断边界事件:不中断事件不中断原来的活动,并且,会创建一个额外的执行路径,并沿着边界路径执行。
只要附加到的活动处于活动状态,就可以多次触发非中断条件事件。
定时中间捕获事件
计时器中间捕获事件充当秒表。当执行到达捕获事件活动时,将启动计时器。当定时器触发时(例如,在指定的时间间隔之后),沿着定时中间捕获事件后续路径继续执行。
小结:
定时边界事件和定时中间捕获事件,充当秒表和闹钟。定时开始事件定义启动流程的时间和频率。
应用场景示例:
# 条件事件
条件事件定义了一个在给定条件被评估为真时触发的事件。它可以作为事件子流程的开始事件,作为中间事件和边界事件。开始和边界事件可以是中断的和非中断的。
条件开始事件
条件开始事件可用于通过评估某些条件来启动流程。
条件开始事件的条件在所有部署的流程定义中必须是唯一的。
为条件开始事件设置条件:
条件边界事件
条件边界事件就像一个观察者,如果满足特定条件就会触发。
条件边界事件分为中断和非中断:
- 中断边界事件:中断是默认值,原活动被中断,流程沿着边界事件路径继续执行。
- 非中断边界事件:不中断事件不中断原来的活动,并且,会创建一个额外的执行路径,并沿着边界路径执行。
只要附加到的活动处于活动状态,就可以多次触发非中断条件事件。
条件中间捕获事件
中间条件事件就像等待条件为真。当执行到达捕获事件活动时,第一次评估条件。如果满足条件,则执行过程继续到下一个活动。如果不满足条件,则执行将停留在此活动中,直到满足条件为止。
小结:
条件开始事件、条件边界事件和条件中间捕获事件,都是等待条件为真才会触发。
应用场景示例:
# 链接事件
链接事件是一种特殊情况——它没有特殊的执行语义,但作为“GoTo”到同一流程模型中的另一个点。
链接中间抛出事件和链接中间捕获事件共同完成从一点到另一个点的“链接。根据链接名称成对匹配。
# 终止事件
与结束不同,结束仅仅是结束当前路径。终止事件结束它引发的完整范围和所有包含的内部范围。
如果您在流程中有并行流并且您希望立即结束同一范围内的所有活动,这将非常有用。
流程实例级别的终止事件终止整个实例。在子流程级别,当前范围和所有包含的流程实例将被终止。
# 网关
# 条件事件
条件网关用于对流程中的决策进行建模。
条件网关的每条连出线上均需要设置条件,但仅执行一条路径。
当多个条件为真时,仅执行第一个为真的路径。
条件网关允许设置缺省路径,当所有路径的条件都不为真时,执行缺省路径。
为条件网关设置条件:
# 分流合流网关
分流合流网关用于对流程中的并发和决策进行建模。
当需要并发建模时,网关每条连出线,不需要设置条件,所有路径同步执行。
当需要决策建模时,网关每条连出线,根据需要设置条件,条件为真和不设置条件的路径,都执行。与条件网关不同,分流合流网关用作决策建模时可执行多条路径。
分流合流网关也允许设置缺省路径,当所有路径的条件都不为真时,执行缺省路径。
分流合流节点成对出现和使用,合流一般是等待所有人处理完,继续往下走。
设置条件的线会有菱形标记,便于区分哪些路径设置了条件:
为分流合流网关设置条件:
# 事件网关
事件网关的每条线后面连接的是中间捕获事件。当流程执行到达事件网关时,网关的作用类似于等待状态。
事件网关后必须有两个或多个连接线。
以哪个事件先发生为准:比如信号事件和定时任务,如果信号事件在 10 分钟内发生,则取消计时器事件,并在收到信号后继续执行任务1。如果未触发信号,则触发计时器事件继续执行任务2,并取消信号事件。
事件网关后可连接:条件中间捕获事件、定时中间捕获事件、信号中间捕获事件、消息中间捕获事件。
# 子流程
子流程是包含其他活动、网关、事件等的活动,它本身形成一个流程,该流程是更大流程的一部分。子流程完全在父流程中定义(这就是为什么它通常被称为嵌入式子流程)。
一个子流程只能有一个空白开始事件,不允许有其他开始事件类型。
使用子流程的主要原因之一是为事件定义范围,在子流程执行期间抛出的事件可以被子流程边界上的边界事件捕获。
比如:为子流程定义消息边界事件,那么消息事件的范围就是子流程,因此只有在子流程处于活动状态时才能接收到消息。
# 事件子流程
事件子流程是由事件触发的子流程。可以在流程级别或任何子流程级别添加事件子流程。
用于触发事件子流程的事件是开始事件,因此,事件子流程不支持空白开始事件。
事件子流程可视为带有虚线轮廓的嵌入式子流程。
可以使用消息开始事件、错误开始事件、信号开始事件、计时器开始事件或补偿开始事件等事件来触发事件子流程。
事件子流程可以是中断的或非中断的。中断子流程会取消当前范围内的所有执行。
一个非中断事件子进程产生一个新的并发执行。中断只能触发一次中断事件子流程,非中断可以多次触发非中断事件子流程。
使用事件子流程的开始事件来配置事件子流程是中断还是非中断。
# 事务子流程
事务子流程是一个特殊的嵌入式子流程,除了具有内嵌子流程的特性外,其内的活动还有“事务一致性”特点,即活动执行要么一起成功,要么一起失败。
事务子流程通常以如下方式来支持事务一致性保障:
异常定义、抛出:事务块中的活动节点中需要对可能抛出的异常进行定义,运行时发生异常后抛出异常事件。
异常捕获:在事务块活动上需要对块内异常进行捕获,并执行后续处理流转。
出错补偿:事务块内活动出错后,可以按顺序将块内已执行的活动进行出错补偿。
# 调用子流程
调用子流程和嵌入式子流程的区别就是,调用子流程引用的一个外部的流程。调用子流程的主要使用场景是可以复用流程,被调用的流程可以被多个其他的流程实例调用。
当流程执行到达调用子流程时,会创建一个新流程实例,用于执行子流程。此时有两种可能的执行:
1、新创建的子流程和主流程并行执行,互不影响;
2、主流程实例一直等待,直到子流程完全结束,然后继续原来的流程。
流程引起支持两种执行,根据实际需要进行配置即可。