in core/src/main/java/com/alibaba/smart/framework/engine/bpmn/behavior/event/EndEventBehavior.java [26:54]
public void leave(ExecutionContext context, PvmActivity pvmActivity) {
fireEvent(context,pvmActivity, EventConstant.ACTIVITY_END);
ProcessInstance processInstance = context.getProcessInstance();
processInstance.setStatus(InstanceStatus.completed);
processInstance.setCompleteTime(DateUtil.getCurrentDate());
Map<String, Object> request = context.getRequest();
if(null != request){
Object taskInstanceTag = request.get(RequestMapSpecialKeyConstant.TASK_INSTANCE_TAG);
//非标准特性 HARDCODE: processInstance的tag使用的是最后一个完成的任务的tag
if (taskInstanceTag != null) {
processInstance.setTag(taskInstanceTag.toString());
}
}
//==== 子流程结束,执行父流程 ====
//子流程结束时,才会进入到该环节里面来。需要找出父流程的执行实例id,然后继续执行父流程的后续节点。
String parentExecutionInstanceId = processInstance.getParentExecutionInstanceId();
if (null != parentExecutionInstanceId) {
//如果上下文中有父上下文,说明父子在同一线程中,父线程本身就会执行,所以不需要启动
if (null == context.getParent()) {
ExecutionCommandService executionCommandService =context.getProcessEngineConfiguration().getSmartEngine().getExecutionCommandService();
executionCommandService.signal(parentExecutionInstanceId,context.getRequest());
}
}
fireEvent(context, pvmActivity, EventConstant.PROCESS_END);
}