activiti根据当前节点获取下一个节点信息
生活随笔
收集整理的這篇文章主要介紹了
activiti根据当前节点获取下一个节点信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在流程中使用監聽器判斷當前節點是否需要經過,否則跳轉到下一個節點,如下圖
當提交申請之后,當前提交人為部門負責人,那么部門負責人節點就不需要走了,直接到下一個節點,但是下一個節點是什么并不知道,就可以使用下面的代碼獲取到下一個節點信息直接跳轉到下一個節點。
/*** 獲取當前流程的下一個節點* @param procInstanceId* @return*/public static String getNextNode(String procInstanceId){// 1、首先是根據流程ID獲取當前任務:List<Task> tasks = processEngine.getTaskService().createTaskQuery().processInstanceId(procInstanceId).list();String nextId = "";for (Task task : tasks) {RepositoryService rs = processEngine.getRepositoryService();// 2、然后根據當前任務獲取當前流程的流程定義,然后根據流程定義獲得所有的節點:ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) rs).getDeployedProcessDefinition(task.getProcessDefinitionId());List<ActivityImpl> activitiList = def.getActivities(); // rs是指RepositoryService的實例// 3、根據任務獲取當前流程執行ID,執行實例以及當前流程節點的ID:String excId = task.getExecutionId();RuntimeService runtimeService = processEngine.getRuntimeService();ExecutionEntity execution = (ExecutionEntity) runtimeService.createExecutionQuery().executionId(excId).singleResult();String activitiId = execution.getActivityId();// 4、然后循環activitiList// 并判斷出當前流程所處節點,然后得到當前節點實例,根據節點實例獲取所有從當前節點出發的路徑,然后根據路徑獲得下一個節點實例:for (ActivityImpl activityImpl : activitiList) {String id = activityImpl.getId();if (activitiId.equals(id)) {logger.debug("當前任務:" + activityImpl.getProperty("name")); // 輸出某個節點的某種屬性List<PvmTransition> outTransitions = activityImpl.getOutgoingTransitions();// 獲取從某個節點出來的所有線路for (PvmTransition tr : outTransitions) {PvmActivity ac = tr.getDestination(); // 獲取線路的終點節點logger.debug("下一步任務任務:" + ac.getProperty("name"));nextId = ac.getId();}break;}}}return nextId;}如果流程中存在很多GateWay請看下一遍博文activiti根據當前節點獲取下一個UseTask節點
總結
以上是生活随笔為你收集整理的activiti根据当前节点获取下一个节点信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven web项目保存log4j日志
- 下一篇: 桥水基金是干什么的