前言
Activiti的参数有两种类型,一类是流程参数,一类是任务参数;流程参数是通过RuntimeService服务组件设置,在设置的过程中需要传入执行流ID;任务参数是通过TaskService服务组件设置,在设置的过程中需要传入任务ID;所以我们可以形象的认为流程参数是和执行流绑定到了一起,任务参数是和任务绑定到了一起。流程参数可以查看这篇文章《Activiti流程参数的设置方式和作用域》,任务参数可以查看这篇文章《Activiti任务参数的设置方式和作用域》
一:参数的设置方式对比
1:任务参数的设置方式
流程启动之后,当走到某个任务节点时,用taskService.setVariable(任务Id,参数名,参数值)或者taskService.setVariableLocal(任务Id,参数名,参数值)的方式设置任务参数;
2:流程参数的设置方式
在流程启动之后,用runtimeService.setVariable(执行流Id,参数名,参数值)或者runtimeService.setVariableLocal(执行流Id,参数名,参数值)的方式设置参数;设置流程参数依靠执行流,可以是主执行流,也可以是子执行流。
二:参数作用域的对比
1:任务参数的作用域
(1)、通过taskService.setVariable(任务Id,参数名,参数值)方式设置的参数,被放到了公共作用域中,整个流程结束之前,在整个流程的任何地方、通过任何方式都能获取到,即可以通过taskService.getVariable(任务Id,参数名,参数值)获取到,也可以通过runtimeService.getVariable(主/子执行流Id,参数名,参数值)或runtimeService.getVariableLocal(主执行流Id,参数名,参数值)获取到。
(2)、通过taskService.setVariableLocal(任务Id,参数名,参数值)方式设置的参数,被放到了当前任务的私有作用域中,只能在当前任务中通过taskService.getVariableLocal(任务Id,参数名,参数值)或taskService.getVariable(任务Id,参数名,参数值)方式获取到;当前任务执行结束,或者被删除后,参数就会失效。
2:流程参数的作用域
(1)、通过runtimeService.setVariable(主/子执行流Id,参数名,参数值)方式设置的参数,被放到了公共作用域中,在整个流程结束之前,在整个流程的任何地方、通过任何方式都能获取到,即可以通过taskService.getVariable(任务Id,参数名,参数值)获取到,也可以通过runtimeService.getVariable(主/子执行流Id,参数名,参数值)或者runtimeService.getVariableLocal(主执行流Id,参数名,参数值)获取到。
(2)、通过runtimeService.setVariableLocal(主执行流Id,参数名,参数值)方式设置的参数,被放到了公共作用域中,在整个流程结束之前,在整个流程的任何地方、通过任何方式都能获取到,即可以通过taskService.getVariable(任务Id,参数名,参数值)获取到,也可以通过runtimeService.getVariable(主/子执行流Id,参数名,参数值)或者runtimeService.getVariableLocal(主执行流Id,参数名,参数值)获取到。
(3)、通过runtimeService.setVariableLocal(子执行流Id,参数名,参数值)方式设置的参数,被放到了当前执行流的私有作用域中,只能在当前执行流中通过runtimeService.getVariableLocal(子执行流Id,参数名,参数值)或者runtimeService.getVariable(子执行流Id,参数名,参数值)获取到;当前子执行流执行结束,参数就会失效。
三:公共作用域,私有作用域
1:任务参数可以被放到一个公共作用域中,也可以被放到当前任务的私有作用域中;
2:流程参数可以被放到一个公共作用域中,也可以被放到当前执行流的私有作用域中;
3:总结发现无论是 任务参数的公共作用域,还是流程参数的公共作用域,是同一个作用域,所以只要是放到公共作用域的任何参数,通过任何方式都可以获取到;
4:任务参数的私有作用域只在当前任务下,只能通过当前任务获取;
5:流程参数的私有作用域只在当前执行流下,只能通过当前执行流获取;