in core/src/main/java/com/alibaba/smart/framework/engine/service/command/impl/DefaultExecutionCommandService.java [181:216]
public ProcessInstance jumpFrom(ProcessInstance processInstance, String activityId, String executionInstanceId,
Map<String, Object> request) {
//NOTATION1:should markDone all active excutioninstances and activityinstances by hands.
PvmProcessDefinition pvmProcessDefinition = DefaultExecutionCommandService.this.processContainer
.getPvmProcessDefinition(
processInstance.getProcessDefinitionIdAndVersion());
ProcessDefinition processDefinition =
DefaultExecutionCommandService.this.processContainer.getProcessDefinition(
processInstance.getProcessDefinitionIdAndVersion());
//NOTATION2:executionInstance,activityInstance maybe set to null for jump case
ExecutionInstance executionInstance = null;
ActivityInstance activityInstance = null;
if (null != executionInstanceId) {
executionInstance = queryExecutionInstance(executionInstanceId);
//BE AWARE: 注意:针对 CUSTOM 场景,由于性能考虑,这里的activityInstance可能为空。调用的地方需要判空。
activityInstance = activityInstanceStorage.find(executionInstance.getActivityInstanceId(),
processEngineConfiguration);
}
ExecutionContext executionContext = this.instanceContextFactory.createSignalContext(request, processEngineConfiguration,
executionInstance, activityInstance, processInstance, processDefinition);
PvmActivity pvmActivity = pvmProcessDefinition.getActivities().get(activityId);
ProcessInstance newProcessInstance = this.pvmProcessInstance.jump(pvmActivity, executionContext);
//NOTATION3:executionInstance is set to null for jump case
CommonServiceHelper.createExecution(executionInstanceId, newProcessInstance, request,
processEngineConfiguration);
return newProcessInstance;
}