1. 程式人生 > >【Activiti】跳轉到工作流的任意節點(本例用跳轉到上一節點講解即流程回退)

【Activiti】跳轉到工作流的任意節點(本例用跳轉到上一節點講解即流程回退)

所有用到的service以及實現類都是工作流(Activiti)本身的。

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<ExecutionEntity>{ 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方法就可以實現所有流程節點的跳轉。