黃偉建,宋曉潔,王子軒
(1.河北工程大學信息與電氣工程學院,河北邯鄲 056038;2.北京師范大學 藝術與傳媒學院,北京 100875)
辦公自動化系統(Office Automation,OA)的核心是對辦公室的文書處理。目前,由于各個企業、單位的管理方式千差萬別,管理的流程不盡相同,并且事務處理的文書流轉過程差異非常大,導致了大多數工作流系統仍然不夠靈活,無法滿足不斷變化的實際需求[1]。針對工作流的動態性等問題,國內外很多科研機構定義了多種工作流模型,試圖從不同角度建立能夠適應業務過程動態變化的工作流模型,使其具有可伸縮性和可擴展性等適應性特征。文獻[2]提出了基于對象Petri網(Object Petri-Net,OPN)和基于 OPN 的文本描述語言和工作流過程定義接口標準,即支持動態工作流的流程建模。文獻[3]闡述了一種基于數據庫技術的柔性工作流建模方法,將DBMS與工作流技術結合起來,定義了一系列工作流活動的工作流模板及其完整約束,并將工作流進行細分,提供了基于DBMS的工作流管理實現動態性和適應性的一種方法。文獻[4]中對工作流的柔性做出了大體的分類與討論,設計了一個基于面向對象技術開發的工作流管理系統的原型。
本文將工作流技術中的過程邏輯從應用軟件中分離出來,使用戶可以在不修改應用軟件具體功能的情況下,通過修改原有過程模型或定義新的過程模型來改變和擴展系統功能,來提高了軟件的適應性和重用率,以便更好地發揮出系統的效能。
主要負責對流程、規則以及活動這三種定義對象的定義和讀取。用戶在進行相應對象定義時,該組件調用用戶的接口,首先應判斷用戶需要定義的對象,根據定義對象的類型,引擎定義組件得到用戶相應的輸入,最終將其存入引擎定義數據庫中的相應定義對象中。其中,定義存儲器是用來判斷用戶定義的對象并將其拆分成適合存儲的形式。活動選擇器是用來讀取當前的所有活動定義并記錄用戶選擇的結果。引擎定義組件工作原理如圖1所示。

主要負責將流程定義拆分成單個活動,并對路由進行解析和運算。該組件可以分解一個完整的流程定義,也可以分解一個流程定義中的某個子串,其輸出的結果為單個活動的序列和活動間的路由關系。其中,流程分析器讀出流程的定義,并調用運算分析器進行路由運算和活動分解。流程解析組件工作原理如圖2所示。
主要負責進程的啟動,進程活動的路由控制,狀態的判斷與活動的執行。包括進程啟動器、進程存儲器、進程控制器、狀態判斷器和活動執行器。進程啟動器是生成新的進程和活動并將其實例化為實際運行的實例;進程存儲器主要是存儲進程和活動;進程控制器負責活動的路由流轉并通過狀態判斷器來判斷當前活動的狀態和當前進程的狀態;活動執行器是將當前的活動分配給有權限的用戶并且將用戶的操作結果記錄下來。流轉控制組件工作原理如圖3所示。

元數據是描述信息資源或數據等對象的數據,一經建立,便可共享。由于元數據也是數據,因此可以用類似數據的方法在數據庫中進行存儲和獲取。如果提供數據元的組織同時提供描述數據元的元數據,將會使數據元的使用變得準確而高效。用戶在使用數據時可以首先查看其元數據以便能夠獲取自己所需的信息[5]。
文中采用結構性元數據來描述流程定義。從數據庫設計層面上來看,傳統的辦公自動化系統中,需求階段的每項辦公業務的功能與流程都是固定不變的,設計階段會將這些業務流程轉化成數據庫中固定的一個或多個表。在業務功能和流程有需要變化時,則應該修改底層數據庫中的業務表結構,這樣的話代價會很大。因為不同業務功能所經歷的操作的活動內容和活動的個數不同,所以,采用元數據來描述流程定義和進程。
首先定義單個活動,根據不同的業務流程需要,動態地生成流程定義,就相當于為每一個流程定義實現了一張虛擬的流程定義表。當某一流程定義實例化時,組成一個進程,由活動實例來描述,根據虛擬的流程定義表結構來存儲。換句話說當業務功能與流程有需要變化時,不需要觸動底層數據庫的表結構,只需要重新組織出一張虛擬表即可。這種方法提高了系統的靈活性,減少重復性的開發工作,具有很大的優勢。

Java的優點包括跨平臺性,較高的安全性,面向對象,良好的健壯性等。JavaBean具有Java語言的所有優點,是Java在組建技術方面的擴展,而JavaBean的存在也離不開Java語言的強大支持[6]。另外,對于JavaBean,用戶可以在應用程序構造器工具中使用各種JavaBean組件,而不需要編寫任何代碼。因此文中采用Java和JavaBean技術來進行實現。
針對工作流的動態修改存在的三個問題[7]—動態性不強、可重用性不高、缺乏對修改操作合法性的檢驗,本文增加了動態修改組件部分,主要負責對活動、進程、流程的修改。包括修改執行器、修改存儲器、級聯修改判斷器。根據接收到的修改請求判斷做何修改,在保證規則定義合法的情況下,將對活動、進程、流程的修改結果存入修改存儲器。級聯修改判斷器是用來判斷與修改對象所關聯的進程或流程,并對其是否可修改作出判斷。動態修改組件工作原理如圖4所示。


