作者:郭建将_683 | 来源:互联网 | 2023-05-18 09:40
接上篇《BPM中常见子流程使用场景介绍(一:复用型、集成型)》,本文将对另外几种类型进行介绍。分别是“内嵌型”、“事务型”、“事件型”,本质上“事务型”与“事件型”也是属于内嵌型,但
接上篇《BPM中常见子流程使用场景介绍(一:复用型、集成型)》,本文将对另外几种类型进行介绍。分别是“内嵌型”、“事务型”、“事件型”, 本质上“事务型”与“事件型”也是属于内嵌型,但后两种类型在内嵌的特点之外扩展了其他的业务特性来支撑更加复杂的业务场景。内容如下:
内嵌型
“内嵌型子流程”通常也是为了进行复用,但与“复用型子流程”不同,“内嵌型子流程”是主流程中的一部分流程片段,并非独立的流程定义。“内嵌型子流程”一般包含如下特点:
流程图片段复用:在设计一些复杂人工流程时,可能会有上百个活动节点,流程图繁杂,连接线混乱交叉,可读性很差。而内嵌子流程就是将其中一部分可复用的片段组合到一个区域块中进行复用,支持子流程的展开与缩放,使流程图设计更加简洁明了。
流程灵活流转:运行时,“内嵌子流程”活动块里面的活动执行同外部活动执行方式一致(属于同一个流程实例),相对于“复用型子流程”的独立流程实例,可以方便的执行活动跳转、回退等操作以及任务列表查询。
内嵌型流程图示例:示例银行贷款授信审批类流程

1贷款审批流程:子流程未展开

2贷款审批流程:子流程展开
事务型
“事务型子流程”是一中特殊含义的“内嵌型子流程”通常称为“事务块”,除了具有内嵌子流程的特性外,其内部的活动还有“事务一致性”特点,即活动执行要么一起成功,要么一起失败。“事务型子流程”通常以如下方式来支持事务一致性保障:
Ÿ 异常定义、抛出:事务块中的活动节点中需要对可能抛出的异常进行定义,运行时发生异常后抛出异常事件。
Ÿ 异常捕获:在事务块活动上需要对块内异常进行捕获,并执行后续处理流转。
Ÿ 出错补偿:事务块内活动出错后,可以按顺序将块内已执行的活动进行出错补偿。
示例流程如下:

3手机充值流程
上图中,流程中的双实线区域内容就是“事务型子流程”即“事务块”。块中的三个自动服务“获取转账凭证”、“在线支付”、“手机账户加值”属于一个事务型交易,当出现异常时会抛出取消事件,取消事件会被事务块上的取消边界事件捕获,进行整个事务块中活动的补偿回滚操作。完成补偿后,执行后续流转,流程终止。
事件型
“事件型子流程”是一种特殊的子流程也可称为“支线流程”,属于主流程之外的独立支线主线和分支不用连线相连,支线在某些特定的情况下才触发执行。一般具有如下特点:
主线、支线独立:流程设计时,流程主线和支线之间活动独立,不存在连线流转。事件子流程的开始事件通常定义为消息捕获类型的事件。
事件触发支线:运行时,在主流程未结束的情况下,“事件性子流程”通过开始事件定义的触发规则触发执行,事件子流程执行不会产生新的流程实例,主流程中的活动实例与“事件子流程”中的活动实例本质属于同一个流程实例。
支线、主线共享数据:“事件子流程”支线触发时,支线同主线的关系也根据场景不同而不同。一般会有“并行执行”和“中断主线,执行支线”两种模式。支线流程执行过程中能够方便的同主线流程共享上下文数据。
示例流程如下:

4订单新建和取消流程
上图的流程为典型的事件型子流程场景,主流程完成订单创建后进行后续处理过程中,如果此时用户发起了取消订单请求,那么支线的取消订单流程将执行,最终终止主流程执行。
总结:
综上所述,子流程的使用场景有很多,可能还有其他场景我没有接触到,欢迎大家提供更多需求场景以及对上述场景说明的一些意见一起讨论。