Activiti——流程变量(六)
Activiti——流程變量
轉自:http://lib.csdn.net/article/java/66665?knId=268
流程變量在整個工作流中扮演很重要的作用。例如:請假流程中有請假天數、請假原因等一些參數都為流程變量的范圍。流程變量的作用域范圍是只對應一個流程實例。也就是說各個流程實例的流程變量是不相互影響的。流程實例結束完成以后流程變量還保存在數據庫中(存放到流程變量的歷史表中)。
一、部署流程定義
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
說明:?
輸入流加載資源文件的3種方式?
二、啟動流程實例
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
三、設置流程變量
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
說明:
- 流程變量的作用域就是流程實例,所以只要設置就行了,不用管在哪個階段設置
- 基本類型設置流程變量,在taskService中使用任務ID,定義流程變量的名稱,設置流程變量的值。
- Javabean類型設置流程變量,需要這個javabean實現了Serializable接口
- 設置流程變量的時候,向act_ru_variable這個表添加數據
四、獲取流程變量
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
說明:
- 流程變量的獲取針對流程實例(即1個流程),每個流程實例獲取的流程變量時不同的
- 使用基本類型獲取流程變量,在taskService中使用任務ID,流程變量的名稱,獲取流程變量的值。
- Javabean類型設置獲取流程變量,除了需要這個javabean實現了Serializable接口外,還要求流程變量對象的屬性不能發生變化,否則拋出異常。解決方案,固定序列化ID
五、模擬流程變量的設置和獲取的場景
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
說明:
- RuntimeService對象可以設置流程變量和獲取流程變量
- TaskService對象可以設置流程變量和獲取流程變量
- 流程實例啟動的時候可以設置流程變量
- 任務辦理完成的時候可以設置流程變量
- 流程變量可以通過名稱/值的形式設置單個流程變量
- 流程變量可以通過Map集合,同時設置多個流程變量?
Map集合的key表示流程變量的名稱?
Map集合的value表示流程變量的值
六、查詢歷史的流程變量
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
說明:?
歷史的流程變量查詢,指定流程變量的名稱,查詢act_hi_varinst表(也可以針對,流程實例ID,執行對象ID,任務ID查詢)
七、流程變量的支持的類型
| Type name | Description |
|---|---|
| string | Value is threaded as a java.lang.String. Raw JSON-text value is used when writing a variable. |
| integer | Value is threaded as a java.lang.Integer. When writing, JSON number value is used as base for conversion, falls back to JSON text. |
| short | Value is threaded as a java.lang.Short. When writing, JSON number value is used as base for conversion, falls back to JSON text. |
| long | Value is threaded as a java.lang.Long. When writing, JSON number value is used as base for conversion, falls back to JSON text. |
| double | Value is threaded as a java.lang.Double. When writing, JSON number value is used as base for conversion, falls back to JSON text. |
| boolean | Value is threaded as a java.lang.Boolean. When writing, JSON boolean value is used for conversion. |
| date | Value is treated as a java.util.Date. When writing, the JSON text will be converted using ISO-8601 date format. |
| binary | Binary variable, treated as an array of bytes. The value attribute is null, the valueUrl contains an URL pointing to the raw binary stream. |
| serializable | Serialized representation of a Serializable Java-object. As with the binary type, the value attribute is null, the valueUrl contains an URL pointing to the raw binary stream. All serializable variables (which are not of any of the above types) will be exposed as a variable of this type. |
從圖中可以看出包括了大部分封裝類型和Date、String和實現了Serializable接口的類的類型。
八、總結
- 流程變量?
在流程執行或者任務執行的過程中,用于設置和獲取變量,使用流程變量在流程傳遞的過程中傳遞業務參數。?
對應的表:?
act_ru_variable:正在執行的流程變量表?
act_hi_varinst:流程變量歷史表 -
擴展知識:setVariable和setVariableLocal的區別?
setVariable:設置流程變量的時候,流程變量名稱相同的時候,后一次的值替換前一次的值,而且可以看到TASK_ID的字段不會存放任務ID的值?
setVariableLocal:?
1:設置流程變量的時候,針對當前活動的節點設置流程變量,如果一個流程中存在2個活動節點,對每個活動節點都設置流程變量,即使流程變量的名稱相同,后一次的版本的值也不會替換前一次版本的值,它會使用不同的任務ID作為標識,存放2個流程變量值,而且可以看到TASK_ID的字段會存放任務ID的值?
例如act_hi_varinst 表的數據:不同的任務節點,即使流程變量名稱相同,存放的值也是不同的。?
如圖:?
?
2:還有,使用setVariableLocal說明流程變量綁定了當前的任務,當流程繼續執行時,下個任務獲取不到這個流程變量(因為正在執行的流程變量中沒有這個數據),所有查詢正在執行的任務時不能查詢到我們需要的數據,此時需要查詢歷史的流程變量。源碼demo下載:http://download.csdn.net/detail/xunzaosiyecao/9622475
總結
以上是生活随笔為你收集整理的Activiti——流程变量(六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为p 9多少钱啊?
- 下一篇: 计算机在线咨询,计算机科学与技术