Activiti流程參數的設置方式和作用域

前言

Activiti的參數有兩種類型,一類是流程參數,一類是任務參數;流程參數是通過RuntimeService服務組件設置,在設置的過程中需要傳入執行流ID;任務參數是通過TaskService服務組件設置,在設置的過程中需要傳入任務ID;所以我們可以形象的認爲流程參數是和執行流綁定到了一起,任務參數是和任務綁定到了一起。任務參數可以查看這篇文章《Activiti任務參數的設置方式和作用域》

一、流程參數有兩種設置方式

1:啓動流程實例時設置參數,用runtimeService.startProcessInstanceById(流程id,參數map);此種方式設置的流程參數相當於設置到了主執行流中。

2:在流程啓動之後,用runtimeService.setVariable(執行流Id,參數名,參數值)或者runtimeService.setVariableLocal(執行流Id,參數名,參數值)的方式設置參數;此種方式設置參數依靠執行流,可以是主執行流,也可以是子執行流。

二、流程參數的作用域

1:流程實例中只有一個執行流時,即只有主執行流時;無論是在啓動流程時設置流程參數,還是在啓動後通過setVariable或者通過setVariableLocal的方式來設置流程參數,則都可以通過getVariable和getVariableLocal的方式獲取到設置的流程參數;

2:流程實例中除了主執行流外,還有子執行流時;此時情況比較複雜,分開描述:

(1)當在主執行流中設置流程參數,無論以何種方式設置,則在主執行流中通過任何方式都可以獲取到,在所有子執行流中也可以通過getVariable的方式獲取到;

(2)當在某個子執行流中設置流程參數時,如果是通過setVariable方式設置,則在所有子執行流中都可以通過getVariable方式獲取到,在主執行流中可以通過任何方式獲取到;

(3)當在某個子執行流中設置流程參數時,如果是以setVariableLocal方式設置,則在當前子執行流中可以通過任何方式獲取到,在其他子執行流中不可以獲取到,在主執行流中也不可以獲取到,因爲參數的作用域僅僅侷限於當前設置的子執行流中,而且子執行流執行結束之後,參數就會失效。

3:流程參數作用域的個人理解

(1)在一個流程實例中,流程參數的作用域可以理解爲有兩類區域,一類共有區域(只有一個共有區域,所有執行流共享),一類私有區域(每個子執行流都有自己的私有區域);

(2)主執行流只能操作共有區域,無論是通過setVariable和getVariable,還是通過setVariableLocal和getVariableLocal;操作的都是共享的那個共有區域;

(3)子執行流即可以操作共有區域(setVariable和getVariable),也可以操作自己的私有區域(setVariableLocal和getVariableLocal)(子執行流的getVariable也可以操作自己的私有區域);

(4)主執行流無論通過何種方式設置參數,都是將參數設置到共有區域中;主執行流無論通過何種方式獲取都是從共有區域中獲取參數;

(5)子執行流通過setVariable設置的參數,被設置到了共有區域;子執行流通過getVariable方式是從共有區域裏獲取參數(也會從自己的私有區域獲取參數);

(6)子執行流通過setVariableLocal設置的參數,被設置到了自己的私有區域裏;子執行流通過getVariableLocal從自己的私有區域裏獲取參數。

4:流程參數在數據庫中的表現形式

(1)現象

  • 主執行流id爲2501(和流程實例id一樣),子執行流id爲7502和7503;
  • 在主執行流中設置的參數的參數名有start、local、nolocal,它們的的EXECUTION_ID_字段的值都是主執行流的id2501;
  • 在子執行流7502中通過setVariableLocal設置的參數的參數名爲7502,它的的EXECUTION_ID_字段的值是該子執行流的id7502;
  • 在子執行流7503中通過setVariable設置的參數的參數名爲7503,它的EXECUTION_ID_字段的值是主執行流的id2501;

(2)總結

  • 被放置到共有區域的參數的EXECUTION_ID_字段的值都是主執行流的id,被放到子執行流私有區域的參數的EXECUTION_ID_字段的值爲該子執行流的id
  • 通過主執行流的任何方式獲取參數時,都是以主執行流的id爲條件從變量表的EXECUTION_ID_中查找參數;
  • 通過子執行流的getVariableLocal方式獲取參數時,以子執行流的id爲條件從變量表的EXECUTION_ID_中查找參數;
  • 通過子執行流的getVariable方式獲取參數時,不僅以主執行流的id爲條件從變量表的EXECUTION_ID_中查找參數,還以該子執行流的id爲條件從變量表的EXECUTION_ID_中查找參數;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章