flowable/activiti 如何退回上一个节点?

2021-03-30 19:59发布

3条回答
studentaaa
2021-04-04 09:19

//flowable/activiti 如何退回上一个节点?下面使用代码演示:


//退回上一个节点: public String rollBackWorkFlow(String taskId) {   this.taskService=processEngine.getTaskService();   this.historyService = processEngine.getHistoryService();   this.repositoryService = processEngine.getRepositoryService();   this.runtimeService = processEngine.getRuntimeService();     try {         Map variables;         // 取得当前任务.当前任务节点         HistoricTaskInstance currTask = historyService                 .createHistoricTaskInstanceQuery().taskId(taskId)                 .singleResult();         // 取得流程实例,流程实例         ProcessInstance instance = runtimeService                 .createProcessInstanceQuery()                 .processInstanceId(currTask.getProcessInstanceId())                 .singleResult();         if (instance == null) {          log.info("流程结束");             log.error("出错啦!流程已经结束");             return "ERROR";         }         variables = instance.getProcessVariables();         // 取得流程定义         ProcessDefinitionEntity definition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)                 .getDeployedProcessDefinition(currTask                         .getProcessDefinitionId());         if (definition == null) {          log.info("流程定义未找到");             log.error("出错啦!流程定义未找到");             return "ERROR";         }         // 取得上一步活动         ActivityImpl currActivity = ((ProcessDefinitionImpl) definition)                 .findActivity(currTask.getTaskDefinitionKey());         //也就是节点间的连线         List nextTransitionList = currActivity                 .getIncomingTransitions();         // 清除当前活动的出口         List oriPvmTransitionList = new ArrayList();         //新建一个节点连线关系集合         List pvmTransitionList = currActivity                 .getOutgoingTransitions();         //         for (PvmTransition pvmTransition : pvmTransitionList) {             oriPvmTransitionList.add(pvmTransition);         }         pvmTransitionList.clear();         // 建立新出口         List newTransitions = new ArrayList();         for (PvmTransition nextTransition : nextTransitionList) {             PvmActivity nextActivity = nextTransition.getSource();             ActivityImpl nextActivityImpl = ((ProcessDefinitionImpl) definition)                     .findActivity(nextActivity.getId());             TransitionImpl newTransition = currActivity                     .createOutgoingTransition();             newTransition.setDestination(nextActivityImpl);             newTransitions.add(newTransition);         }         // 完成任务         List tasks = taskService.createTaskQuery()                 .processInstanceId(instance.getId())                 .taskDefinitionKey(currTask.getTaskDefinitionKey()).list();         for (Task task : tasks) {             taskService.complete(task.getId(), variables);             historyService.deleteHistoricTaskInstance(task.getId());         }         // 恢复方向         for (TransitionImpl transitionImpl : newTransitions) {             currActivity.getOutgoingTransitions().remove(transitionImpl);         }         for (PvmTransition pvmTransition : oriPvmTransitionList) {             pvmTransitionList.add(pvmTransition);         }         log.info("OK");         log.info("流程结束");         return "SUCCESS";     } catch (Exception e) {      log.error("失败");         log.error(e.getMessage());         return "ERROR";     } } //回退到指定节点: public String rollBackToAssignWorkFlow(String taskId,String destTaskkey) {   this.taskService=processEngine.getTaskService();   this.historyService = processEngine.getHistoryService();   this.repositoryService = processEngine.getRepositoryService();   this.runtimeService = processEngine.getRuntimeService();     try {         Map variables;         // 取得当前任务.当前任务节点         HistoricTaskInstance currTask = historyService                 .createHistoricTaskInstanceQuery().taskId(taskId)                 .singleResult();         // 取得流程实例,流程实例         ProcessInstance instance = runtimeService                 .createProcessInstanceQuery()                 .processInstanceId(currTask.getProcessInstanceId())                 .singleResult();         if (instance == null) {          log.info("流程结束");             log.error("出错啦!流程已经结束");             return "ERROR";         }         variables = instance.getProcessVariables();         // 取得流程定义         ProcessDefinitionEntity definition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)                 .getDeployedProcessDefinition(currTask                         .getProcessDefinitionId());         if (definition == null) {          log.info("流程定义未找到");             log.error("出错啦!流程定义未找到");             return "ERROR";         }        //取得当前活动节点         ActivityImpl currActivity = ((ProcessDefinitionImpl) definition)                 .findActivity(currTask.getTaskDefinitionKey());          log.info("currActivity"+currActivity);          // 取得上一步活动         //也就是节点间的连线         //获取来源节点的关系         List nextTransitionList = currActivity.getIncomingTransitions();         // 清除当前活动的出口         List oriPvmTransitionList = new ArrayList();         //新建一个节点连线关系集合         //获取出口节点的关系         List pvmTransitionList = currActivity                 .getOutgoingTransitions();         //         for (PvmTransition pvmTransition : pvmTransitionList) {             oriPvmTransitionList.add(pvmTransition);         }         pvmTransitionList.clear();         // 建立新出口         List newTransitions = new ArrayList();         for (PvmTransition nextTransition : nextTransitionList) {             PvmActivity nextActivity = nextTransition.getSource();                         log.info("nextActivity"+nextActivity);                         log.info("nextActivity.getId()"+nextActivity.getId());                         //destTaskkey             ActivityImpl nextActivityImpl = ((ProcessDefinitionImpl) definition)                    // .findActivity(nextActivity.getId());               .findActivity(destTaskkey);             TransitionImpl newTransition = currActivity                     .createOutgoingTransition();             newTransition.setDestination(nextActivityImpl);             newTransitions.add(newTransition);         }         // 完成任务         List tasks = taskService.createTaskQuery()                 .processInstanceId(instance.getId())                 .taskDefinitionKey(currTask.getTaskDefinitionKey()).list();         for (Task task : tasks) {             taskService.complete(task.getId(), variables);             historyService.deleteHistoricTaskInstance(task.getId());         }         // 恢复方向         for (TransitionImpl transitionImpl : newTransitions) {             currActivity.getOutgoingTransitions().remove(transitionImpl);         }         for (PvmTransition pvmTransition : oriPvmTransitionList) {          pvmTransitionList.add(pvmTransition);         }         log.info("OK");         log.info("流程结束");         return "SUCCESS";     } catch (Exception e) {      log.error("失败");         log.error(e.getMessage());         return "ERROR";     } }  

一周热门 更多>