http://www.kafeitu.me/activiti/2012/08/05/diff-activiti-workflow-forms.html
開篇語
這個恐怕是初次接觸工作流最多的話題之一了,當然這個不是針對Activiti來說的,每個工作流引擎都會支持多種方式的表單。目前大家討論到的大概有三種。
- 動態表單
- 外置表單
- 普通表單
具體選擇哪種方式只能讀者根據自己項目的實際需求結合現有技術或者架構、平台選擇!!!
1.動態表單
這是程序員最喜歡的方式,同時也是客戶最討厭的……因為表單完全沒有布局,所有的表單元素都是順序輸出顯示在頁面。
此方式需要在流程定義文件(bpmn20.xml)中用activiti:formProperty屬性定義,可以在開始事件(Start Event)和Task上設置,而且支持變量自動替換,語法就是UEL。
1
2
3
4
5
6
7
8
9
10
|
<
startevent
id
=
"startevent1"
name
=
"Start"
>
<
extensionelements
>
<
activiti:formproperty
id
=
"name"
name
=
"Name"
type
=
"string"
></
activiti:formproperty
>
</
extensionelements
>
</
startevent
>
<
usertask
id
=
"usertask1"
name
=
"First Step"
>
<
extensionelements
>
<
activiti:formproperty
id
=
"setInFirstStep"
name
=
"SetInFirstStep"
type
=
"date"
></
activiti:formproperty
>
</
extensionelements
>
</
usertask
>
|
下面是一個簡單的動態表單的單元測試,讀者可以下載運行以便更明確執行過程和判斷動態表單能不能在企業項目中使用。
下載之后復制到eclipse工程里,更改里面的路徑配置使用JUnit測試即可。
當流程需要一些特殊處理時可以借助Listener或者Delegate方式實現。
注意:表單的內容都是以key和value的形式數據保存在引擎表中!!!
2.外置表單
這種方式常用於基於工作流平台開發的方式,代碼寫的很少,開發人員只要把表單內容寫好保存到.form文件中即可,然后配置每個節點需要的表單名稱(form key),實際運行時通過引擎提供的API讀取Task對應的form內容輸出到頁面。
此種方式對於在經常添加新流程的需求比較適用,可以快速發布新流程,把流程設計出來之后再設計表單之后兩者關聯就可以使用了。例如公司內部各種簡單的審批流程,沒有業務邏輯處理,僅僅是多級審批是否通過等等情況
當流程需要一些特殊處理時可以借助Listener或者Delegate方式實現。
Activiti Explorer就是使用的這種方式,表單信息都配置在流程定義文件中。
代碼片段:
1
2
3
4
|
<
process
id
=
"FormKey"
name
=
"FormKey"
>
<
startevent
id
=
"startevent1"
name
=
"Start"
activiti:formkey
=
"diagrams/form/start.form"
></
startevent
>
…
</
process
>
|
同樣也提供了單元測試:
注意:表單的內容都是以key和value的形式數據保存在引擎表中!!!
3.普通表單
這個是最靈活的一種方式,常用於業務比較復雜的系統中,或者業務比較固定不變的需求中,例如ERP系統。
普通表單的特點是把表單的內容存放在一個頁面(jsp、jsf、html等)文件中,存放方式也有兩種(一體式、分離式):
1.一體式:把整個流程涉及到的表單放在一個文件然后根據處理的任務名稱匹配顯示,kft-activiti-demo的普通表單模式就是一體式的做法,把表單內容封裝在一個div里面,div的ID以節點的名稱命名,點擊“辦理”按鈕時用對話框的方式把div的內容顯示給用戶。
2.分離式:對於非Ajax應用來說比較常用,每個任務對應一個頁面文件,點擊辦理的時候根據任務的ID動態指定表單頁面。
本博客發布的Activiti入門Demo中有演示:Activiti快速入門項目-kft-activiti-demo
和以上兩種方式比較有兩點區別:
- 表單:和第二種外置表單類似,但是表單的顯示、表單字段值填充均由開發人員寫代碼實現。
- 數據表:數據表單獨設計而不是和前兩種一樣把數據以key、value形式保存在引擎表中。
4.從業務數據和流程關聯比較
- 動態表單:引擎已經自動綁定在一起了,不需要額外配置。
- 外置表單:和業務關聯是可選的,提供的例子中是沒有和業務關聯的,如果需要關聯只需要在提交StartForm的時候設置businessKey即可。
- 普通表單:這個應該是必須和業務關聯,否則就是無頭蒼蠅了……,關聯方式可以參考:工作流引擎Activiti使用總結中的2.3 業務和流程的關聯方式
5.結束語
技術只是輔助工具,只能決定這件事能不能做,如何選擇要看應用場合,希望簡單的比較能提供一點思路。
原文地址:https://blog.csdn.net/bluejoe2000/article/details/39337265