【Activity】ワークフローの任意のノードにジャンプします(この例では、前のノードにジャンプして説明するプロセスロールバックを使用します).
使用するサービスおよびインプリメンテーションクラスはすべてワークフロー(Activity)そのものです.
このJumpCmd法ですべてのフローノードのジャンプを実現できる.
public String taskRollback(String taskId){
// ID
HistoricTaskInstance hisTask = historyService
.createHistoricTaskInstanceQuery().taskId(taskId)
.singleResult();
//
ProcessInstance instance = runtimeService
.createProcessInstanceQuery()
.processInstanceId(hisTask.getProcessInstanceId())
.singleResult();
//
ProcessDefinitionEntity definition = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(hisTask.getProcessDefinitionId());
// Activity
ActivityImpl hisActivity = definition.findActivity(hisTask.getTaskDefinitionKey());
//
managementService.executeCommand(new JumpCmd(instance.getId(), hisActivity.getId()));
}
public class JumpCmd implements Command{
private String processInstanceId;
private String activityId;
public static final String REASION_DELETE = "deleted";
public JumpCmd(String processInstanceId, String activityId) {
this.processInstanceId = processInstanceId;
this.activityId = activityId;
}
@Override
public ExecutionEntity execute(CommandContext commandContext) {
ExecutionEntity executionEntity = commandContext.getExecutionEntityManager().findExecutionById(processInstanceId);
executionEntity.destroyScope(REASION_DELETE);
ProcessDefinitionImpl processDefinition = executionEntity.getProcessDefinition();
ActivityImpl activity = processDefinition.findActivity(activityId);
executionEntity.executeActivity(activity);
return executionEntity;
}
}
このJumpCmd法ですべてのフローノードのジャンプを実現できる.