activiti如何獲取當前節點以及下一步路徑或節點(轉)


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;
}
}

這就是獲取當前節點以及下一步路徑或節點的整個過程了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM