吳潔明 王吉棟
摘要: 論述了一種基于關(guān)系數(shù)據(jù)庫的工作流管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。該工作流管理系統(tǒng)不僅擁有工作流管理系統(tǒng)應(yīng)有的前向調(diào)度、回退調(diào)度、用戶任務(wù)列表的展示等功能,還有效地利用了關(guān)系數(shù)據(jù)庫的成熟技術(shù),節(jié)省了工作流管理系統(tǒng)的開發(fā)成本。
關(guān)鍵詞: 關(guān)系數(shù)據(jù)庫; 工作流引擎; 流程定義; 流程實(shí)例
中圖分類號:TP311.5文獻(xiàn)標(biāo)識碼: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依賴于有限狀態(tài)機(jī),Jbpm綜合運(yùn)用了狀態(tài)圖、活動圖和PetriNet。
各大廠商開發(fā)的工作流產(chǎn)品側(cè)重于流程管理的通用性,導(dǎo)致系統(tǒng)非常復(fù)雜,再加上軟件設(shè)計(jì)文檔的缺乏,對于中小型項(xiàng)目來說,使用門檻比較高,因此很多公司選擇開發(fā)適合本公司的工作流組件。但開發(fā)一個運(yùn)行穩(wěn)定、有數(shù)據(jù)備份和恢復(fù)功能、支持并發(fā)、支持事務(wù)的工作流引擎,成本非常高?,F(xiàn)在的關(guān)系數(shù)據(jù)庫管理系統(tǒng)在數(shù)據(jù)備份、恢復(fù)、并發(fā)、事務(wù)處理等方面已經(jīng)做的非常成熟,如果把工作流和關(guān)系數(shù)據(jù)庫結(jié)合起來,工作流開發(fā)人員就可以直接利用這些數(shù)據(jù)庫的成熟技術(shù),把精力放在工作流引擎的架構(gòu)和調(diào)度策略的研究上,以降低開發(fā)成本。
1 工作流管理系統(tǒng)模型
根據(jù)“工作流管理聯(lián)盟”(Workflow Management Coliation, WfMC)的定義,工作流所要解決的主要問題是:使在多個參與者之間按照某種預(yù)定義的規(guī)則傳遞文檔、信息或任務(wù)的過程自動進(jìn)行,從而實(shí)現(xiàn)某個預(yù)期的業(yè)務(wù)目標(biāo),或者是促使此目標(biāo)的實(shí)現(xiàn)[1]。
工作流管理系統(tǒng)是一個軟件系統(tǒng),它完成工作流的定義和管理,并按照在計(jì)算機(jī)中預(yù)先定義好的工作流邏輯推進(jìn)工作流實(shí)例的執(zhí)行[1]。一個完整的工作流管理系統(tǒng)要包含業(yè)務(wù)流程定義模塊、工作流引擎模塊、用戶任務(wù)列表模塊和工作流監(jiān)管模塊。本文所述的基于關(guān)系數(shù)據(jù)庫的工作流管理系統(tǒng),是要充分利用關(guān)系數(shù)據(jù)庫的特點(diǎn),把業(yè)務(wù)流程的定義,流程的運(yùn)行時(shí)數(shù)據(jù),系統(tǒng)的業(yè)務(wù)數(shù)據(jù),系統(tǒng)所需的業(yè)務(wù)人員的信息,權(quán)限管理等都存儲在數(shù)據(jù)庫中,完成業(yè)務(wù)數(shù)據(jù)的流轉(zhuǎn)。工作流管理系統(tǒng)的架構(gòu)如圖1所示。
[客戶端][業(yè)務(wù)邏輯層][工作流引擎][流程定義模塊][數(shù)據(jù)訪問層][業(yè)務(wù)數(shù)據(jù)][組織機(jī)構(gòu)][流程實(shí)例][工作流定義]
圖1工作流管理系統(tǒng)的架構(gòu)圖
1.1 流程定義和活動
業(yè)務(wù)流程,為完成某一預(yù)定目標(biāo)而定義是的一系列的工作步驟。業(yè)務(wù)流程中的每一個步驟是一個活動[2]。活動是業(yè)務(wù)流程的最小工作單元?;顒涌梢园芏鄬傩?,如活動類型,執(zhí)行者等。工作流管理系統(tǒng)要處理用戶的業(yè)務(wù)流程,應(yīng)該先把業(yè)務(wù)流程抽象成計(jì)算機(jī)可以識別的流程定義,而流程定義是由一系列的活動組成的。
1.2 流程實(shí)例和任務(wù)
流程實(shí)例是業(yè)務(wù)流程的一次具體執(zhí)行。工作流引擎執(zhí)行的是流程實(shí)例,流程實(shí)例是由一系列任務(wù)組成的,任務(wù)是業(yè)務(wù)流程中活動的實(shí)例化[1]。工作流引擎調(diào)度的是流程實(shí)例的任務(wù),當(dāng)用戶調(diào)用工作流引擎提供的接口創(chuàng)建一個流程實(shí)例后,引擎就根據(jù)流程定義依次生成活動對應(yīng)的任務(wù)。并提供給不同的用戶對任務(wù)進(jìn)行操作。
本文所述的工作流管理系統(tǒng)就是要借助流程定義、活動、流程實(shí)例、任務(wù)等,來完成業(yè)務(wù)表單在用戶之間的流轉(zhuǎn)。系統(tǒng)的數(shù)據(jù)庫表之間的關(guān)系如圖2所示。
圖2數(shù)據(jù)庫各表之間的關(guān)系
業(yè)務(wù)流程表和活動表用來存儲業(yè)務(wù)流程定義,流程實(shí)例表和任務(wù)表存儲運(yùn)行時(shí)數(shù)據(jù),歷史流程實(shí)例表和歷史任務(wù)表存放已經(jīng)執(zhí)行完的流程實(shí)例,用戶表和角色表保存用戶的基本信息。每一個業(yè)務(wù)流程都是由一系列活動組成的,活動之間的前驅(qū)和后繼關(guān)系由前驅(qū)活動Ids和后繼活動Ids決定。每個活動的類型由分支類型字段和匯聚類型字段決定,分支類型的取值有:“順序類型”、“與分支類型”和“或分支類型”;匯聚類型的取值有:“順序類型”、“與匯聚類型”和“或匯聚類型”。
2 流程設(shè)計(jì)器
流程設(shè)計(jì)器的作用是提供一種描述工作流程的軟件,它把實(shí)際的過程步驟用圖視化的方法或簡單的文本描述出來并產(chǎn)生或轉(zhuǎn)化成規(guī)范的工作流定義語言格式[3]。
本文所述的工作流管理系統(tǒng)把業(yè)務(wù)流程拆分成活動存儲在活動表中,供工作流引擎使用。流程設(shè)計(jì)器提供有一張畫板和多種類型的活動。當(dāng)需要創(chuàng)建一個新的業(yè)務(wù)流程時(shí),用戶需要先指定要創(chuàng)建的業(yè)務(wù)流程的名稱、該流程關(guān)聯(lián)的業(yè)務(wù)表單的名稱和業(yè)務(wù)表單的主鍵,然后把組成該業(yè)務(wù)流程的所有活動拖動到畫板上,設(shè)定活動之間的先后關(guān)系,最后給每個活動指定分支類型和匯聚類型并且指定哪個角色有權(quán)限執(zhí)行此活動。流程設(shè)計(jì)器會按規(guī)則檢查用戶繪制的流程圖的正確性;點(diǎn)擊保存按鈕后,流程設(shè)計(jì)器會先把這個業(yè)務(wù)流程圖保存到業(yè)務(wù)流程表和活動表中。
3 工作流引擎
工作流引擎的作用是對流程定義進(jìn)行解釋,創(chuàng)建可以運(yùn)行的流程實(shí)例、控制流程實(shí)例的執(zhí)行。工作流管理系統(tǒng)對流程實(shí)例的操作是通過用戶調(diào)用工作流引擎提供的接口來進(jìn)行的。當(dāng)用戶調(diào)用啟動業(yè)務(wù)流程的接口時(shí),引擎會創(chuàng)建新的流程實(shí)例和流程實(shí)例的首任務(wù);當(dāng)用戶調(diào)用完成任務(wù)接口時(shí),引擎會生成下一步的任務(wù);當(dāng)用戶調(diào)用回退接口時(shí),引擎會把流程實(shí)例回退到之前的任務(wù)實(shí)例重新執(zhí)行。
3.1 流程的前向調(diào)度
任務(wù)執(zhí)行時(shí)重點(diǎn)是要區(qū)分任務(wù)節(jié)點(diǎn)的分支類型是“順序類型”、“與分支類型”還是“或分支類型”。任務(wù)節(jié)點(diǎn)的分支類型和其對應(yīng)的活動的分支類型相同,活動的分支類型由活動表的分支類型字段決定。
如果當(dāng)前任務(wù)的分支類型是“與分支類型”,當(dāng)用戶結(jié)束此任務(wù)時(shí),工作流引擎會創(chuàng)建當(dāng)前任務(wù)的所有后繼任務(wù)實(shí)例;如果當(dāng)前任務(wù)的分支類型是“或分支類型”,當(dāng)用戶結(jié)束此任務(wù)時(shí),工作流引擎要查詢其所有的后繼活動,顯示給用戶,供用戶選擇,用戶選擇完成后,工作流引擎會根據(jù)用戶選擇的活動,創(chuàng)建一個相應(yīng)的任務(wù)實(shí)例;如果當(dāng)前任務(wù)的分支類型是“順序類型”,當(dāng)用戶結(jié)束此任務(wù)時(shí),工作流引擎會查詢其后繼活動,如果其后繼活動的匯聚類型為“與匯聚類型”,則還要判斷這個活動的前驅(qū)任務(wù)是否已全部完成,如果已經(jīng)全部完成,則創(chuàng)建此活動對應(yīng)的任務(wù),否則不創(chuàng)建活動對應(yīng)的任務(wù)。前向調(diào)度程序流程圖如圖3所示。
圖3 前向調(diào)度的程序流程圖
3.2 流程的回退調(diào)度
一個功能完整的工作流管理系統(tǒng)還應(yīng)該支持流程回退。工作流的回退功能是把流程回退到已經(jīng)執(zhí)行過的前驅(qū)節(jié)點(diǎn),以滿足用戶輸入錯誤需要修改的需求。
當(dāng)用戶進(jìn)行流程回退操作時(shí),工作流引擎會查詢出所有可以回退到的任務(wù)供用戶選擇;用戶選擇完成后,引擎把當(dāng)前任務(wù)置為“completed”狀態(tài),把選擇的目標(biāo)任務(wù)置為“running”狀態(tài)?;赝四繕?biāo)任務(wù)執(zhí)行完后,引擎要根據(jù)目標(biāo)任務(wù)的分支類型做進(jìn)一步的處理:如果任務(wù)的分支類型是“或分支類型”,引擎要判斷用戶選擇的后繼任務(wù)是否為原來的執(zhí)行路徑,如果不是,則刪除此任務(wù)的所有后繼任務(wù)實(shí)例,按照用戶的選擇創(chuàng)建相應(yīng)的任務(wù)實(shí)例;如果任務(wù)的分支類型不是“或分支類型”,則任務(wù)執(zhí)行完成后,修改其狀態(tài)為“completed”,修改其直接后繼任務(wù)的狀態(tài)為“running”。
4 用戶任務(wù)列表
工作流引擎提供用戶接口讓用戶查詢自己的任務(wù)列表。當(dāng)用戶登錄系統(tǒng)后,應(yīng)用程序調(diào)用工作流引擎提供的接口,查詢出用戶可以執(zhí)行的任務(wù)實(shí)例并將其顯示在用戶界面上。本文用基于角色的訪問控制機(jī)制來設(shè)計(jì)此功能:首先根據(jù)崗位創(chuàng)建相應(yīng)的角色,然后根據(jù)用戶的職責(zé)授予相應(yīng)的角色,最后在定義流程的時(shí)候,為每個活動選擇一個角色。當(dāng)用戶登錄以后,系統(tǒng)會根據(jù)其角色顯示其可以執(zhí)行的任務(wù)列表,如果用戶選擇了某個任務(wù),工作流引擎就會把該用戶的Id保存到這個任務(wù)的用戶Id字段,并修改這個任務(wù)實(shí)例的狀態(tài)為“running”,其他擁有相同角色的用戶不能再選擇這個任務(wù)。用戶任務(wù)列表可實(shí)現(xiàn)以下幾個功能:
⑴ 啟動流程列表工作流引擎根據(jù)用戶角色查詢活動表,把與角色匹配的起始活動對應(yīng)的流程名稱顯示在用戶的“啟動任務(wù)列表”中,用戶點(diǎn)擊啟動流程按鈕,工作流引擎就會生成新的流程實(shí)例和初始任務(wù)。
⑵ 新生成的任務(wù)列表中新生成的任務(wù)實(shí)例的狀態(tài)為“ready”,用戶Id字段為空,工作流引擎根據(jù)這兩個條件和用戶的角色,查詢出當(dāng)前用戶可以處理的新生成的任務(wù)列表。
⑶ 回退的任務(wù)列表中回退的任務(wù)實(shí)例的狀態(tài)為“running”,用戶Id為當(dāng)前用戶的Id,后繼任務(wù)Ids不為空,工作流引擎根據(jù)任務(wù)這三個條件可以查詢出回退的任務(wù)實(shí)例列表。
5 工作流監(jiān)管
工作流監(jiān)管的作用是管理用戶和角色信息、掛起和恢復(fù)流程實(shí)例、停止和刪除工作流實(shí)例、查看工作流的運(yùn)行狀態(tài)、查詢歷史流程實(shí)例的流轉(zhuǎn)日志等[3]。
工作流管理系統(tǒng)提供正在執(zhí)行的工作流實(shí)例列表和歷史工作流實(shí)例列表。當(dāng)用戶需要掛起、恢復(fù)、停止、刪除工作流實(shí)例或者查看工作流實(shí)例的運(yùn)行狀態(tài)時(shí),可以進(jìn)入正在執(zhí)行的工作流實(shí)例列表,選擇相關(guān)的操作按鈕。每執(zhí)行完一個工作流實(shí)例,工作流引擎就會把當(dāng)前完成的流程實(shí)例及其所有的任務(wù)實(shí)例轉(zhuǎn)入到歷史流程實(shí)例和歷史任務(wù)表,當(dāng)用戶需要查詢歷史流程實(shí)例時(shí),可以進(jìn)入歷史流程實(shí)例列表選擇相關(guān)的操作按鈕。
6 結(jié)束語
本文所述的基于關(guān)系數(shù)據(jù)庫的工作流管理系統(tǒng)不僅可以滿足用戶的業(yè)務(wù)需求,而且利用了大型關(guān)系數(shù)據(jù)庫中的成熟技術(shù),例如:工作流引擎控制業(yè)務(wù)流程的調(diào)度時(shí)用到了數(shù)據(jù)庫的事務(wù)處理;用戶選擇處理任務(wù)時(shí)用到了數(shù)據(jù)庫的并發(fā)處理技術(shù);備份和恢復(fù)工作流實(shí)例的歷史數(shù)據(jù)用到了數(shù)據(jù)庫的備份和恢復(fù)功能。將工作流與關(guān)系數(shù)據(jù)庫結(jié)合,降低了工作流管理系統(tǒng)設(shè)計(jì)的復(fù)雜度,從而節(jié)省了開發(fā)成本。
參考文獻(xiàn):
[1]WfMC. The workflow reference model. 1994.
[2] 范玉順.工作流管理技術(shù)基礎(chǔ) [M].清華大學(xué)出版社,2001.
[3] 胡錦敏,張申生. 支持企業(yè)動態(tài)聯(lián)盟的敏捷工作流系統(tǒng)[J].計(jì)算機(jī)研究與發(fā)展,1999.36(12):1517~1523
[4] 羅海濱,范玉順,吳澄.工作流綜述[J].軟件學(xué)報(bào),2000.11(7):899~907
[5] 何清法,李國杰,焦麗梅. 基于關(guān)系結(jié)構(gòu)的輕量級工作流引擎[J].計(jì)算機(jī)研究與發(fā)展,2001.38(2):129~137
[6] 陳傳波,劉黎志.一個基于Web的工作流引擎及其實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2004,26(11):8-11.
[7] 葉立新,陳閎中,鄭航等.基于工作流技術(shù)的OA系統(tǒng)模型[J].計(jì)算機(jī)工程與應(yīng)用,2000.36(6):90~92
[8] 柴孝宗. 辦公自動化領(lǐng)域基于J2EE平臺的工作流引擎的設(shè)計(jì)與實(shí)現(xiàn)[D].西安電子科技大學(xué),2005.
[9] 吳少鴻. 基于Web的輕量級工作流管理系統(tǒng)的研究與實(shí)現(xiàn)[D].中國科學(xué)院研究生院(軟件研究所),2005.
[10] 徐建軍,譚慶平,楊艷萍.一種基于J2EE的工作流引擎體系結(jié)構(gòu)[J].計(jì)算機(jī)應(yīng)用,2005.25(2):469~471
[11] 倪曉穎. 基于XML技術(shù)的工作流管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].大連理工大學(xué),2006.
[12] 孫瑞志,史美林.工作流活動多實(shí)例的調(diào)度控制[J].軟件學(xué)報(bào),2005.16(3):400~406
[13] 劉黎.基于數(shù)據(jù)庫表示的工作流模型[D].中國科學(xué)院計(jì)算計(jì)算研究所,1999.
[14] 張慧,李建華,許甸,許海軍.一種工作流運(yùn)行時(shí)回退方法的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2008.30(5):88~91
[15] 杜傳業(yè),李茹.面向電子政務(wù)的輕量級工作流引擎[J].計(jì)算機(jī)應(yīng)用,2008.28(6):310~314