一套完整自定義工作流的實現
概述:
本工作流以一套金融軟體業務處理流程為例,實現功能包括:流程自定義、步驟自定義、步驟重複次數、步驟型別(順序/並行)、定義排序功能,完全使用資料庫實現,本文將詳細分析業務流程、系統設計及實現細節。
術語:
工作流(Workflow)[1],是對工作流程及其各操作步驟之間業務規則的抽象、概括、描述。工作流建模,即將工作流程中的工作如何前後組織在一起的邏輯和規則在計算機中以恰當的模型進行表示並對其實施計算。工作流要解決的主要問題是:為實現某個業務目標,在多個參與者之間,利用計算機,按某種預定規則自動傳遞文件、資訊或者任務。工作流管理系統(Workflow Management System, WfMS)的主要功能是通過計算機技術的支援去定義、執行和管理工作流,協調工作流執行過程中工作之間以及群體成員之間的資訊互動。工作流需要依靠工作流管理系統來實現。
流程:工作流包含多個工作流程,處理時可任選一種流程進行處理,其包含步驟資訊;
步驟:流程中每一環節的名稱,某一流程將包含多個步驟(其他工作流中也稱為節點)。
正文:
第一部分、業務邏輯分析
1、自定義工作流是指工作流各個環節及其引數完全自定義,常用於公文處理、業務流程籤批處理等。本系統來源於本人蔘與開發的一套金融管理軟體,業務處理人分不同角色擁有不同許可權進行業務處理,將貸款資料庫從貸款調查一直到貸款籤批的完整流程。其中由於軟體功能要求,需要將貸款調查固定置為第一步驟,將貸款籤批置為最後一步驟。
其中數字表示當前步驟重複次數。
2、使用者業務處理部分包括:
1)、通過:當前步驟處理通過,(選擇下一處理人)進入當前流程中下一步驟,若為末步驟,則流程完成;
2)、退回:將步驟退回至上一步驟,即返回至上一處理人處,若為首步驟,則不可進行退回;
3)、否決:將步驟直接結束,不可再進行操作,或者回退至第一步驟;本系統中採用第二種方式;
4)、撤回:若當前步驟已處理,且在下一處理人未進行處理的情況下可進行撤回操作。
3、順序與並行
順序是指上一處理人指定某一處理人時,其他擁有此步驟許可權的操作員不可進行檢視和操作,必須當前處理人處理完畢後,流程才能繼續;並行是由上一處理人指定固定多個處理人時,由任一員工處理即可,不分前後順序,全部處理完成,進入下一步驟,此處理人數目由當前步驟重複次數確定。
兩者之間對應關係如下。
第二部分、系統設計
資料庫設計如下:
1)、流程資訊表:S_flow_info(flow_id,flow_name)
2)、步驟資訊表:S_action_info(action_id,action_name)
3)、流程-步驟資訊表:S_step_info(step_id,action_id,flow_id,step_repeat_no,step_order_no,step_type)
(其中step_repeat_no為重複次數,step_order_no為排序號,step_type為型別:0為順序,1為並行)
4)、流程處理明細表:L_tranct_proc(proc_id,loan_id,step_id,step_action,step_emp_id)
(其中loan_id為資料主表主鍵,step_id關聯S_action_info,step_action
儲存處理結果:0--不通過,1--通過,2--退回,3--否決,4--撤回,step_emp_id為當前處理員工編號)
其中流程表、步驟表、流程步驟關係表為核心資料表,它們三者確定工作流的完全自定義。流程處理明細表為重要資料表,查詢資料主要通過此表進行連線查詢。
其他相關表包括:
1)、資料主表L_loan_info(loan_id,loan_name,flow_id,step_id,...)
(flow_id為流程編號,step_id關聯S_action_info)
2)、操作員工表E_emp_info(emp_id,emp_name,..)
3)、角色資訊表E_role_info(role_id,role_name)
4)、員工-角色關係表E_emp_role(emp_role_id,emp_id,role_id)
(關聯角色表與員工表)
5)、步驟角色關係表S_action_role(action_role_id,action_id,role_id)
(關聯角色表與步驟表)
6)、下一處理人表L_loan_next_emp(loan_next_emp_id,loan_id,next_emp_id,step_id)
(其中next_emp_id關聯操作員工表E_emp_info,step_id關聯S_action_info)
其中資料流向如下:
1)業務最開始發生時,資料主表L_loan_info插入資料,其step_id為其所在流程的第一個步驟的編號,可根據下一步驟的重複次數來去將下一處理人的操作員編號插入到下一處理人表L_loan_next_emp中;插入流程處理明細表中資料,step_id為當前步驟編號;更新主表L_loan_info的step_id為下一步驟編號;
2)流程進入下一步驟;
3)下一處理人可檢視當前待處理資料(以及本環節待處理資料),選定進行處理,將處理結果(0:不通過,1:通過,2:退回,3:否決)插入到流程處理明細表中,若為通過由更新主表L_loan_info的step_id為下一步驟編號,退回更新為上一步驟編號,否決則更新到第一個步驟編號;
4)在本人已處理資料中可檢視已處理過的資料,若下一步驟中操作員還沒有進行操作,則可對資料操作進行撤回,撤回時將處理結果(4:撤回)插入到流程處理明細表中,其中的next_emp_id為本人操作員工編號);更新主表L_loan_info的step_id為流程的第一步驟的編號;
5)下一處理人繼續3)、4)的迴圈,直至流程的結束;
6)流程最後一個步驟,將處理結果中step_id值為0插入至流程處理明細中。
第三部分、實現細節
1、第一步驟中獲得資料列表程式碼如下:
?1 |
SELECT
* FROM L_loan_info
WHERE [email protected]_id
|
其中@step_id使用程式碼得到當前資料的第一步驟編號
2、第一步驟獲得已處理資料列表程式碼:
?1 |
SELECT
* FROM L_loan_info
WHERE loan_id
IN ( SELECT
DISTINCT loan_id<br> FROM
l_tranct_proc WHERE
[email protected]_id)
|
3、獲得任一步驟資料列表(含未處理和已處理)
以上為核心程式碼,當然由於工作流的具體需求不同,可調整相應程式碼。
第四部分、執行結果
1、系統引數配置
2、待處理列表
3、處理頁面
(注:當前為最後一處理,下一處理人選擇不可見)
4、撤回頁面
結語:
完整自定義工作流由於應用廣泛且業務邏輯複雜,要實現真正意義上通用的工作流還需要去做更多的分析和研究。
另本文不提供程式碼及其他資料下載,請勿留言索取。
拋磚引玉,歡迎拍磚!
參考文件: