古詩詞大全網 - 古詩大全 - Flowable實戰(五)表單和流程變量

Flowable實戰(五)表單和流程變量

?流程實例按步驟執行時,需要保存並使用壹些數據,在Flowable中,這些數據稱為變量( variable )。

?流程實例可以持有變量,稱作流程變量( process variables )。

?為了使用效率,Flowable將變量分為兩種:運行時變量、歷史變量。

?流程實例運行時的變量,存入act_ru_variable表中。在流程實例運行結束時,此實例的變量在表中刪除。

?在流程實例創建及啟動時,可設置流程變量。所有的 startProcessInstanceXXX 方法都有壹個可選參數用於設置變量。例如,在 RuntimeService 中:

?也可以在流程執行中加入變量。例如,( RuntimeService ):

?讀取變量方法(請註意 TaskService 中有類似的方法。這意味著任務與執行壹樣,可以持有局部變量,其生存期為任務持續的時間。)

?歷史變量,存入act_hi_varinst表中。在流程啟動時,流程變量會同時存入歷史變量表中;在流程結束時,歷史表中的變量仍然存在。可理解為“永久代”的流程變量。

?獲取已完成的、id為’XXX’的流程實例中,所有的HistoricVariableInstances(歷史變量實例),並以變量名排序。

?在實際業務中,流程伴隨著各種各樣的表單,Flowable引擎將表單數據統壹作為流程變量存入變量表中。所以,對於Flowable引擎,可以完全獨立於表單運行,因為可以用流程變量替代表單數據。

?但壹般的,我們需要結構化的數據,表單仍然是我們推薦的用法。

?表單定義有兩種方法,內置表單和外部表單。

?以請假為例,XML內容:

?使用方法:

?或

?內置表單了解即可,實際應用更多的是使用外部表單。

?根據表單文件自行渲染的任務表單,稱為外部表單。

?在springboot環境下, resources/forms 目錄下任何.form後綴的表單定義文件都會被自動部署。

?例如,將2.2.2表單定義內容保存為leave.form文件,放入 resources/forms 目錄下。

?實際上,渲染表單所需的所有數據都組裝在下面兩個方法:

?可以通過下面兩個方法提交表單參數:

?表單參數FormProperty的具體信息:

?獲取指定流程實例的表單數據的方法:

?提交表單數據的方法:

?表單數據實際存放在流程變量表,所以,用流程變量的方法同樣可以獲取及提交表單數據。

? 表單支持以下類型字段

?在實際應用中,Flowable提供的表單字段類型並不能完全滿足需求,往往我們需要自定義表單字段類型。

?所有自定義字段類型需要繼承壹個表達類型抽象類“org.flowable.engine.form.AbstractFormType”。

?比如,定義壹個"卡片"自定義類型:

?新建配置類,註冊自定義字段類型解析類

?Flowable支持自定義表單引擎以適應各種場景。只需要實現接口org.flowable.engine.impl.form.FormEngine,然後在引擎中註冊自定義的表單引擎實現類即可。

?註冊方法與自定義表單字段類型相似,在配置類中加入以下語句:

?使用方法:

?通過本篇,我們了解到了表單和流程變量的具體使用,同樣的,在實際業務使用中,還需要不少優化。比如,我們可以在formKey中保存通用的key,通過算法或轉換得到實際需要使用的表單模板,在普通屏幕尺寸的Web應用中顯示壹個表單,在手機等小屏幕中顯示另壹個表單。還有下壹篇將講到的“集成JPA”,進壹步對表單和流程變量的使用做出優化。