流程实例执行的过程中,不免会产生异常情况,这些异常情况包括了超时、资源不可用、外 部环境变化等,异常导致流程实例/活动执行的价值减少甚至浪费,在这种情况下,就涉及到流 程实例/活动执行的取消。
取消和强制完成模式共有5种,如图A-41所示。
图A-41 取消和强制完成模式
- 取消活动:取消流程实例中某一活动的执行。
- 取消流程实例:取消整个流程实例的执行。
- 取消区域:取消某一区域里所有正在执行的活动。
- 取消多实例活动:取消流程实例中某一多实例活动的执行。
- 强制完成多实例活动:强制完成流程实例中某一多实例活动的执行,强制流程向后流转。
取消活动(WCP_19: Cancel Task)
描述
取消一个已激活的活动,如果已经开始执行,那么停止执行,并且可能的话,移除正在运行 的工作项。
如图A-42所示,工程招标预审流程,招标公司进行资格的预审,需要两位评委完成评审评审 才结束,评审结果里只要有一个不通过则预审不通过。剩下一位评委的评审活动被取消。
图A-42 取消活动
取消流程实例(WCP_20: Cancel Case)
描述
取消一个正在执行中的流程实例。该流程实例被标识为未成功完成。
如图A-43所示,订单处理过程中顾客突然取消订单,那么停止该流程实例的执行。我们使用 终止结束事件结束流程实例。
图A-43 取消流程实例
取消区域(WCP_25: Cancel Region)
描述
一系统的活动建模成一个区域,流程实例执行时,可以对整个区域进行取消,区域中正在执 行或处于激活状态的活动被取消。这些活动可以位于不同分支上并互不连接。
如图A-44所示,双十一期间,很多商家处理订单的过程中发现缺货,于是取消整个订单处理 的子流程,给顾客发送消息通知。
图A-44 取消区域
取消多实例活动(WCP_26: Cancel Multiple Instance Activity)
描述
在一个流程实例里,可以对多实例活动进行取消:未完成的工作项被取消,已经完成的工作 项不受影响。
如图A-45所示,领导可以在发文传阅过程中取消发文,此时阅读文件的工作被取消,已经阅 读过的不受影响。
图A-45 取消多实例活动
强制完成多实例活动(WCP_27: Complete Multiple Instance Activity)
描述
在一个流程实例里,可以对多实例活动强制完成:未完成的工作项被取消,已经完成的工作 项不受影响,后续活动被触发。
如图A-46所示,领导要求科室负责人在当天完成文件的传阅,第二天早上进行正式发文,此 时阅读文件的工作被取消,已经阅读过的不受影响。
图A-46 强制完成多实例活动
小结
取消流程实例/活动经常与工作流异常相关,此时执行过的工作已经产生了一定的影响,为 了使流程实例能够继续执行(或通过其他路径继续执行)或正常停止,往往需要对已执行工作所 产生的影响进行消除,这就需要通过恢复动作(回滚与业务补偿)完成,我们将在附录D工作流 异常模式里详细讨论这些情况。