ACTIVITI相對於JBPM來說,比較年輕,用的人少,中文方面的資料更少,我根據網上到處找得資料以及看官方文檔總結出來了代碼,非常不容易啊。廢話不多說,直接上代碼吧:
首先是根據流程ID獲取當前任務:
List<Task> tasks = taskService.createTaskQuery().processInstanceId(procInstanceId).list();
然后根據當前任務獲取當前流程的流程定義,然后根據流程定義獲得所有的節點:
ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl)rs).getDeployedProcessDefinition(task.getProcessDefinitionId());
List<ActivityImpl> activitiList = def.getActivities(); //rs是指RepositoryService的實例
根據任務獲取當前流程執行ID,執行實例以及當前流程節點的ID:
String excId = task.getExecutionId();
ExecutionEntity execution = (ExecutionEntity) runtimeService.createExecutionQuery().executionId(excId).singleResult();
String activitiId = execution.getActivityId();
然后循環activitiList 並判斷出當前流程所處節點,然后得到當前節點實例,根據節點實例獲取所有從當前節點出發的路徑,然后根據路徑獲得下一個節點實例:
for(ActivityImpl activityImpl:activitiList){
String id = activityImpl.getId();
if(activitiId.equals(id)){
System.out.println("當前任務:"+activityImpl.getProperty("name")); //輸出某個節點的某種屬性
List<PvmTransition> outTransitions = activityImpl.getOutgoingTransitions();//獲取從某個節點出來的所有線路
for(PvmTransition tr:outTransitions){
PvmActivity ac = tr.getDestination(); //獲取線路的終點節點
System.out.println("下一步任務任務:"+ac.getProperty("name"));
}
break;
}
}
這就是獲取當前節點以及下一步路徑或節點的整個過程了