一、概述
在流程执行或者任务执行的过程中,用于设置和获取变量,使用流程变量在流程传递的过程中传递业务参数。其作用域范围是只对应一个流程实例,与其他流程互不影响。
二、启动流程并设置流程变量
/**
* 启动流程+设置流程变量
*/
@Test
public void startProcess(){
Map<String,Object> variables=new HashMap<>();
variables.put("彩礼", "50W");
variables.put("嫁妆", "顺义大别墅");
runtimeService.startProcessInstanceByKey("helloWord",variables);
System.out.println("启动成功");
}
三、流程执行过程中设置流程变量
方法一
/**
* 流程执行过程中设置流程变量 1
*/
@Test
public void setVariables() {
String executionId="62501";
Map<String,Object> variables=new HashMap<>();
variables.put("岳母的礼物", "5年老山参");
variables.put("岳父的礼物", "三边酒");
runtimeService.setVariables(executionId, variables);
// runtimeService.setVariable(executionId, "岳母的回礼", "西城学区房");
System.out.println("变量设置成功");
}
方法二
/**
* 流程执行过程中设置流程变量 2
*/
@Test
public void setVariables2() {
String taskId="67502";
Map<String,Object> variables=new HashMap<>();
variables.put("岳父的回礼", "兰博基尼跑车");
// taskService.setVariable(taskId, variableName, value);
taskService.setVariables(taskId, variables);
System.out.println("变量设置成功");
}
四、任务执行进行时设置流程变量
/**
* 处理任务+设置流程变量
*/
@Test
public void completeTask(){
String taskId="67502";
Map<String,Object> variables=new HashMap<>();
variables.put("彩礼", "5W");
variables.put("钻戒", "5克拉");
taskService.complete(taskId,variables);
}
注:设置流程变量时,KEY如果重复,会覆盖之前的数据,【act_ru_variable】表的【REV_ 】字段版本号会+1
五、获取流程变量
/**
* 获取流程变量 1
*/
@Test
public void getVariables1() {
String executionId="62501";
Map<String,Object> variables=runtimeService.getVariables(executionId);
variables.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
String dowry=(String) runtimeService.getVariable(executionId, "嫁妆");
System.out.println(dowry);
}
/**
* 获取流程变量 2
*/
@Test
public void getVariables2() {
String taskId="72503";
Map<String,Object> variables=taskService.getVariables(taskId);
variables.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
String dowry=(String) taskService.getVariable(taskId, "嫁妆");
System.out.println(dowry);
}
五、扩展:局部变量 setVariableLocal
局部变量只能再该节点设置和使用,其作用域 范围只作用于该活动节点。
如果一个流程中存在2个活动节点,对每个活动节点都设置流程变量,即使流程变量的名称相同,后一次的版本的值也不会替换前一次版本的值,它会使用不同的任务ID作为标识,存放2个流程变量值,而且TASK_ID的字段会存放任务ID。