1、前言
Activiti 5對錶單的支持目前仍是比較弱的,表如今對錶單的開發還須要寫Freemark模板,而且它的模板還須要跟class文件一塊兒打包發佈。這使得流程的表單設計必須由開發人員來開發處理。於是,開發一套易用性強的流程表單功能就顯得頗有必要。
2、需求
用戶通常都但願能有如Microsoft的Office套件中的InfoPath那樣,能夠本身進行設計,而且能與工做流程綁在一塊兒進行流轉處理。以下所示:
數據結構
表單中每一個字段有固定的數據類型,並由不一樣的數據控件展現,如日期、數字、單選或多選、下拉、多行文本甚至富文本編輯器。在實現更強的功能上,咱們還容許控件能實現腳本交互。
3、設計實現思路
在表單與流程的整合中,咱們通常不建議把表單的全部數據都存儲在流程中,僅須要把參與流程跳轉的數據才存到流程變量中去。如請假出差的流程,以下所示:
jsp
如申請出差金額則須要參與流程的處理中去,於是在進入這個判斷節點以前,流程變量中須要存在這個變量,而且經過判斷這個變量值來讓流程自動跳轉。
1. 流程實例與業務表單關聯
基於以上設計的原則,流程中則不存儲業務表單的數據,那麼流程與業務表單又如何關聯?在Activiti 5 則比Jbpm4考慮了這塊,他在流程實例表及任務實例表相關運行表中增長了一個字段(BusinessKey),用來關聯業務表單的數據,咱們通常把這個字段稱爲業務主鍵。其關聯關係以下所示:
編輯器
那麼流程表單的數據如何存儲及如何展現,從上圖能夠看到,咱們對自定義的表單提供了生成物理表的方式,那麼表單的存儲則經過在線生成的頁面獲取物理表必須要的數據,而後保存至物理表中。這須要咱們在設計表單時,生成一套表單數據規範,在審批時,可以進行頁面表單的數據驗證及存儲。另外,還須要對在執行過程當中的表單進行權限控制,如同一節點上審批相同的表單,不一樣角色的人員對錶單的字段的讀寫權限是不同的。
2. 在線表單設計功能要求
咱們把以上的需求進行了用例描述,則獲得以下示例
佈局
3. 在線流程表單設計邏輯結構分析
生成流程表單的流程以下所示:
url
說明:
表單設計能夠先設計物理表再根據模板生成在線表單
也能夠先設計表單的樣式再生成物理表
以上兩種方式最終的目標均須要生成物理表,物理表的結構及數據展現控件等咱們則須要用表來記錄。所以,如下爲他們大致上的數據結構模型:
spa
表單生成物理表後,表單頁面須要跟物理表單的數據對應起來,在提交頁面表單時,咱們採用了Json的數據結構來提交,在後臺獲取能夠有效轉存爲物理表的數據。以下格式:
表單數據分爲3部分:
1. 主表數據。
2. 子表數據
3. 意見數據
設計
數據格式如:
{"main":{"tableId":"tableId","fields":{"itemSubject":"出差深圳兩天","total":"230","creatorID":"1340762352749","creator":"張小軍","descp":"出差深圳兩天"}},"sub":[],"opinion":[]}
在線表單的控件展現,須要按字段及結構來解析最終顯示及數據驗證。
流程啓動後,須要把業務主鍵傳至流程實例中去,幸虧,activiti已經提供了比較完整的API接口,以下:
Java代碼 [url=][/url]
接口
以上方法會把業務表單中須要參與流程運行的字段放到variables做爲流程變量。
4. 流程定義與業務表單綁定
流程定義容許綁定多種業務表單,目前咱們能夠簡單分爲三種模式,在線表單、同系統的定製業務表單、第三方業務表單。
在線表單能夠用全局表單,則整個流程用同一個表單,若是每一個流程節點的表單不同,則能夠經過設計表單。 表單數據結構以下所示:
開發
因此在啓動流程時及在任務進行跳轉時,都可以獲取流程節點的表單設置,從而在啓動流程或執行任務處理時能進行正確的表單展現。
流程在完成整個審批後,還能夠經過流程運行歷史,能經過該如下該表能夠查詢當時每一個節點審批時的表單狀況。
get
電信:http://office.jee-soft.cn:10080/bpm3/login.jsp
網通:http://oa.jee-soft.cn:10080/bpm3/login.jsp帳號:admin密碼:1