有时,流程定义可能并不唯一(公司同时使用了多个流程),所以需要 查询流程定义信息:
/** * 查询流程定义信息 **/ 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("================================="); } } }