您的位置:首页 > 其它

【Activiti】跳转到工作流的任意节点(本例用跳转到上一节点讲解即流程回退)

2017-01-03 10:19 591 查看
所有用到的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方法就可以实现所有流程节点的跳转。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  activiti 工作流