如何實現一個簡單的工作流審批引擎——請看

 
一直在探索一個可以靈活流轉的OA工作流機制。以前聽說都是用什麼domino來做的,用ASP的時候很少有人去探求這個機制的實現方法。到了ASP.NET的時候好像大家都醒悟了,認識了工作流引擎,公司老闆、CTO等都嚷嚷要上工作流引擎實現企業信息審批流程化。我公司也在去年引進了深信通的工作流引擎,作爲公司其他系統開發調用的工作流審批組件,基本是符合WFMC標準的定義的。這個驗收我也去了,看起來是很適合我們公司用的。它設計的思路如下:
首先定義每個操做,就是定義流程步,定義流程步主要包括:操作的接口地址、操作參數、操作類型(起始操作、中間操作等)。定義操作的目的是接着爲每個操作設置關係和定義流程時選用這些定義好的操作步。
第二定義操作的參數,有了接口地址外,還需要定義操作參數。
第三是定義操作步之間的關係。就是定義一個流程中每個操作步的前驅、後繼的操作步。
第四是定義流程了,必要的信息是流程名稱等基本信息和定義流程的各個操作步以及流轉規則。流程基本信息就不用說了。流程步定義比較複雜,設置定義步驟類型(起始、中間、終結),入口步驟、出口步驟、通知模式(郵件?短信),人員(以人員優先)、角色、發送通知的內容。
第五是涉及跳步情況的定義,比如需要根據參數的不同提交到不同的步驟進行審批,這裏叫做流程步驟變遷規則設置。設置的內容需要:原步驟、目標步驟、變遷方向(正/負)、條件規則(判斷參數時用與還是用或)。接着設置參數和參數值及比較條件。
第六是授權管理。這個比較簡單了。判斷被提交的人是否處於授權狀態,是進行授權處理。
上面介紹的是一種商業組件,沒MONEY可用不到。下面來說說本人的“小土槍”。
我的小土槍在行家的眼裏可能不屑一顧,請不吝賜教.
首先我的思路是:一個流程有多個流程步組成,一個系統模塊有多個流程組成.在流程步裏定義該步的審批人或審批的角色以及入口頁面和參數、下一步可以提交的步驟等等。
所以流程定義的就兩個表,一個流程表,一個流程步表。流程表在定義流程時需要定義所屬模塊,其他都是簡單的描述等. 這是一個表.表結構如下:
PKID,流程名稱\流程描述\啓用時間\停用時間\停啓用標誌\所屬模塊
流程步表包括如下信息:
流程步ID、所屬流程、流程步描述、流程步的審批人、流程步的審批角色、入口URL,出口URL,可提交的流程步(比如這步驟能提交到第4和第5步,這裏就保存這個4,5)、可退回的流程步、還設置了一個是否可以選擇全部人的標誌,用於在如果提交下一步時如果不能明確事前制定某個審批人,就可以在在所有人中按部門篩選待辦人員。還有一些待閱入口URL和查看的URL。下表可以看一下。
FlowStepID
int
4
FlowID
varchar
10
FlowStepDescript
varchar
60
FlowStepCheckMan
varchar
40
FlowStepCheckRole
varchar
40
FlowStepTask
varchar
100
FlowStepUrl
varchar
250
FlowSltNext
varchar
100
SltOtherPsn
bit
1
FlowSltBack
varchar
100
FlowStepReadUrl
varchar
250
FlowViewURl
varchar
250
FlowNextNotes
varchar
100
FlowBackNotes
varchar
100
定義就是這樣了。
下面就要說怎麼用了。
先說一下背景,企業裏的公文、各種單據流轉實質上就是給“特定”人看某個頁面,說的更白一點就是給那個審批人的待辦工作模塊增加一條記錄,給他進去看的窗口。接着是他進行審批,這時有兩種可能:退回跟通過(當然有些步驟還有編輯)。那麼如何用上面設計的數據字典實現這些功能呢?首先看一個頁面:
這是一個提交審批的流程,首先有一個下一流程步的列表框,這個列表框是用來顯示可以提交的那幾個流程步,就是按照數據表中的字段:FlowSltNext,這個字段裏可以放幾個流程步,中間用逗號隔開,所以下一流程步去數據就是先取出這個當前流程步的FlowSltNext值,然後再select ………WHERE PKID IN (FlowSltNext).這樣就出來可選的流程步。如果下一流程步是可選的,還要根據用戶所選的流程列出候選人,所以這個列表框應該自動回傳服務器的。
然後就是填寫意見,這個沒什麼說的了。
最後就是選擇候選人,把他加入到待辦人員去,同樣可以做出待閱的效果。
如何列出候選人呢,根據用戶選擇的下一流程,查找FlowStepCheckMan(審批人)和FlowStepCheckRole(審批角色)內容,先找FlowStepCheckMan的內容,如果存在就不看FlowStepCheckRole的內容,已審批人優先,就按照審批人的內容列出獲選人人名。如果FlowStepCheckMan沒有內容,再看FlowStepCheckRole內容,按照FlowStepCheckRole內容選擇屬於這個角色的人名。
對了還有如何記錄審批人的審批動作問題,這裏用了一個審批記錄表,表結構是:
CheckInstance
varchar
被審批實體的唯一標號
sysID
int
流水號
DealResult
varchar
處理結果(退回、通過)
DealPsn
varchar
處理人(審批人)
DealSDate
datetime
審批開始時間
DealEDate
datetime
審批結束時間
Idear
varchar
意見
FlowStep
varchar
流程步
UseFlow
varchar
流程
然後還要生成待辦記錄、更新審批實體的流程信息等等。
上面說完了提交流程的實現,那麼如果選擇退回呢,這個很簡單,在流程記錄表中查找出所有已審批過的流程步並且是屬於流程步規定的可退回步驟,即FlowSltBack字段的內容。候選人按所選那一步的處理人列表就可以了。
大概就這樣吧,自己寫得好辛苦。越寫越沒耐心。
 
                                                       
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章