(八)Activiti之流程变量和局部流程变量
一、流程变量
1.1 概念
- 如果,当流程走到"学生请假"这个任务节点的时候,此时可以用TaskService设置流程变量,变量值包含请假人、请假时间、请假理由等信息,这些信息存在表act_ru_variable中,当"学生请假"这个任务节点完成之后,“班长审批”这个任务节点可以看到"学生请假"任务节点设置的所有流程变量值(请假人等信息),“班主任审批”这个任务节点也可以看到"学生请假"任务节点设置的所有流程变量值。 但是当整个流程走完的时候,运行时的表(以act_ru开头的表)数据清空,自然也就读取不到。
1.2 设置流程变量
- 本章案例是执行完学生请假流程中的 1.2 启动流程实例之后在执行,此时流程走到下图红圈这个任务节点,设置请假人信息。
/** * 设置流程变量数据 */ @Test public void setVariableValues(){ TaskService taskService=processEngine.getTaskService(); // 任务Service String taskId="15004"; taskService.setVariable(taskId, "days", 2); taskService.setVariable(taskId, "date", new Date()); taskService.setVariable(taskId, "reason", "发烧"); Student student=new Student(); student.setId(1); student.setName("张三"); taskService.setVariable(taskId, "student", student); // 存序列化对象 }
- taskId="15004"; 是由“学生请假”这个任务节点的id
- 注意:Student 必须序列化。
- 结果如下图,说明流程变量的值已经存入表中:
1.3 获取流程变量
- 上述步骤在“学生请假”任务节点设置流程变量之后,接着运行学生请假流程中的 1.4 张三完成学生请假任务,即流程走到下图,获取流程变量值。
/** * 获取流程变量数据 */ @Test public void getVariableValues(){ TaskService taskService=processEngine.getTaskService(); // 任务Service String taskId="20002"; Integer days=(Integer) taskService.getVariable(taskId, "days"); Date date=(Date) taskService.getVariable(taskId, "date"); String reason=(String) taskService.getVariable(taskId, "reason"); Student student=(Student) taskService.getVariable(taskId, "student"); System.out.println("请假天数:"+days); System.out.println("请假日期:"+date); System.out.println("请假原因:"+reason); System.out.println("请假对象:"+student.getId()+","+student.getName()); }
-
taskId="20002"; 20002是“班长审批”任务的id
- 结果如下图,成功获取到流程变量。
1.4 另一种方法(将数据存在map中)设置流程变量
/** * 设置流程变量数据 */ @Test public void setVariableValues2(){ TaskService taskService=processEngine.getTaskService(); // 任务Service String taskId="15004"; Student student=new Student(); student.setId(1); student.setName("张三"); Map<String, Object> variables=new HashMap<String,Object>(); variables.put("days", 2); variables.put("date", new Date()); variables.put("reason", "发烧"); variables.put("student", student); taskService.setVariables(taskId, variables); }
/** * 获取流程变量数据 */ @Test public void getVariableValues2(){ TaskService taskService=processEngine.getTaskService(); // 任务Service String taskId="20002"; Map<String,Object> variables=taskService.getVariables(taskId); Integer days=(Integer) variables.get("days"); Date date=(Date) variables.get("date"); String reason=(String) variables.get("reason"); Student student=(Student)variables.get("student"); System.out.println("请假天数:"+days); System.out.println("请假日期:"+date); System.out.println("请假原因:"+reason); System.out.println("请假对象:"+student.getId()+","+student.getName()); }
二、流程局部变量
- 局部流程变量只能在该任务节点中设置和获取。如下图,“学生请假”任务节点设置的流程局部变量只能在该“学生请假”节点获取,“班长审批”节点或者"班主任审批"节点获取就为空。
- 设置局部流程变量
TaskService taskService=processEngine.getTaskService(); // 任务Service String taskId="72504"; taskService.setVariableLocal(taskId,"date", new Date());
- 获取局部流程变量
TaskService taskService=processEngine.getTaskService(); // 任务Service String taskId="80002"; Date date=(Date) taskService.getVariableLocal(taskId, "date");