有時,流程定義可能並不唯一(公司同時使用了多個流程),所以需要 查詢流程定義信息:
/** * 查詢流程定義信息 **/ public class QueryProcessDefinition { public static void main(String[] args) { //1.創建ProcessEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.創建RepositoryService對象 RepositoryService repositoryService = processEngine.getRepositoryService(); //3.得到ProcessDefinitionQuery對象,可以認為它就是一個查詢器 ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery(); //4.設置條件,並查詢出當前的所有流程定義 查詢條件:流程定義的key=holiday //.orderByProcessDefinitionVersion() 設置排序方式,根據流程定義的版本號進行排序。 List<ProcessDefinition> list = processDefinitionQuery.processDefinitionKey("holiday") .orderByProcessDefinitionVersion() .desc().list(); //5.輸出流程定義信息 for (ProcessDefinition processDefinition : list) { System.out.println("流程定義ID" + processDefinition.getId()); System.out.println("流程定義名稱" + processDefinition.getName()); System.out.println("流程定義Key" + processDefinition.getKey()); System.out.println("流程定義的版本號" + processDefinition.getVersion()); } } }
存在多個流程,就肯定會遇到需要刪除流程定義的時候:
/** * 刪除已經部署的流程定義 * 影響的activiti表有哪些 * act_re_deployment 部署信息 * act_re_procdef 流程定義的一些信息 * act_ge_bytearray 流程定義的bpmn文件以及png文件 **/ public class DeleteProcessDefinition { public static void main(String[] args) { //1.創建ProcessEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.創建RepositoryService對象 RepositoryService repositoryService = processEngine.getRepositoryService(); //3.執行刪除流程定義,參數代表流程部署的id repositoryService.deleteDeployment("1"); } }
(注意:當有流程實例正在運行時,這種方法無法刪除該流程定義定義信息)
如果非要強制刪除,可以修改上面方法參數:
//參數true代表級聯刪除,此時就會先刪除沒有完成的流程節點,最后就可以刪除流程定義信息,false代表不級聯 repositoryService.deleteDeployment("1","true");
也有可能會有一個流程已經結束了,需要查看它的歷史信息的情況存在:
/** * 需求 * 歷史數據的查看 **/ public class HistoryQuery { public static void main(String[] args) throws IOException { //1.得到ProcessEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到HistoryService HistoryService historyService = processEngine.getHistoryService(); //3.得到HistoricActivitiInstanceQuery對象 HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery(); historicActivityInstanceQuery.processInstanceId("2501");//設置流程實例的id //4.執行查詢 List<HistoricActivityInstance> list = historicActivityInstanceQuery .orderByHistoricActivityInstanceStartTime() .asc()//根據流程開始進行的時間來排序 .list(); //5.遍歷查詢結果 for (HistoricActivityInstance instance : list) { System.out.println("節點ID:" + instance.getActivityId()); System.out.println("節點名稱:" + instance.getActivityName()); System.out.println("流程定義ID:" + instance.getProcessDefinitionId()); System.out.println("流程實例ID:" + instance.getProcessInstanceId()); System.out.println("================================="); } } }