I have encountered some issues using the setVariable and setVariableLocal methods. The information I have obtained from reviewing the materials is that the properties set using the setVariableLocal method are usually associated with the task node and are valid on the associated task node. But I found through testing that variables set using setVariableLocal will appear in process variables (global variables). I don't know why
A simple process design
start->a_ask_for_leave->b_approve->c_approve->d_approve->end
The test code is as follows
@Override
public AjaxResult test() {
// Start the process and Set the initial parameters
Map<String, Object> initMap = new HashMap<>();
initMap.put("init", "init_value");
ProcessInstance processInstance = this.runtimeService.startProcessInstanceByKey("zhangsan_test", "zs008", initMap);
while (getTask(processInstance) != null) {
Task task = getTask(processInstance);
// Set variables for the current task node
taskService.setVariable(task.getId(), task.getName() + "_global", task.getName() + "_global");
taskService.setVariableLocal(task.getId(), task.getName() + "_local", task.getName() + "_local");
// Print variables
String id = task.getId();
log.info("id:{}", id);
log.info("name:{}", task.getName());
log.info("processVariables:{}", taskService.getVariables(task.getId()));
log.info("taskLocalVariables:{}", taskService.getVariablesLocal(task.getId()));
// Complete the task
this.taskService.complete(task.getId());
}
return AjaxResult.success();
}
Task getTask(ProcessInstance processInstance) {
Task task = this.taskService.createTaskQuery().processDefinitionId(processInstance.getProcessDefinitionId()).processInstanceId(processInstance.getId()).includeTaskLocalVariables().includeProcessVariables().singleResult();
return task;
}
The output results are as follows
11:52:51.845 - id:2526b917-658e-11ee-811c-12b1df80d923
11:52:51.845 - name:a_ask_for_leave
11:52:52.201 - processVariables:{init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, a_ask_for_leave_global=a_ask_for_leave_global}
11:52:52.318 - taskLocalVariables:{init=init_value, a_ask_for_leave_local=a_ask_for_leave_local}
11:52:56.819 - id:287065e3-658e-11ee-811c-12b1df80d923
11:52:56.819 - name:b_approve
11:52:57.183 - processVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global}
11:52:57.310 - taskLocalVariables:{init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global}
11:53:02.213 - id:2b47c8e5-658e-11ee-811c-12b1df80d923
11:53:02.214 - name:c_approve
11:53:02.693 - processVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, c_approve_global=c_approve_global, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global, c_approve_local=c_approve_local}
11:53:02.816 - taskLocalVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global, c_approve_local=c_approve_local}
11:53:08.949 - id:2e9c713d-658e-11ee-811c-12b1df80d923
11:53:08.949 - name:d_approve
11:53:09.293 - processVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, c_approve_global=c_approve_global, d_approve_global=d_approve_global, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global, c_approve_local=c_approve_local, d_approve_local=d_approve_local}
11:53:09.409 - taskLocalVariables:{b_approve_global=b_approve_global, init=init_value, a_ask_for_leave_local=a_ask_for_leave_local, c_approve_global=c_approve_global, b_approve_local=b_approve_local, a_ask_for_leave_global=a_ask_for_leave_global, c_approve_local=c_approve_local, d_approve_local=d_approve_local}
The version information is as follows
<activiti-version>7.1.0.M6</activiti-version> <spring-boot-version>2.7.0</spring-boot-version>
I hope that local variables are only valid at the specified task node