王舒揚,柳虹亮
(長春工業(yè)大學 軟件職業(yè)技術學院,吉林 長春 130022)
工作流管理技術是一種快速發(fā)展的技術,正在被越來越多的企業(yè)所應用。企業(yè)的日?;顒又校s有70%是屬于流程類活動,如訂單出貨流程、生產(chǎn)流程、企業(yè)內各類申請表單、公文簽審、信息傳遞與簽收、公司各類支出與收付等[1]。設備管理(包括設備采購的審批、設備維修等)也屬于流程類活動[2]。但與普通流程類活動相比,設備管理具有用戶層面廣泛、一次性購買量大、審批周期長、生命周期內維護頻繁等特點[3]。對大型企業(yè)來說,類似電腦等設備的審批周期(包括招標、采購到最終投入使用)可長達2~3個月左右,生命周期更是長達4~6a,期間持續(xù)增加的數(shù)據(jù)量會對工作流系統(tǒng)造成很大的壓力[4]。
OSWorkflow是完全用Java語言編寫的開放源代碼的工作流引擎,具有顯著的靈活性及完全面向有技術背景用戶的特點[5]。用戶可以根據(jù)自身的需求,利用這款開源軟件設計簡單或是復雜的工作流。通過使用,用戶就可以把工作中心放在業(yè)務和規(guī)則的定義上,而不需通過硬編碼的方式實現(xiàn)一個Petri網(wǎng)或是一個有窮自動機[6]。用戶可以最小代價把OSWorkflow整合到自己的程序中來。
文中設計實現(xiàn)了一個基于OSWorkflow的設備管理系統(tǒng),并解決了采用Oracle數(shù)據(jù)庫時大量數(shù)據(jù)查詢等關鍵問題。
OSWorkflow是三大主流開源工作流引擎之一,它基于FSM(有限狀態(tài)自動機,F(xiàn)initeState Machine)理論[7]。每一個state都是由step 和status聯(lián)合體現(xiàn)出來的,一個state到另一個state的狀態(tài)躍遷transition依賴于action的執(zhí)行,在action執(zhí)行前需要判斷動作的執(zhí)行條件是否滿足,在動作執(zhí)行改變狀態(tài)前后都可以調用function來執(zhí)行一些其它操作,動作執(zhí)行完成后通過判定條件來確定執(zhí)行結果result[8]。每一個流程都至少有一個或者多個活動的state,流程中至少有一個起始狀態(tài),一個或者多個終止狀態(tài)。OSWorkflow的基本元素及其相互關系如圖1所示。
圖1 OSWorkflow基本元素關系圖
基于OSWorkflow的設備管理系統(tǒng)采用J2EE技術、Spring框架和Oracle數(shù)據(jù)庫設計并實現(xiàn),主要分為如下幾個模塊。
對系統(tǒng)內的用戶基本信息進行增、刪、改、查操作,或對用戶的操作權限及所屬部門進行變更。
對用戶的角色信息進行增、刪、改、查操作。
對用戶所屬的組織信息進行增、刪、改、查操作。
對設備申請流程生成的設備采購明細進行采購。
針對已經(jīng)建賬的計算機設備,由財務人員進行固定資產(chǎn)卡片的財務信息填報。
設備管理系統(tǒng)的核心。一個完整的設備申請流程如下:
1)由“部門提報用戶”填報需要的計算機設備申請單,申請單上的內容為提報部門、提報人、提報計算機設備的類型、提報理由。個人申請結束承接2)。
2)由“部門管理用戶”進行審批,結果為同意/不同意,同時輸入詳細的審批意見。如果不同意則申請流程結束;如果同意則進入3)。
3)由“設備管理用戶”進行初審,結果為同意/不同意,同時輸入詳細的審批意見。如果不同意則有兩種情況:申請流程結束,或準備進行設備在庫分配,進入設備分配流程;如果同意則進入4)。
4)由“設備管理領導用戶”進行復審,結果為同意/不同意,同時輸入詳細的審批意見。如果不同意則申請流程結束;如果同意則進入5)。
5)由計算機設備申請人所在部門的“分管領導用戶”進行審批,結果為同意/不同意,同時輸入詳細的審批意見。如果不同意則申請流程結束;如果同意則進入6)。
6)由“項目管理用戶”進行計算機設備詳細配置清單的填報,然后由“項目管理領導用戶”對配置清單進行審核,如果不同意則返回“項目管理用戶”進行重新配置;如果同意則申請流程結束。
7)“設備管理用戶”可以根據(jù)申請設備清單進行選擇是否招標采購,如果“設備管理領導用戶”同意招標采購,則生成招標申請書。
8)保存完整的計算機設備申請的記錄。
此模塊采用了OSWorkflow技術,具體流程如圖2所示。
圖2 申請模塊流程
設備管理系統(tǒng)主要有以下關鍵問題需要解決:一是過長的申請審批流程造成的大量數(shù)據(jù)查詢失??;二是OSWorkflow僅負責流程的運轉,對流程流轉中產(chǎn)生的數(shù)據(jù),例如審批意見的保存需要做額外的操作。
為了確保工作流程的正確性,OSWorkflow并沒有采用直接連接數(shù)據(jù)庫使用sql語句進行流程數(shù)據(jù)處理的方式,而是使用 WorkflowExpressionQuery對象對數(shù)據(jù)庫進行操作。一個工作流查詢語句的處理流程如下:
1)使用FieldExpression對象對可操作項進行映射。FieldExpression繼承了Expression類,將工作流表中的字段以及基本操作映射為int型常量,例如public final static int ACTION=4。
2)使用NestedExpression對象創(chuàng)建復合表達式。NestedExpression同樣繼承了Expression類,其構造函數(shù)需要兩個參數(shù)。一是Expression數(shù)組對象,對象中的每個元素可以是另外一個NestedExpression對象,以此形成復合關系,也可是由FieldExpression具體實現(xiàn)的單獨的表達式。二是表示各個Expression表達式之間“和”與“或”關系的操作符expressionOperator。
3)使用 WorkflowExpressionQuery創(chuàng)建工作流查詢對象。WorkflowExpressionQuery以NestedExpression對象作為參數(shù)構建,還定義了表示排序的常量,例如public static final int SORT_DESC=-1。
4)調用AbstractWorkflow類中的getPersistence方法獲取 WorkflowStore實例。將 WorkflowExpressionQuery對象作為參數(shù)傳遞,在WorkflowStore接口的具體實現(xiàn)類JDBCWorkflowStore的query方法中對其進行解析并完成sql語句的創(chuàng)建。
5)將創(chuàng)建好的sql語句作為參數(shù)傳入doExpressionQuery方法中執(zhí)行,從結果中取出id列放入List對象中,將List對象返回,以返回的id為條件即可與業(yè)務表中的設備數(shù)據(jù)進行關聯(lián)查詢。
因為從設備申報到審批完成進入購買環(huán)節(jié)的時間很長,且購買數(shù)量為公司規(guī)模,數(shù)據(jù)庫內可能存在大量未完成的工作流流程數(shù)據(jù)。在最終返回的List結果中可能包含超過1 000條流程id數(shù)據(jù),而Oracle不支持IN子句中List的個數(shù)超過1000,從而導致查詢失敗。為解決這個問題,在OSWorkflow中新增一個數(shù)據(jù)庫表OS_QUERYENTRY,建立JDBCWorkflowStore類的子類并重寫其中的doExpressionQuery方法,將原來放入List中的id寫入到新增的表OS_QUERYENTRY中。具體步驟如下:
1)組合語句,將結果插入到OS_QUERYENTRY表中。
2)查詢序號。
3)刪除冗余查詢數(shù)據(jù)。
新增表后的OSWorkflow數(shù)據(jù)庫結構如圖3所示。
圖3 OSWorkflow數(shù)據(jù)庫結構
實際應用中一個典型查詢過程如下:1)準備查詢條件集合對象。
2)根據(jù)頁面選擇條件匹配查詢條件。
3)裝配查詢條件。
最終查詢效果如圖4所示。
在OSWorkflow中,函數(shù)function是用來定義(引用)并執(zhí)行外部的商業(yè)邏輯和服務,實現(xiàn)OSWorkflow與外部具體的應用之間交互[9]。系統(tǒng)需要保存設備審批過程中的審批意見,只要擴展function接口就可以。function有兩種類型:pre function(預處理函數(shù))和post function(后處理函數(shù))。pre function在工作流的一個轉變操作執(zhí)行之前調用,post function在工作流的一個轉變操作執(zhí)行完之后調用[10]。審批意見的保存應在流程流轉后,因此,采用post function方式處理。同時,因為流程運轉周期長度不定,審批意見應該依附于當前環(huán)節(jié)的審批動作(action),而不應該依附于整個當前審批環(huán)節(jié)(step),function在action級別的應用如圖5所示。
圖4 系統(tǒng)查詢效果
圖5 function在action級別的應用
具體實現(xiàn)代碼如下:
針對設備管理流程用戶層面廣泛、一次性購買量大、審批周期長、生命周期內維護頻繁等特點,采用OSWorkflow作為工作流引擎,在此基礎上設計了某電力公司設備管理系統(tǒng),并解決了Oracle數(shù)據(jù)庫平臺下大量數(shù)據(jù)查詢等問題。實際應用結果表明,文中設計的設備管理系統(tǒng)滿足企業(yè)要求,簡化了設備申報流程,大大提高了企業(yè)的工作效率。
[1]范玉順.工作流管理技術基礎[M].北京:清華大學出版社,2001.
[2]史美林,楊光信,向勇,等.WFMS:工作流管理系統(tǒng)[J].計算機學報,1999(3):326-328.
[3]李紅巖.基于工作流技術的OA系統(tǒng)研究[J].長春工業(yè)大學學報:自然科學版,2008,29(3):352-355.
[4]黃世秀,高飛,胡小華.基于工作流的電子政務系統(tǒng)[J].合肥工業(yè)大學學報,2004,27(2):140-143.
[5]夏冬,白樹仁,鄧惠建.基于J2EE的工作流管理系統(tǒng)模型[J].計算機工程與科學,2006,28(3):123-125.
[6]侯秀萍,邵春明,鄭虹.基于工作流網(wǎng)的過程模型的合理性分析[J].長春工業(yè)大學學報:自然科學版,2006,27(2):162-164.
[7]陳傳波,劉黎志.一個基于 Web的工作流引擎及其實現(xiàn)[J].計算機工程與科學,2004,26(11):18-22.
[8]李宏初,馮艷蕾.基于P2P的工作流管理系統(tǒng)研究與應用[J].長春工業(yè)大學學報:自然科學版,2007,28(4):435-437.
[9]黃麗梅,李佳林,李瑞然.子流程技術在工作流設計中的應用[J].長春工業(yè)大學學報:自然科學版,2010,31(1):62-65.
[10]唐文忠.基于工作流技術的構件模型研究[J].計算機應用研究,2008,25(7):2057-2059.