在Process State中的流程變量的access屬性分為三種屬性值:write,read以及read、write,
<variable access="read" name="master"></variable>
<variable access="write" name="slave"></variable>
<variable access="read,write" name="variable"></variable>
<variable access=" read,write " name="mapping"
mapped-name =”mapped d”></variable>
流程變量master的access屬性為read ,表示將從父流程實例上下文裡讀取變量master的值,以變量名master寫到子流程實例當中。
流程變量slave的access屬性為write,表示子流程實例開始時,不從父流程實例裡讀取任何變量到子流程,但在子流程實例結束的時候,會將子流程實例上下文裡名為slave的流程變量以流量變量名slave回寫到父流程實例上下文當中.
流程變量variable的access屬性為read,write,表示不但要從父流程實例上下文中讀取流程變量variable,將其復制到子流程實例當中,而且在子流程結束的時候,子流程實例將變量以變量名為variable回寫到父流程實例當中。
流程變量mapping的access屬性為read,write,但還有一個mapped-name屬性為mapped d,表示從父流程實例上下文第讀取變量名為mapping的流程變量的值,並將其名為mapping寫到子流程實例上下文當中,但子流程實例結束的時候,子流程實例會將變量mapping以名稱mapped d形式回寫到父流程實例上下文當中。
在任務控制器中定義的任務變量
<task name="chengyi">
<controller>
<variable name="v1" access="read" mapped-name ="test
v1"></variable>
<variable name="v2" access="write" mapped-name="test
v2"></variable>
<variable name="v3" access="read,write" mapped-name="test
v3"></variable>
<variable name="v4" access="read,write,required"
mapped-name="teset v4"></variable>
</controller>
</task>
任務變量v1的access屬性為read,表示該變量只會在任務實例初始化時將流程上下文裡的key為v1的流程變量值取出,放到這裡的Controller的變量v1當中,不需要回寫到流程上下文了。
任務變量v2的access屬性為write,表示v2所屬的任務實例在初始化的時候不會到流程上下文中查找變量名為v2的流程變量的值,所以當該任務實例初始化後,及時流程上下文中有key為v2的流程變量,該Controller中的v2的值也為null,但因為access為write,所以在任務實例完成後需要將客戶端的值回寫到流程上下文中,因為沒有定義mapped-name屬性,所以回寫時以name為v2作為流程變量的key值。
任務變量v3的access屬性為read,write,表示在它對應的任務實例初始化時,到該任務實例所對應的流程實例上下文當中查找key值為v3的流程變量,並將找到的變量值寫入變量v3當中。同時,在完成任務時需要向流程變量裡回寫key為v3的流程變量,因為定義了mapped-name的值為test v3,所以在回寫到流程上下文時,用的key值不是v3,而是test
v3。
任務變量v4與v3相同,只是在流程變量回寫時,如果沒有將v4回寫到流程上下文,會有一個IllegalArgumentException異常拋出,提示將v4的值必須回寫到流程上下文中。