吳潔明 王吉棟
摘要: 論述了一種基于關系數據庫的工作流管理系統的設計與實現。該工作流管理系統不僅擁有工作流管理系統應有的前向調度、回退調度、用戶任務列表的展示等功能,還有效地利用了關系數據庫的成熟技術,節省了工作流管理系統的開發成本。
關鍵詞: 關系數據庫; 工作流引擎; 流程定義; 流程實例
中圖分類號:TP311.5文獻標識碼:A 文章編號:1006-8228(2012)04-32-03
Design and implementation of workflow management system based on relational database
Wu Jieming, Wang Jidong
(College of Information Engineering, North China University of Technology, Beijing 100144, China)
Abstract: The authors describe in this paper a workflow management system which is based on relational database. The wokflow management system not only has forward and backward scheduling and task list which is necessary to a complete workflow management system, but also uses the mature technology of relational database which can save its development cost.
Key words: relational database; workflow engine; process definition; process instance
0 引言
目前,市面上有很多開源工作流軟件,最常用的有Shark、Osworkflow和Jbpm。其中Shark的流程定義語言采用XPDL,Osworkflow依賴于有限狀態機,Jbpm綜合運用了狀態圖、活動圖和PetriNet。
各大廠商開發的工作流產品側重于流程管理的通用性,導致系統非常復雜,再加上軟件設計文檔的缺乏,對于中小型項目來說,使用門檻比較高,因此很多公司選擇開發適合本公司的工作流組件。但開發一個運行穩定、有數據備份和恢復功能、支持并發、支持事務的工作流引擎,成本非常高。現在的關系數據庫管理系統在數據備份、恢復、并發、事務處理等方面已經做的非常成熟,如果把工作流和關系數據庫結合起來,工作流開發人員就可以直接利用這些數據庫的成熟技術,把精力放在工作流引擎的架構和調度策略的研究上,以降低開發成本。
1 工作流管理系統模型
根據“工作流管理聯盟”(Workflow Management Coliation, WfMC)的定義,工作流所要解決的主要問題是:使在多個參與者之間按照某種預定義的規則傳遞文檔、信息或任務的過程自動進行,從而實現某個預期的業務目標,或者是促使此目標的實現[1]。
工作流管理系統是一個軟件系統,它完成工作流的定義和管理,并按照在計算機中預先定義好的工作流邏輯推進工作流實例的執行[1]。一個完整的工作流管理系統要包含業務流程定義模塊、工作流引擎模塊、用戶任務列表模塊和工作流監管模塊。本文所述的基于關系數據庫的工作流管理系統,是要充分利用關系數據庫的特點,把業務流程的定義,流程的運行時數據,系統的業務數據,系統所需的業務人員的信息,權限管理等都存儲在數據庫中,完成業務數據的流轉。工作流管理系統的架構如圖1所示。
[客戶端][業務邏輯層][工作流引擎][流程定義模塊][數據訪問層][業務數據][組織機構][流程實例][工作流定義]
圖1工作流管理系統的架構圖
1.1 流程定義和活動
業務流程,為完成某一預定目標而定義是的一系列的工作步驟。業務流程中的每一個步驟是一個活動[2]。活動是業務流程的最小工作單元。活動可以包含很多屬性,如活動類型,執行者等。工作流管理系統要處理用戶的業務流程,應該先把業務流程抽象成計算機可以識別的流程定義,而流程定義是由一系列的活動組成的。
1.2 流程實例和任務
流程實例是業務流程的一次具體執行。工作流引擎執行的是流程實例,流程實例是由一系列任務組成的,任務是業務流程中活動的實例化[1]。工作流引擎調度的是流程實例的任務,當用戶調用工作流引擎提供的接口創建一個流程實例后,引擎就根據流程定義依次生成活動對應的任務。并提供給不同的用戶對任務進行操作。
本文所述的工作流管理系統就是要借助流程定義、活動、流程實例、任務等,來完成業務表單在用戶之間的流轉。系統的數據庫表之間的關系如圖2所示。
圖2數據庫各表之間的關系
業務流程表和活動表用來存儲業務流程定義,流程實例表和任務表存儲運行時數據,歷史流程實例表和歷史任務表存放已經執行完的流程實例,用戶表和角色表保存用戶的基本信息。每一個業務流程都是由一系列活動組成的,活動之間的前驅和后繼關系由前驅活動Ids和后繼活動Ids決定。每個活動的類型由分支類型字段和匯聚類型字段決定,分支類型的取值有:“順序類型”、“與分支類型”和“或分支類型”;匯聚類型的取值有:“順序類型”、“與匯聚類型”和“或匯聚類型”。
2 流程設計器
流程設計器的作用是提供一種描述工作流程的軟件,它把實際的過程步驟用圖視化的方法或簡單的文本描述出來并產生或轉化成規范的工作流定義語言格式[3]。
本文所述的工作流管理系統把業務流程拆分成活動存儲在活動表中,供工作流引擎使用。流程設計器提供有一張畫板和多種類型的活動。當需要創建一個新的業務流程時,用戶需要先指定要創建的業務流程的名稱、該流程關聯的業務表單的名稱和業務表單的主鍵,然后把組成該業務流程的所有活動拖動到畫板上,設定活動之間的先后關系,最后給每個活動指定分支類型和匯聚類型并且指定哪個角色有權限執行此活動。流程設計器會按規則檢查用戶繪制的流程圖的正確性;點擊保存按鈕后,流程設計器會先把這個業務流程圖保存到業務流程表和活動表中。
3 工作流引擎
工作流引擎的作用是對流程定義進行解釋,創建可以運行的流程實例、控制流程實例的執行。工作流管理系統對流程實例的操作是通過用戶調用工作流引擎提供的接口來進行的。當用戶調用啟動業務流程的接口時,引擎會創建新的流程實例和流程實例的首任務;當用戶調用完成任務接口時,引擎會生成下一步的任務;當用戶調用回退接口時,引擎會把流程實例回退到之前的任務實例重新執行。
3.1 流程的前向調度
任務執行時重點是要區分任務節點的分支類型是“順序類型”、“與分支類型”還是“或分支類型”。任務節點的分支類型和其對應的活動的分支類型相同,活動的分支類型由活動表的分支類型字段決定。
如果當前任務的分支類型是“與分支類型”,當用戶結束此任務時,工作流引擎會創建當前任務的所有后繼任務實例;如果當前任務的分支類型是“或分支類型”,當用戶結束此任務時,工作流引擎要查詢其所有的后繼活動,顯示給用戶,供用戶選擇,用戶選擇完成后,工作流引擎會根據用戶選擇的活動,創建一個相應的任務實例;如果當前任務的分支類型是“順序類型”,當用戶結束此任務時,工作流引擎會查詢其后繼活動,如果其后繼活動的匯聚類型為“與匯聚類型”,則還要判斷這個活動的前驅任務是否已全部完成,如果已經全部完成,則創建此活動對應的任務,否則不創建活動對應的任務。前向調度程序流程圖如圖3所示。
圖3 前向調度的程序流程圖
3.2 流程的回退調度
一個功能完整的工作流管理系統還應該支持流程回退。工作流的回退功能是把流程回退到已經執行過的前驅節點,以滿足用戶輸入錯誤需要修改的需求。
當用戶進行流程回退操作時,工作流引擎會查詢出所有可以回退到的任務供用戶選擇;用戶選擇完成后,引擎把當前任務置為“completed”狀態,把選擇的目標任務置為“running”狀態。回退目標任務執行完后,引擎要根據目標任務的分支類型做進一步的處理:如果任務的分支類型是“或分支類型”,引擎要判斷用戶選擇的后繼任務是否為原來的執行路徑,如果不是,則刪除此任務的所有后繼任務實例,按照用戶的選擇創建相應的任務實例;如果任務的分支類型不是“或分支類型”,則任務執行完成后,修改其狀態為“completed”,修改其直接后繼任務的狀態為“running”。
4 用戶任務列表
工作流引擎提供用戶接口讓用戶查詢自己的任務列表。當用戶登錄系統后,應用程序調用工作流引擎提供的接口,查詢出用戶可以執行的任務實例并將其顯示在用戶界面上。本文用基于角色的訪問控制機制來設計此功能:首先根據崗位創建相應的角色,然后根據用戶的職責授予相應的角色,最后在定義流程的時候,為每個活動選擇一個角色。當用戶登錄以后,系統會根據其角色顯示其可以執行的任務列表,如果用戶選擇了某個任務,工作流引擎就會把該用戶的Id保存到這個任務的用戶Id字段,并修改這個任務實例的狀態為“running”,其他擁有相同角色的用戶不能再選擇這個任務。用戶任務列表可實現以下幾個功能:
⑴ 啟動流程列表工作流引擎根據用戶角色查詢活動表,把與角色匹配的起始活動對應的流程名稱顯示在用戶的“啟動任務列表”中,用戶點擊啟動流程按鈕,工作流引擎就會生成新的流程實例和初始任務。
⑵ 新生成的任務列表中新生成的任務實例的狀態為“ready”,用戶Id字段為空,工作流引擎根據這兩個條件和用戶的角色,查詢出當前用戶可以處理的新生成的任務列表。
⑶ 回退的任務列表中回退的任務實例的狀態為“running”,用戶Id為當前用戶的Id,后繼任務Ids不為空,工作流引擎根據任務這三個條件可以查詢出回退的任務實例列表。
5 工作流監管
工作流監管的作用是管理用戶和角色信息、掛起和恢復流程實例、停止和刪除工作流實例、查看工作流的運行狀態、查詢歷史流程實例的流轉日志等[3]。
工作流管理系統提供正在執行的工作流實例列表和歷史工作流實例列表。當用戶需要掛起、恢復、停止、刪除工作流實例或者查看工作流實例的運行狀態時,可以進入正在執行的工作流實例列表,選擇相關的操作按鈕。每執行完一個工作流實例,工作流引擎就會把當前完成的流程實例及其所有的任務實例轉入到歷史流程實例和歷史任務表,當用戶需要查詢歷史流程實例時,可以進入歷史流程實例列表選擇相關的操作按鈕。
6 結束語
本文所述的基于關系數據庫的工作流管理系統不僅可以滿足用戶的業務需求,而且利用了大型關系數據庫中的成熟技術,例如:工作流引擎控制業務流程的調度時用到了數據庫的事務處理;用戶選擇處理任務時用到了數據庫的并發處理技術;備份和恢復工作流實例的歷史數據用到了數據庫的備份和恢復功能。將工作流與關系數據庫結合,降低了工作流管理系統設計的復雜度,從而節省了開發成本。
參考文獻:
[1]WfMC. The workflow reference model. 1994.
[2] 范玉順.工作流管理技術基礎 [M].清華大學出版社,2001.
[3] 胡錦敏,張申生. 支持企業動態聯盟的敏捷工作流系統[J].計算機研究與發展,1999.36(12):1517~1523
[4] 羅海濱,范玉順,吳澄.工作流綜述[J].軟件學報,2000.11(7):899~907
[5] 何清法,李國杰,焦麗梅. 基于關系結構的輕量級工作流引擎[J].計算機研究與發展,2001.38(2):129~137
[6] 陳傳波,劉黎志.一個基于Web的工作流引擎及其實現[J].計算機工程與科學,2004,26(11):8-11.
[7] 葉立新,陳閎中,鄭航等.基于工作流技術的OA系統模型[J].計算機工程與應用,2000.36(6):90~92
[8] 柴孝宗. 辦公自動化領域基于J2EE平臺的工作流引擎的設計與實現[D].西安電子科技大學,2005.
[9] 吳少鴻. 基于Web的輕量級工作流管理系統的研究與實現[D].中國科學院研究生院(軟件研究所),2005.
[10] 徐建軍,譚慶平,楊艷萍.一種基于J2EE的工作流引擎體系結構[J].計算機應用,2005.25(2):469~471
[11] 倪曉穎. 基于XML技術的工作流管理系統設計與實現[D].大連理工大學,2006.
[12] 孫瑞志,史美林.工作流活動多實例的調度控制[J].軟件學報,2005.16(3):400~406
[13] 劉黎.基于數據庫表示的工作流模型[D].中國科學院計算計算研究所,1999.
[14] 張慧,李建華,許甸,許海軍.一種工作流運行時回退方法的研究與實現[J].計算機工程與科學,2008.30(5):88~91
[15] 杜傳業,李茹.面向電子政務的輕量級工作流引擎[J].計算機應用,2008.28(6):310~314