activiti工作流獲取下一節點例項
阿新 • • 發佈:2019-02-05
第一個方法getTaskDefinitionList用於包裝下面兩個方法:
/** * * @author: Longjun * @Description: 根據例項編號獲取下一個任務節點例項集合 * @date:2016年3月18日 下午4:33:36 * @param sessionId是執行緒的sessionId;isNeedTransaction表示是否需要事務;procInstId流程例項ID */ public List<TaskDefinition> getTaskDefinitionList(String procInstId,String sessionId,boolean isNeedTransaction){ ProcessEngine processEngine = WorkFlowService.getProcessEngine(sessionId, isNeedTransaction); HistoryService historyService = processEngine.getHistoryService(); RepositoryService repositoryService = processEngine.getRepositoryService(); RuntimeService runtimeService = processEngine.getRuntimeService(); List<TaskDefinition> taskDefinitionList = new ArrayList<TaskDefinition>(); //流程標示 String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInstId).singleResult().getProcessDefinitionId(); ProcessDefinitionEntity pde = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId); //ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl)repositoryService).getDeployedProcessDefinition(processDefinitionId); //執行例項 ExecutionEntity execution = (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(procInstId).singleResult(); //當前例項的執行到哪個節點 String activitiId = execution.getActivityId(); //獲得當前任務的所有節點 List<ActivityImpl> activitiList = pde.getActivities(); String id = null; for(ActivityImpl activityImpl:activitiList){ id = activityImpl.getId(); if(activitiId.equals(id)){ logger.debug("當前任務:"+activityImpl.getProperty("name")); taskDefinitionList = nextTaskDefinition(activityImpl, activityImpl.getId()); } } return taskDefinitionList; }
第二個方法nextTaskDefinition獲取所有下一節點集合:
/** * * @author: Longjun * @Description: 獲取所有下一節點 * @date:2016年3月18日 下午4:33:24 */ private List<TaskDefinition> nextTaskDefinition(ActivityImpl activityImpl, String activityId){ List<TaskDefinition> taskDefinitionList = new ArrayList<TaskDefinition>();//所有的任務例項 List<TaskDefinition> nextTaskDefinition = new ArrayList<TaskDefinition>();//逐個獲取的任務例項 TaskDefinition taskDefinition = null; if("userTask".equals(activityImpl.getProperty("type")) && !activityId.equals(activityImpl.getId())){ taskDefinition = ((UserTaskActivityBehavior)activityImpl.getActivityBehavior()).getTaskDefinition(); taskDefinitionList.add(taskDefinition); }else{ List<PvmTransition> outTransitions = activityImpl.getOutgoingTransitions(); List<PvmTransition> outTransitionsTemp = null; for(PvmTransition tr:outTransitions){ PvmActivity ac = tr.getDestination(); //獲取線路的終點節點 //如果是互斥閘道器或者是並行閘道器 if("exclusiveGateway".equals(ac.getProperty("type"))||"parallelGateway".equals(ac.getProperty("type"))){ outTransitionsTemp = ac.getOutgoingTransitions(); if(outTransitionsTemp.size() == 1){ nextTaskDefinition = nextTaskDefinition((ActivityImpl)outTransitionsTemp.get(0).getDestination(), activityId); taskDefinitionList.addAll(nextTaskDefinition); }else if(outTransitionsTemp.size() > 1){ for(PvmTransition tr1 : outTransitionsTemp){ nextTaskDefinition = nextTaskDefinition((ActivityImpl)tr1.getDestination(), activityId); taskDefinitionList.addAll(nextTaskDefinition); } } }else if("userTask".equals(ac.getProperty("type"))){ taskDefinition = ((UserTaskActivityBehavior)((ActivityImpl)ac).getActivityBehavior()).getTaskDefinition(); taskDefinitionList.add(taskDefinition); }else{ logger.debug((String) ac.getProperty("type")); } } } return taskDefinitionList; }
第三個方法nextTaskDefinition根據連線條件conditionText(類似${iscorrect==1})獲取下一個節點:
/** * * @author: Longjun * @Description: 根據連線條件conditionText(類似${iscorrect==1})獲取下一個節點,此方法以後會用 * @date:2016年3月18日 下午4:33:24 * @param elString是類似${iscorrect==1}的連線條件 */ @SuppressWarnings("unused") private List<TaskDefinition> nextTaskDefinition(ActivityImpl activityImpl, String activityId, String elString){ List<TaskDefinition> taskDefinitionList = new ArrayList<TaskDefinition>();//所有的任務例項 List<TaskDefinition> nextTaskDefinition = new ArrayList<TaskDefinition>();//逐個獲取的任務例項 TaskDefinition taskDefinition = null; if("userTask".equals(activityImpl.getProperty("type")) && !activityId.equals(activityImpl.getId())){ taskDefinition = ((UserTaskActivityBehavior)activityImpl.getActivityBehavior()).getTaskDefinition(); taskDefinitionList.add(taskDefinition); }else{ List<PvmTransition> outTransitions = activityImpl.getOutgoingTransitions(); List<PvmTransition> outTransitionsTemp = null; for(PvmTransition tr:outTransitions){ PvmActivity ac = tr.getDestination(); //獲取線路的終點節點 //如果是互斥閘道器或者是並行閘道器 if("exclusiveGateway".equals(ac.getProperty("type"))||"parallelGateway".equals(ac.getProperty("type"))){ outTransitionsTemp = ac.getOutgoingTransitions(); if(outTransitionsTemp.size() == 1){ nextTaskDefinition = nextTaskDefinition((ActivityImpl)outTransitionsTemp.get(0).getDestination(), activityId,elString); taskDefinitionList.addAll(nextTaskDefinition); }else if(outTransitionsTemp.size() > 1){ for(PvmTransition tr1 : outTransitionsTemp){ Object s = tr1.getProperty("conditionText"); if(elString.equals(StringUtils.trim(s.toString()))){ nextTaskDefinition = nextTaskDefinition((ActivityImpl)tr1.getDestination(), activityId,elString); taskDefinitionList.addAll(nextTaskDefinition); } } } }else if("userTask".equals(ac.getProperty("type"))){ taskDefinition = ((UserTaskActivityBehavior)((ActivityImpl)ac).getActivityBehavior()).getTaskDefinition(); taskDefinitionList.add(taskDefinition); }else{ logger.debug((String) ac.getProperty("type")); } } } return taskDefinitionList; }