BPMN 2.0的新特性--Event Sub-Process(事件子流程)
事件子流程和一般子流程在图形表现上的区别是:事件子流程的边界是虚线。
事件子流程必须有一个(且只能有一个)Start Event,同时这个Start Event的触发类型不能为空(None),必须是以下7种触发类型或它们的组合:
补偿(Compensation),升级(Escalation),错误(Error),消息(Message),信号(Signal),条件(Conditional),定时(Timer)。
当事件子流程包含的Start Event被触发时,事件子流程就启动了。
事件子流程启动后,它的父流程是终止还是继续运行呢? 这是由事件子流程的Start Event是否标注为“中断”决定的。
如果Start Event标注为中断(Start Event表现为实线的圆圈,如上图中第二个事件子流程),则事件子流程启动后,父流程终止;
如果Start Event没有标注为中断(Start Event表现为虚线的圆圈,如上图中第一个事件子流程),则事件子流程启动后,父流程继续运行。
事件子流程中的Start Event只在父流程开始运行后才开始监听触发事件,在父流程结束时停止监听。如果父流程有监听相同触发事件的边界事件,则事件子流程优先于边界事件,即事件子流程先捕获到触发事件。
如下图,事件子流程和边界事件监听同一个错误。当错误发生时,事件子流程被触发,对应的边界事件不会被触发。事件子例程处理完后,流程从父流程的正常Sequence flow流出(即图中上面的flow):
事件子流程中也可以选择抛出捕获的事件或其他事件,从而触发父流程对应的边界事件。如下图,如果事件子流程选择抛出Error_1事件,父流程的边界事件将被触发,整个流程将在End_2结束,否则流程在End_1结束:
合拢的事件子流程在它的左上角显示内部Start Event标注。
事件子流程和包含它的父流程运行于同一个流程上下文(context),也就