Activiti 工作流表單設計及開發

一、前言


        Activiti 5對錶單的支持目前還是比較弱的,表現在對錶單的開發還需要寫Freemark模板,並且它的模板還需要跟class文件一起打包發佈。這使得流程的表單設計必須由開發人員來開發處理。因而,開發一套易用性強的流程表單功能就顯得很有必要。



二、需求


        用戶一般都希望能有如Microsoft的Office套件中的InfoPath那樣,可以自己進行設計,並且能與工作流程綁在一起進行流轉處理。如下所示:




        表單中每個字段有固定的數據類型,並由不同的數據控件展示,如日期、數字、單選或多選、下拉、多行文本甚至富文本編輯器。在實現更強的功能上,我們還允許控件能實現腳本交互。




三、設計實現思路


在表單與流程的整合中,我們一般不建議把表單的所有數據都存儲在流程中,僅需要把參與流程跳轉的數據才存到流程變量中去。如請假出差的流程,如下所示:



        如申請出差金額則需要參與流程的處理中去,因而在進入這個判斷節點之前,流程變量中需要存在這個變量,並且通過判斷這個變量值來讓流程自動跳轉。



1.        流程實例與業務表單關聯
基於以上設計的原則,流程中則不存儲業務表單的數據,那麼流程與業務表單又如何關聯?在Activiti 5 則比Jbpm4考慮了這塊,他在流程實例表及任務實例表相關運行表中增加了一個字段(BusinessKey),用來關聯業務表單的數據,我們一般把這個字段稱爲業務主鍵。其關聯關係如下所示:

                



        那麼流程表單的數據如何存儲及如何展示,從上圖可以看到,我們對自定義的表單提供了生成物理表的方式,那麼表單的存儲則通過在線生成的頁面獲取物理表必需要的數據,然後保存至物理表中。這需要我們在設計表單時,生成一套表單數據規範,在審批時,能夠進行頁面表單的數據驗證及存儲。另外,還需要對在執行過程中的表單進行權限控制,如同一節點上審批相同的表單,不同角色的人員對錶單的字段的讀寫權限是不一樣的。



2.        在線表單設計功能要求
     我們把以上的需求進行了用例描述,則得到如下示例

104557pseal8lpdp8goxgw.jpg


                

1.        設計表單模板

允許用戶預先設置好一些帶有漂亮格式的表單,如包括表頭、表腳及樣式。方便用戶調整表單。



2.        設計表單佈局

允許用戶在線進行在線佈局,目前一般來說都是基於表格的佈局方式。




3.        設計表單字段控件、數據類型、數據驗證

設計表單字段的輸入控件類型及數據類型,用於保證用戶輸入的數據的正確性



4.        設置表單字段權限

用於控制表單的字段的讀寫權限,結合工作流的審批,可以更有效顯示數據。



5.        支持表單動態腳本

允許對錶單控件加上交互腳本,以實現如一些級聯更新等的數據交互等。



6.        表單預覽

可以在線實時顯示錶單的顯示效果



7.        預設流程變量

把參與流程運算的表單字段標識爲流程變量。




3.        在線流程表單設計邏輯結構分析
生成流程表單的流程如下所示:



說明:
表單設計可以先設計物理表再根據模板生成在線表單
也可以先設計表單的樣式再生成物理表


        以上兩種方式最終的目標均需要生成物理表,物理表的結構及數據展示控件等我們則需要用表來記錄。因此,以下爲他們大體上的數據結構模型:




        表單生成物理表後,表單頁面需要跟物理表單的數據對應起來,在提交頁面表單時,我們採用了Json的數據結構來提交,在後臺獲取可以有效轉存爲物理表的數據。如下格式:
表單數據分爲3部分:
1.        主表數據。
2.        子表數據
3.        意見數據



數據格式如:


{"main":{"tableId":"tableId","fields":{"itemSubject":"出差深圳兩天","total":"230","creatorID":"1340762352749","creator":"張小軍","descp":"出差深圳兩天"}},"sub":[],"opinion":[]}


        在線表單的控件展示,需要按字段及結構來解析最終顯示及數據驗證。


        流程啓動後,需要把業務主鍵傳至流程實例中去,幸好,activiti已經提供了比較完整的API接口,如下:


Java代碼  [url=][/url]

  • ProcessInstance processInstance=runtimeService.startProcessInstanceById(porcessDefId, businessKey, variables);  



        以上方法會把業務表單中需要參與流程運行的字段放到variables作爲流程變量。

4.        流程定義與業務表單綁定

        流程定義允許綁定多種業務表單,目前我們可以簡單分爲三種模式,在線表單、同系統的定製業務表單、第三方業務表單。


        在線表單可以用全局表單,則整個流程用同一個表單,如果每個流程節點的表單不一樣,則可以通過設計表單。 表單數據結構如下所示:

        




        所以在啓動流程時及在任務進行跳轉時,均可以獲取流程節點的表單設置,從而在啓動流程或執行任務處理時能進行正確的表單展示。


        流程在完成整個審批後,還可以通過流程運行歷史,能通過該以下該表可以查詢當時每個節點審批時的表單情況。


      如想在線測試效果可以留個郵件或加我Q2522897060

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