Workflow Engine
許多的公司都有需要workflow系統,但是並非每家公司的經費都很充裕買的起workflow engine,在經費不足而且公司的workflow所要求的功能又不多的情況下,或許以下的workflow engine可以應付你的需求。
這裡將先講解workflow engine所需的Database Schema,然後舉一個簡單的sample,並說明當程式執行時資料庫中資料的變化,最後則是講解程式的大略架構。
一、 Database Schema
1. Flow
|
Field |
Type |
Default |
Null |
Description |
|
Name |
Char(50) |
|
|
流程名稱 |
|
Description |
varchar(100) |
|
|
流程描述 |
|
Creator |
Char(5) |
|
|
成立流程的人 |
|
CreateTime |
Time |
|
|
成立的時間 |
|
ID |
Int |
|
|
自動編號 |
2. Page
|
Field |
Type |
Default |
Null |
Description |
|
URL |
Char(50) |
|
|
網址 |
|
Description |
varchar(100) |
|
|
網頁描述 |
|
ID |
Int |
|
|
自動編號 |
3. Step
|
Field |
Type |
Default |
Null |
Description |
|
FlowID |
Int |
|
|
流程編號 |
|
PageID |
int |
|
|
網頁編號 |
|
IsFirst |
Char(1) |
0 |
|
1: 第一個,0: 不是第一個 |
|
IsLast |
Char(1) |
0 |
|
1: 最後一個,0: 不是最後一個 |
|
ID |
Int |
|
|
自動編號 |
4. NextStep
|
Field |
Type |
Default |
Null |
Description |
|
StepID |
Int |
|
|
StepID |
|
Condition |
Varchar(20) |
|
|
判斷值 |
|
NextStepID |
Int |
|
|
下一個StepID |
|
NextOwner |
varhar(20) |
|
|
{manager} 主管
{preowner} 傳這個step過來的人
{member} 下屬 |
|
HasMailNotice |
Char(1) |
1 |
|
1: 會用email通知,0: 不會 |
|
EmailBody |
Varchar(200) |
|
|
Email內容 |
5. ExecutedFlow
|
Field |
Type |
Default |
Null |
Description |
|
FlowID |
Int |
|
|
計劃編號 |
|
Creator |
Char(5) |
|
|
啟動本流程的人 |
|
StartTime |
Time |
|
|
開始時間 |
|
EndTime |
Time |
|
|
結束時間 |
|
ID |
Int |
|
|
自動編號 |
6. StepPool
|
Field |
Type |
Default |
Null |
Description |
|
Owner |
Char(5) |
|
|
員工編號 |
|
ExecFlowID |
Int |
|
|
正執行的流程的編號 |
|
StepID |
int |
|
|
StepID |
|
PreviousOwner |
Char(5) |
|
|
傳這件事過來的Owner |
|
StartTime |
Time |
|
|
開始時間 |
7. StepLog
|
Field |
Type |
Default |
Null |
Description |
|
Owner |
Char(5) |
|
|
員工編號 |
|
ExecFlowID |
Int |
|
|
正執行的流程的編號 |
|
StepID |
int |
|
|
StepID |
|
PreviousOwner |
Char(5) |
|
|
傳這件事過來的Owner |
|
StartTime |
Time |
|
|
開始時間 |
|
EndTime |
Time |
|
|
結束時間 |
|
ID |
Int |
|
|
自動編號 |
8. 關聯圖

二、 Sample
以下以一個請假的流程為例,來說明workflow engine怎麼運作,下圖是請假的流程。

在某家小小小公司裡有兩個部門,分別為HR和IT部門,並且有孫權、周瑜、黃蓋三個員工,黃蓋是周瑜的下屬,周瑜是IT主管,孫權是HR主管,因此,在資料庫中我們將看到如下資料。
l Organization

l Employee

l Flow

l Page

l Step

l NextStep

1. 黃蓋開啟請假表單:
黃蓋執行employee.jsp開啟請假表單,workflow engine必須在Table ExecutedFlow和StepPool中新增資料,ExecutedFlow中的資料代表新開啟的流程,StepPool中的資料是流程正執行到那個步驟。
l ExecutedFlow

l StepPool

2. 周瑜核可黃蓋假單:
黃蓋請完假按submit後,系統寄發email通知周瑜,周瑜於是進入系統批假單,此時資料庫中的資料變成如下。
l StepLog

l StepPool

3. 孫權核可黃蓋假單:
周瑜核准黃蓋假單後,系統寄發email通知孫權,孫權於是進入系統批假單,此時資料庫中的資料變成如下。
l StepLog

l StepPool

4. 系統處理假單
當孫權核准了黃蓋的假單後,交由系統處理剩餘的事情,例如由特休裡扣一天…此時資料庫的資料如下,系統處理完StepPool裡的資料將清除。
l StepLog

l StepPool
