1.taskService中的变量
Variable全局可用,同一key值被后面相同的key值覆盖
//全局变量设置
taskService.setVariable
(taskId,"variableKey1","variableValue1");
//全局变量获取
taskService.getVariable(taskId,"key");
VariableLocal局部变量,只在某一节点可用,该节点任务完成后只能在历史中查询
//局部变量
taskService.setVariableLocal
(taskId,"variableKey","variableValue");
//局部变量的获取-1
//该方法只能在执行 taskService.complete(taskId)之前才能获取到,否则会报空指针异常
//taskService只能查询运行中的任务,已完成的不可查询到
//执行complete后该节点任务已完成,所以查询不到
Map map=taskService.getVariablesLocal(taskId);
//局部变量的获取-2
//该方法无论节点任务是否执行complete都可以查询到局部变量的值
List<HistoricVariableInstance> historicVariableInstances=historyService.createHistoricVariableInstanceQuery().taskId(taskId).list();
当局部变量和流程变量存在于同一个任务节点则查询时得到的是最后赋予该key的值,但是当该任务节点完成后,下一个节点获取的流程变量仍然是最初的流程变量的值,而不是局部变量的值,如:
taskService.setVariable(taskId, "key",value1);
taskService.setVariableLocal(taskId, "key",value2)
//此时map中得到的值是value2
Map map=taskService.getVariables(taskId);
//完成该任务
taskService.complete(taskId);
//下一节点再次获取
//map中的key值是value1
Map map=taskService.getVariables(“下一个任务节点的ID”);
2.runtimeService中的变量设置
runtimeService.setVariable(exclutionId,"key1","value1");
runtimeService.setVariable(exclutionId,"key2","value2");
Map map=runtimeService.getVariables(exclutionId);
Map map2=runtimeService.getVariablesLocal(exclutionId);
//map和map2的值一样
//对于runtimeService来说variable和variableLocal没有区别
PS:taskService变量绑定的是task ID二runtimeService的变量绑定的是exclutionId,
taskId变化,而exclutionId对于一个流程实例来说是不变的
默认情况下getVariable(String str)和setVariable(String str,String str2)方法会获取所有的变量,并放到缓存中
可用“boolean fetchAllVariables” 参数指定是否要设置变量缓存:
Object getVariable(String variableName, boolean fetchAllVariables); void setVariable(String variableName, Object value, boolean fetchAllVariables);