获得最新版本的流程定义 /** * 查询最新坂本流程定义 */ @org.junit.Test public void queryLatestVersion() { // 查询流程定义按版本排序 List<ProcessDefinition> list = processEngine.getRepositoryService() .createProcessDefinitionQuery().orderByProcessDefinitionVersion().asc().list(); // 创建一个map用于存放最新版本的流程定义 Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>(); // 遍历流程定义集合 for (ProcessDefinition processDefinition : list) { map.put(processDefinition.getKey(), processDefinition); } // 遍历最新版本流程定义获得信息 for (ProcessDefinition processDefinition : map.values()) { System.out.println("id:" + processDefinition.getId()); System.out.println("name:" + processDefinition.getName()); System.out.println("key:" + processDefinition.getKey()); System.out.println("version:" + processDefinition.getVersion()); } }
查询流程状态 /** * 查询流程状态 */ @org.junit.Test public void processState() { // 流程实例 String pid = "47501"; // 通过流程实例id进行查询返回唯一结果 ProcessInstance singleResult = processEngine.getRuntimeService().createProcessInstanceQuery() .processInstanceId(pid).singleResult(); // 判断结果不为空 if (singleResult != null) { System.out.println("未完成"); System.out.println(singleResult.getActivityId()); } else { System.out.println("流程结束"); } }
查询历史任务 /** * 查询历史任务 */ @org.junit.Test public void getHistoryTasks() { // 历史任务办理人 String assignee = "张三"; // 通过历史任务办理人进行查询 List<HistoricTaskInstance> list = processEngine.getHistoryService() .createHistoricTaskInstanceQuery().taskAssignee(assignee).list(); // 遍历历史任务 for (HistoricTaskInstance historicTaskInstance : list) { // 任务id System.out.println(historicTaskInstance.getId()); // 任务办理人 System.out.println(historicTaskInstance.getAssignee()); // 任务名 System.out.println(historicTaskInstance.getName()); // 任务流程实例 System.out.println(historicTaskInstance.getProcessInstanceId()); } }
查询历史流程定义
/** * 查询历史流程实例 */ @org.junit.Test public void historyProcessInstance() { // 通过流程定义key进行查询 List<HistoricProcessInstance> list = processEngine.getHistoryService() .createHistoricProcessInstanceQuery().processDefinitionKey("helloWorld").list(); // 遍历结果集 for (HistoricProcessInstance historicProcessInstance : list) { System.out.println(historicProcessInstance.getId()); // 启动时间 System.out.println(historicProcessInstance.getStartTime()); // 结束时间 System.out.println(historicProcessInstance.getEndTime()); // 持续时间 System.out.println(historicProcessInstance.getDurationInMillis()); System.out.println(historicProcessInstance.getName()); System.out.println(historicProcessInstance.getProcessDefinitionKey()); } }
设置与获取流程变量
/** * 设置获取流程变量 */ @org.junit.Test public void setGetVariables() { String pi = "47501"; String person = "李四"; TaskService taskService = processEngine.getTaskService(); Task task = taskService.createTaskQuery().processInstanceId(pi).taskAssignee(person).singleResult(); String taskId = task.getId(); // 设置流程变量 taskService.setVariable(taskId, "审核意见", "同意"); taskService.setVariable(taskId, "备注", "路上注意安全"); /** * setVariable和setVariableLocal的区别 * setVariable:流程变量名称相同的时候,后一次的值替换前一次的值,而且可以看到TASK_ID的字段不会存放任务ID的值 * setVariableLocal:一个流程中存在2个活动节点,流程变量的名称相同,后一次的版本的值也不会替换前一次版本的值 * 使用setVariableLocal说明流程变量绑定了当前的任务,当流程继续执行时,下个任务获取不到这个流程变量 */ // 变量存在javaBean前提要让javaBean实现序列化 LeaveInfo leaveInfo = new LeaveInfo(); leaveInfo.setId("1"); leaveInfo.setLeaveMsg("test"); taskService.setVariable(taskId, "javaBean", leaveInfo); // 获取流程变量 String shyj = (String) taskService.getVariable(taskId, "审核意见"); String bz = (String) taskService.getVariable(taskId, "备注"); System.out.println(shyj); System.out.println(bz); // 同时要求流程变量对象的属性不能发生发生变化,否则抛出异常 LeaveInfo javaBean = (LeaveInfo) taskService.getVariable(taskId, "javaBean"); System.out.println(javaBean.getId()); System.out.println(javaBean.getLeaveMsg()); }RuntimeService对象可以设置流程变量和获取流程变量
TaskService对象可以设置流程变量和获取流程变量
流程实例启动的时候可以设置流程变量
任务办理完成的时候可以设置流程变量
流程变量可以通过名称/值的形式设置单个流程变量
流程变量可以通过名称/值的形式设置单个流程变量
Map集合的key表示流程变量的名称
Map集合的value表示流程变量的值