前言
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:流程參數的私有作用域只在當前執行流下,只能通過當前執行流獲取;