工作流Activiti5流程变量 任务变量 setVariables 和 setVariablesLocal区别

来源:互联网 发布:it便利店 编辑:程序博客网 时间:2024/05/09 06:38

因为网上的资料比较少。结合源码把相关API写下来。

设置流程级别变量:

runtimeService.startProcessInstanceById(
                    template.getTemplateId(), variables);

runtimeService.setVariables(executionId, variables);


taskService.complete(String.valueOf(taskId), variables); //流程变量  这个开始我以为是设置任务变量 看了一下源码才发现是流程级别的



设置任务级别变量:

taskService.setVariable(String.valueOf(taskId), "va", "2"); //流程变量

taskService.setVariableLocal(String.valueOf(taskId), "va", "2");//任务变量


变量表:

select * from act_hi_varinst 


setVariables 和 setVariablesLocal区别?

可以简单认为,variable都是针对processInstance的。

local可能是针对某个execution分支的,也可能针对task的。

这里就要谈一下变量的作用域,变量肯定是依附于某个流程里的概念而存在的,所以才能在流程流转过程中使用这些变量。

默认的变量都是流程实例级别的,也就是说,分支execution和task都可以读取到对应processInstance里的变量。

与之相对的就是local变量,简单来说就不是processInstance范围的变量,如何区分global和local呢?差别就是local的作用范围小,如果是分支execution的local变量,就只能在execution分支生存期使用。

比如并发分支结束了,变量也就没了

比如task结束了,变量也就没了。

local变量的好处是,可以在每个分支使用同名的变量,互相之间不受影响,会签multi-instance就是通过local局部变量实现的。

阅读全文
0 0