判斷流程例項狀態、歷史流程例項查詢、歷史活動查詢
判斷流程例項狀態、歷史流程例項查詢、歷史活動查詢
標籤(空格分隔): activiti
1.判斷流程例項狀態
下面是一個示例程式碼:
/**
* 獲取預設流程引擎例項,會自動讀取activiti.cfg.xml文字
*/
private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
/** * 部署流程定義 */ @Test public void deploy(){ Deployment deployment=processEngine.getRepositoryService()//獲取部署相關Service .createDeployment() //建立部署物件 .addClasspathResource("diagrams/HelloWorld.bpmn") //載入資原始檔 .addClasspathResource("diagrams/HelloWorld.png") .name("HelloWorld流程") .deploy(); //部署 System.out.println("流程部署ID:"+deployment.getId()); System.out.println("流程部署Name:"+deployment.getName()); }
上述程式碼首先部署了流程,接下來啟動流程例項:
@Test
public void start() {
ProcessInstance pi=processEngine.getRuntimeService()//執行時Service
.startProcessInstanceByKey(“myFirstProcess”);//流程定義表的KEY欄位
System.out.println(“流程例項ID:”+pi.getId());
System.out.println(“流程定義ID:”+pi.getProcessDefinitionId());
}
啟動後可得到這個啟動的流程的流程例項ID,最後就是我們本次討論的查詢流程例項狀態: /** * 查詢流程例項狀態 * */ @Test public void processState(){ ProcessInstance pi=processEngine.getRuntimeService() //獲取執行時service .createProcessInstanceQuery() //建立流程例項查詢 .processInstanceId("37501") //用流程例項id查詢 .singleResult(); if(pi != null){ System.out.println("流程正在執行!"); } else{ System.out.println("流程已經結束!"); } }
通過查詢流程例項ID來查詢對應的流程例項,如果流程例項不為空,則說明流程正在執行,如果流程例項為空,說明流程已經結束,和流程結束後,所有執行時的表都被清空有關。
2.歷史流程例項(任務)查詢
/**
* 查詢歷史任務
*
*/
@Test
public void historyTaskList(){
List list=processEngine.getHistoryService() //歷史相關service
.createHistoricTaskInstanceQuery() //建立歷史任務例項查詢
.processInstanceId(“12504”) //用流程例項id查詢
.finished() //查詢已經完成的任務
.list();
for(HistoricTaskInstance hti:list){
System.out.println("任務ID:"+hti.getId());
System.out.println("流程例項ID:"+hti.getProcessInstanceId());
System.out.println("任務名稱:"+hti.getName());
System.out.println("辦理人:"+hti.getAssignee());
System.out.println("開始時間:"+hti.getStartTime());
System.out.println("結束時間:"+hti.getEndTime());
}
}
上述程式碼查詢流程的所有任務資訊。
3。歷史活動查詢
程式碼如下:
/**
* 歷史活動查詢
*
*/
@Test
public void historyActInstanceList(){
List list=processEngine.getHistoryService() //歷史相關service
.createHistoricActivityInstanceQuery() //建立歷史活動例項查詢
.processInstanceId(“12504”) //用流程例項id查詢
.finished() //查詢已經完成的任務
.list();
for(HistoricActivityInstance hai:list){
System.out.println("活動ID:"+hai.getId());
System.out.println("流程例項ID:"+hai.getProcessInstanceId());
System.out.println("活動名稱:"+hai.getActivityName());
System.out.println("辦理人:"+hai.getAssignee());
System.out.println("開始時間:"+hai.getStartTime());
System.out.println("結束時間:"+hai.getEndTime());
}
}
活動包括任務,還包括start,end這兩個節點,所以輸出內容更多。
這幾個工作流的查詢介面都是去工作流表中進行查詢的。