流程变量在当前流程实例全局有效,属于全局变量;局部流程变量只在设置该流程变量的任务节点有效,属于局部变量。可参看java语言中的全局变量和局部变量。
一、流程变量作用:
(1)在流程进行的过程可以附带一些数据 (2)控制流程的走向
1、启动流程时设置变量
/**
* 启动流程设置流程变量
*/
@Test
public void startProcess() {
//1,得到启动流程的service
RuntimeService runtimeService = this.processEngine.getRuntimeService();
String processDefinitionKey="HelloWorld";
//ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);//启动的永远是最新版本的流程
Map variables=new HashMap();
variables.put("请假天数", 20);
variables.put("请假时间", new Date());
variables.put("请假原因", "回家相亲");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);
System.out.println("流程启动成功");
System.out.println("部署ID:"+processInstance.getDeploymentId());//指act_re_deployment的id
System.out.println("流程定义ID:"+processInstance.getProcessDefinitionId());//act_re_procdef里面的id
System.out.println("流程实例ID:"+processInstance.getId());//act_ru_execution这个表里面的id
}
2.使用执行实例ID时设置变量
@Test
public void setVariable1() {
//1,得到启动流程的service
RuntimeService runtimeService = this.processEngine.getRuntimeService();
String executionId="2505";
//runtimeService.setVariable(executionId, "aaa", 111.00);
Map variables=new HashMap();
variables.put("请假天数", 21);
variables.put("请假时间", new Date());
variables.put("请假原因", "回家相亲");
runtimeService.setVariables(executionId, variables);
System.out.println("流程变量设置成功");
}
3.使用任务ID时设置变量
@Test
public void setVariable2() {
TaskService taskService = this.processEngine.getTaskService();
String taskId="2508";
taskService.setVariable(taskId, "bbb", 111.00);
System.out.println("流程变量设置成功");
}
4.完成功任务时设置变量
@Test
public void setVariable3() {
TaskService taskService = this.processEngine.getTaskService();
String taskId="2508";
Map variables=new HashMap();
variables.put("请假天数", 22);
variables.put("请假时间", new Date());
variables.put("请假原因", "回家相亲");
taskService.complete(taskId, variables);
System.out.println("任务完成成功");
}
5.已知执行实例ID得到流程变量
/**
* 得到流程变量
*/
@Test
public void getVariable1() {
//1,得到启动流程的service
RuntimeService runtimeService = this.processEngine.getRuntimeService();
String executionId="2501";
Object date = runtimeService.getVariable(executionId, "请假天数");
System.out.println(date);
}
6.查询历史流程变量
/**
* 得到流程变量
*/
@Test
public void getVariable1() {
HistoryService historyService = this.processEngine.getHistoryService();
List list = historyService.createHistoricVariableInstanceQuery().executionId(executionId).list();
for (HistoricVariableInstance hvi : list) {
System.out.println("变量ID:"+hvi.getId());
System.out.println("变量类型:"+hvi.getVariableTypeName());
System.out.println("变量名称:"+hvi.getVariableName());
System.out.println("变量值:"+hvi.getValue());
System.out.println("#####################");
}
}
7.已知任务ID得到流程变量
/**
* 得到流程变量
*/
@Test
public void getVariable2() {
//1,得到启动流程的service
TaskService taskService = this.processEngine.getTaskService();
String taskId="10002";
Object date = taskService.getVariable(taskId, "请假天数");
System.out.println(date);
}
8.流程变量的支持的类型
serializable要加上序列化的id
局部流程变量只能在该任务节点中设置和获取。如“学生请假”任务节点设置的流程局部变量只能在该“学生请假”节点获取,“班长审批”节点或者"班主任审批"节点获取就为空。
设置局部流程变量
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");