動態工作流的核心部分就是動態修改,而動態修改策略是動態修改的主要研究內容之一。本文主要是對工作流兩方面進行動態修改:流程的定義和進程。
對流程定義的動態修改相當于在工作流中新增加了一個流程定義,但是系統中可能已經有多個進程已經按照舊的流程定義在運行,并且這些進程的執行速度不同,因此處理好已經運行的進程是問題的關鍵。傳統的策略——重新啟動策略、繼續執行策略、轉換策略,并不能很好地處理所遇到的問題。其中,重新啟動策略相當于刪除了流程中與業務相關的活動,放棄了所有已經在執行的進程,這種代價非常昂貴;繼續執行策略是對已經運行的進程不做任何處理,該執行還繼續執行,這種策略對實際變化的響應速度比較慢,靈活性比較差;轉換策略是自動將已經運行的進程轉換為新定義的流程結構來運行,但是已經運行的進程執行速度不同,若將其生硬的轉換為新的流程定義會造成無法繼續執行的問題。
本文將轉換的策略分為兩種情況來處理:(1)系統中已經存在需要轉換的進程有多個,并且它們從來沒有進行過動態修改;(2)系統中已經存在需轉換的進程有多個,有的進行過動態修改,有的沒有進行過動態修改。
針對以上兩種情況,文中實行的轉換策略為:(1)對于沒有經過任何動態修改的進程,若用戶同意按照新的流程定義結構執行,則按照新的流程定義結構繼續執行;反之,則按照舊的流程定義結構來執行。(2)對于單個曾經修改過的進程,通常是因為一些實際業務的變動進行的修改,一般不允許轉換成新的流程定義結構,但如果需要按照新的流程定義結構來執行,則對其進行修改。
本設計主要包括動態工作流運行所支撐的數據庫,動態工作流引擎,WEB應用服務和用戶界面。
其中,動態工作流運行所支撐的數據庫包括引擎定義數據庫與引擎運行數據庫兩部分,引擎定義數據庫屬于動態工作流的定義層面,用來存儲動態工作流的定義信息,如流程定義、規則定義、角色定義、活動定義等;引擎運行數據庫屬于工作流的執行層面,用來存儲工作流的進程,是用戶通過動態工作流引擎采用流程定義來驅動進程運行時候所產生的數據。引擎定義數據庫與引擎運行數據庫的分離使維護起來更容易些。
動態工作流引擎是指workflow作為應用系統的一部分,并為之提供對各應用系統有決定作用的根據角色、分工和條件的不同決定信息傳遞路由、內容等級等核心解決方案[8]。
WEB應用服務主要是提供了對辦公自動化中業務工作的支持。
用戶界面是提供給用戶的操作接口,根據管理員和普通用戶的不同權限分為工作流管理界面和普通用戶界面。動態工作流引擎技術方案設計如圖5所示。
本文設計的動態工作流引擎繼承了原有的工作流引擎,是在原有的工作流引擎基礎上的擴展,是文中整個動態工作流技術設計方案的核心部分,主要包括引擎定義組件、流程解析組件、流轉控制組件、動態修改組件以及進程管理。引擎提供了流程定義,并為進程提供執行環境,讓其在適當的時候按照規定的路由,將特定的某一活動送達到相應的執行者,來實現業務流程的自動化。與此同時,當工作流外部環境有變化時,還提供對流程定義與進程的動態修改的支持。這樣,既能修改流程定義、分配與執行活動,又能了解流程定義修改后對進程的影響。
本文通過動態工作流引擎的設計來完成對工作流的動態修改,使其能夠正確地對工作流程進行定義,能夠按照用戶要求進行動態修改與驗證,保證修改后活動、流程、進程的正常執行,同時,修改操作簡單,易于用戶使用。還需進一步完善的工作包括兩點,一是圖形化流程定義,目前采用的是字符輸入的方式,用戶使用時不夠直觀明了;二是動態的生成表單,由于在業務系統中會存在各種各樣的表單,而且表單的元素也很復雜,因此能夠動態的生成表單是今后主要研究的一個方向。
[1]曲桂東.工作流技術在OA系統中的應用[D].山東:中國海洋大學,2006.
[2]曹化工,楊曼紅.基于對象Petri網的工作流過程定義[J].計算機輔助設計與圖形學學報,2001,13(1):13-18.
[3]趙莉香,殷國富,舒 斌.基于數據庫管理的柔性工作流建模方法[J].計算機集成制造系統,2003,9(2):112-116.
[4]朱文華,王 茜.企業動態聯盟中柔性工作流的研究與實現[D].小型微型計算機系統,2003,24(4):758-762.
[5]許永濤,王延章,陳雪龍.電子政務辦公系統中的元數據研究[J].計算機工程與設計,2009,28(4):907-910.
[6]李霏坤.用于數據訪問的JavaBean自動生成器設計與實現[J].計算機系統應用,2003(12):28-30.
[7]方明.基于動態工作流的企業辦公自動化系統的研究[D]湖北:武漢理工大學,2005.
[8]鄧水光,吳朝暉,俞鎮.支持動態建模的工作流管理系統的研究與設計[J].計算機輔助設計與圖形學學報,2004,16(5):712-717.