基于Word的工作流表單引擎設(shè)計(jì)和實(shí)現(xiàn) 1.引言 工作流技術(shù)是當(dāng)今信息系統(tǒng)中應(yīng)用最廣泛的技術(shù),廣泛應(yīng)用于辦公自動(dòng)化系統(tǒng),、電子政務(wù)應(yīng)用等多個(gè)信息化應(yīng)用領(lǐng)域。根據(jù)國(guó)際工作流管理聯(lián)盟(WfMC)的定義“工作流是一類能夠完全或者部分自動(dòng)執(zhí)行的業(yè)務(wù)過程,,根據(jù)一系列過程規(guī)則,,文檔,、信息或任務(wù)能夠在不同的執(zhí)行者之間傳遞、執(zhí)行”,。 表單在工作流系統(tǒng)中承載著各種信息的收集和發(fā)布的任務(wù),,在應(yīng)用系統(tǒng)中存在著大量的表單驅(qū)動(dòng)的業(yè)務(wù)流程,業(yè)務(wù)的靈活多變必然要求工作流表單引擎也要具有靈活,、易用的特性,。在當(dāng)今工作流的發(fā)展中,“缺少一個(gè)表單定制工具來定制流程所對(duì)應(yīng)的頁(yè)面”成為新的研究課題,。然而,,由于UI開發(fā)不屬于流程引擎的范疇,很多工作流產(chǎn)品不包含表單開發(fā)工具,,或者只包含一個(gè)簡(jiǎn)單而死板的頁(yè)面開發(fā)工具,,對(duì)應(yīng)用的UI開發(fā)不能提供很好的幫助。 隨著近年來Microsoft Word在辦公領(lǐng)域的普及,,使得Word已成為各種文檔,、表單事實(shí)上的標(biāo)準(zhǔn)。本文在對(duì)Microsoft Word深入研究的基礎(chǔ)上,,給出了基于Word的工作流表單引擎的設(shè)計(jì)思路和實(shí)現(xiàn)方案,,借助Word具有的普及性、易用性等諸多優(yōu)點(diǎn),,對(duì)于實(shí)現(xiàn)大量的以表單驅(qū)動(dòng)的業(yè)務(wù)流程自動(dòng)化,,具有很高的應(yīng)用價(jià)值。 2.Microsoft Word對(duì)象模型 構(gòu)建基于Microsoft Word的工作流表單引擎,首先要對(duì)Word有足夠的了解,。一篇Word文檔是由若干諸如段(Paragraph),表(Table)等對(duì)象構(gòu)成,。Word文檔中經(jīng)常操作的對(duì)象主要有以下一些: Application : 代表Word應(yīng)用程序。 Documents : Word當(dāng)前打開的所有文檔對(duì)象所組成的集合,。 Document : 代表一篇文檔。 InlineShapes : 代表由InlineShape對(duì)象組成的集合,,代表文檔,、區(qū)域或選定內(nèi)容的所有嵌入式圖形。 InlineShape : 代表文檔的文字層中的對(duì)象,,只能是圖片,、OLE對(duì)象或ActiveX控件。 Paragraphs : 代表所選內(nèi)容,、范圍或文檔中的所有段落,。 圖1 Word對(duì)象模型 Fig.1 Word Object Model Range : 該對(duì)象代表文檔中的一個(gè)范圍。每一個(gè)Range 對(duì)象由一起始和一終止字符位置定義,。 若要針對(duì)Microsoft Word開發(fā)解決方案,,就需要與Word對(duì)象模型[1] (圖1)進(jìn)行交互。 3.表單信息模型的建立 針對(duì)政府,、企業(yè)需要處理的大量的基于表單的業(yè)務(wù)流程,,本文提出了一種利用表單來表達(dá)工作流信息的方法,流程運(yùn)行中的各種信息,如表單的結(jié)構(gòu)、表單的數(shù)據(jù),、該表單所代表的業(yè)務(wù)類型和內(nèi)容,、任務(wù)創(chuàng)建時(shí)間、任務(wù)涉及到的參與者等信息都是記錄在表單中的,。表單是這種模式下的主要信息載體,也是系統(tǒng)和用戶交互的主要方式,。 定義1(過程) 一個(gè)過程是定義好的一個(gè)有向圖p=(A,L),這里A={αi|i=1…,n}是活動(dòng)集;L{(αi,αj)|αi,αjA}∈是鏈接集,一個(gè)鏈接如(αi,αj)表示第i個(gè)活動(dòng)是第j個(gè)活動(dòng)的前置活動(dòng),。 定義2(表單) 一個(gè)表單Fk(k=1,…,K),由一系列的表單單元組成,每個(gè)表單單元由最基本的表單元素組成,即Fk={Um|m=1,…,M},Um={fl|l=1,…,L},f表示表單的基本元素,。 根據(jù)表單信息的范圍和表現(xiàn)形式,可以把表單信息模型分為三層:表示層、數(shù)據(jù)層和控制層,,其結(jié)構(gòu)如圖2所示: 圖2 表單信息模型 Fig.2 Form Information Model 表示層即表單的外觀,,包括表單的樣式和表單域。表單樣式主要由文字,、表格,、圖形等元素構(gòu)成。表單域是進(jìn)行數(shù)據(jù)交互的接口,,常用的表單域?qū)ο笥校簶?biāo)簽(Label),、文本框(TextBox)、復(fù)選框(CheckBox),、選項(xiàng)按鈕(OptionButton)等,。 數(shù)據(jù)層包含了表單中的全部數(shù)據(jù)信息。其中,,表單域數(shù)據(jù)是數(shù)據(jù)信息的主體,,用于系統(tǒng)與用戶以及用戶之間的數(shù)據(jù)交互。表單的相關(guān)信息包含兩部分內(nèi)容:用戶基本信息和用戶權(quán)限,。其中,,用戶的基本信息包括參與者的部分重要屬性,如姓名,、角色和E-Mail等。用戶的權(quán)限信息描述了不同的參與者對(duì)表單的操作權(quán)限,,如只讀、只寫,、無權(quán),、可見或不可見等。 控制層用于控制表示層和數(shù)據(jù)層的實(shí)現(xiàn),。對(duì)表示層的控制主要包括對(duì)表單樣式和表單域的添加,、編輯,、刪除等,,對(duì)各種表單元素屬性的控制,如顏色,、大小,、位置等,以及對(duì)表單域?qū)ο蟮膶傩钥刂?,如默認(rèn)值,、名稱等。對(duì)數(shù)據(jù)層的控制,,目的是將表單的相關(guān)數(shù)據(jù)提取出來進(jìn)行處理,,并存放到后臺(tái)數(shù)據(jù)庫(kù)中。 4.Word表單引擎的系統(tǒng)設(shè)計(jì) 4.1 需求分析 在政府,、企業(yè)中大量的以表單驅(qū)動(dòng)的業(yè)務(wù)流程中,,表單是處于核心地位的,,表單的樣式、內(nèi)容和組合方式?jīng)Q定了業(yè)務(wù)的種類和特點(diǎn),。因此,,客觀上要求表單引擎在工作流管理系統(tǒng)中應(yīng)該成為核心部件,并以此作為整個(gè)系統(tǒng)設(shè)計(jì)的根本原則和出發(fā)點(diǎn),。 在軟件開發(fā)的開始階段,,通常由用例圖來描述客戶的需求,用例圖用圖形化的方式表示系統(tǒng)需求,,具有簡(jiǎn)單,、直觀的特點(diǎn)。Word表單引擎的用例圖如下: 圖3 用例圖 Fig.3 Use-Case Diagram 4.2 總體設(shè)計(jì) 從總體架構(gòu)上分析,,工作流管理系統(tǒng)是以表單引擎為核心和基礎(chǔ)的一套懸掛式系統(tǒng),表單引擎的內(nèi)部結(jié)構(gòu)以及與其他子系統(tǒng)的關(guān)系如圖4所示: 圖4 表單引擎結(jié)構(gòu) Fig.4 Structure of the Form Engine 表單定義工具屬于表單信息模型中的表示層,。根據(jù)表單定義創(chuàng)建表單,,包括表單樣式和表單域。 表單管理器,、表單調(diào)度管理器和訪問控制管理器同屬于表單信息模型中的控制層,。表單管理器主要功能包括創(chuàng)建新表單、修改現(xiàn)存表單和刪除表單等操作,。表單調(diào)度管理器在工作流引擎的支持下,,實(shí)現(xiàn)表單的發(fā)布和提交。訪問控制管理器在相關(guān)服務(wù)系統(tǒng)得支持下,,對(duì)組織機(jī)構(gòu)中與該業(yè)務(wù)相關(guān)的參與者進(jìn)行訪問控制,。 表單數(shù)據(jù)屬于表單信息模型中的數(shù)據(jù)層。其中,,持久化數(shù)據(jù)是指表單中的各個(gè)元素,,將以模板的形式整體存入模板庫(kù)。動(dòng)態(tài)數(shù)據(jù)是指表單域中的數(shù)據(jù),,在提交的同時(shí)會(huì)發(fā)送到數(shù)據(jù)庫(kù)中相應(yīng)的數(shù)據(jù)表中,。數(shù)據(jù)訪問基礎(chǔ)服務(wù)則通過ADO(ActiveX Data Objects)來實(shí)現(xiàn)表單引擎與后臺(tái)數(shù)據(jù)庫(kù)的連接。 4.3 數(shù)據(jù)庫(kù)設(shè)計(jì) 根據(jù)系統(tǒng)的總體設(shè)計(jì),,表單引擎的數(shù)據(jù)庫(kù)結(jié)構(gòu)如圖5所示: 圖5 數(shù)據(jù)庫(kù)設(shè)計(jì) Fig.5 Database Design 其中,,表單和數(shù)據(jù)項(xiàng)之間是一對(duì)多的關(guān)系,它們共同構(gòu)成表單模板,。表單實(shí)例和數(shù)據(jù)實(shí)例之間也是一對(duì)多的關(guān)系,,它們構(gòu)成具體的表單實(shí)例。同樣,,同一表單模板也可創(chuàng)建多個(gè)表單實(shí)例,。 5.Word表單引擎的系統(tǒng)設(shè)計(jì) 5.1 Word電子表單的創(chuàng)建 (1)創(chuàng)建表單樣式,。根據(jù)相關(guān)的業(yè)務(wù)需求和規(guī)范,利用Word所提供的功能,,可以在已有的Word文檔上進(jìn)行修改,,也可以重新定義一份表單。這樣完成的表單是靜態(tài)的,,不具有數(shù)據(jù)交互能力,。 (2)添加表單域。將創(chuàng)建表單域的功能以Word工具欄的形式提供給用戶,。Word中,,CommandBars集合代表 Microsoft Word 中的菜單欄和所有的工具欄,要自定義工具欄,,首先創(chuàng)建CommandBars對(duì)象,,如:myCommandBar,通過CommandBars.Add()方法將其添加到CommandBars集合,再定義各Button對(duì)象,再用myCommandBar.Controls.Add()方法將自定義Button對(duì)象添加到工具欄,。 表單域?qū)嵸|(zhì)上是ActiveX控件,,在Word中可用OLE編程標(biāo)識(shí)符(有時(shí)也稱ProgID)創(chuàng)建Automation對(duì)象。表1列出了AxtiveX控件的OLE編程標(biāo)識(shí)符[4],。 表1 ActiveX控件的OLE編程標(biāo)識(shí)符 Tab.1 OLE programmatic identifier of the ActiveX controls
要在光標(biāo)所在處添加表單域,,需要用到Selection對(duì)象和InlineShapes集合對(duì)象,前者代表某個(gè)選定的范圍或插入點(diǎn),,后者代表文檔,、區(qū)域或選定內(nèi)容中的所有嵌入式圖形。利用InlineShapes集合對(duì)象的AddOLEControl方法,,并設(shè)置ClassType(對(duì)象類型)的值為相應(yīng)的OLE編程標(biāo)識(shí)符,,可以將控件添加至文檔,如:添加文本框:ClassType:="Forms.TextBox.1",。 為使表單域能通過鼠標(biāo)拖動(dòng)而自由移動(dòng)位置,,需要將InlineShapes對(duì)象轉(zhuǎn)換位Shape對(duì)象,可以使用ConvertToShape方法來完成圖形的類型轉(zhuǎn)換,。 5.2 Word電子表單的維護(hù) 維護(hù)一張已創(chuàng)建的Word電子表單,,可使用Word自身的功能編輯表單樣式,使用表單引擎的擴(kuò)展功能修改其中的表單域,。以編輯文本框?yàn)槔?,主要涉及到的屬?/SPAN>[4]如表2所示: 表2 文本框常用屬性 Tab.2 Common properties of the TextBox Object
在為Application對(duì)象編寫過程之前,,必須創(chuàng)建新的類模塊并聲明一個(gè)包含事件的Application類型對(duì)象,。例如,假定已創(chuàng)建新的類模塊并命名為EventClassModule,。該類模塊包含下列代碼: Public WithEvents App As Word.Application 定義了包含事件的新對(duì)象后,,為其編寫事件過程,,雙擊鼠標(biāo)時(shí),App_WindowBeforeDoubleClick()事件發(fā)生,,單擊鼠標(biāo)右鍵,,App_WindowBeforeRightClick()事件發(fā)生,在相應(yīng)的過程中自定義功能,。 在運(yùn)行過程前,,必須將類模塊中已聲明的對(duì)象連接到Application對(duì)象,可在任何模塊中實(shí)現(xiàn)過程:Register_Event_Handler(),,使App對(duì)象指向Microsoft Word Application,。事件發(fā)生時(shí),將運(yùn)行類模塊中的事件過程,,即根據(jù)對(duì)象的不同類型,,彈出相應(yīng)的屬性設(shè)置窗體,對(duì)各個(gè)屬性進(jìn)行設(shè)置,。 5.3 訪問控制 表單引擎可以對(duì)組織機(jī)構(gòu)中的各個(gè)角色以及個(gè)人進(jìn)行權(quán)限設(shè)置,,主要支持3種類型的訪問控制: (1) 對(duì)Word自身功能的控制 (2) 對(duì)表單引擎擴(kuò)充功能的控制 (3) 對(duì)表單域的訪問控制 Word菜單欄、工具欄(包括表單引擎自定義的工具欄)中的每一個(gè)子項(xiàng)目都有唯一的標(biāo)識(shí),,通過該標(biāo)識(shí)可以設(shè)置每一個(gè)項(xiàng)目的可見性與可用性,對(duì)應(yīng)于Visible和Enabled屬性,,從而達(dá)到限制Word功能的目的,。 同樣,在表單中的表單域?qū)ο笫且粋€(gè)集合,,通過ActiveDocument.Shapes.count可以統(tǒng)計(jì)出表單中表單域的總個(gè)數(shù),,其中的表單域?qū)ο罂杀硎緸?/SPAN>Shapes(i).OLEFormat.Object,其中i是索引號(hào),,因此只需對(duì)各個(gè)對(duì)象的Visible,、Enabled屬性進(jìn)行相應(yīng)得設(shè)置,即可實(shí)現(xiàn)對(duì)表單域的控制,。 5.4 使用Jmail組件發(fā)布表單 Word表單引擎不是基于B/S結(jié)構(gòu)的,表單的流轉(zhuǎn)方式是在郵件服務(wù)器的支持下,,通過E-Mail方式實(shí)現(xiàn)的。E-Mail服務(wù)和技術(shù)自從因特網(wǎng)建立到現(xiàn)在,,已經(jīng)發(fā)展的非常成熟,,普及率也很高,因此表單流轉(zhuǎn)采用E-Mail方式實(shí)現(xiàn),更容易被用戶接受和使用,。 在眾多的郵件發(fā)送組件中,,Jmail組件功能強(qiáng)大,可支持多種格式的郵件發(fā)送,,比如以HTML或TXT的方式發(fā)送,,用戶也可設(shè)置郵件發(fā)送的優(yōu)先級(jí)等,。Jmail支持發(fā)送附件,并具有密件發(fā)送/抄送/緊急信件發(fā)送能力,,此外Jmail能詳細(xì)的記錄日志,,便于維護(hù),最關(guān)鍵的是Jmail是免費(fèi)的,,因此可以降低開發(fā)成本,,所以非常值得使用。 在系統(tǒng)中注冊(cè)Jmail.dll控件,將控件添加到工程中,,就可以調(diào)用Jmail的各項(xiàng)功能,。例如:可以使用Subject屬性設(shè)定消息的標(biāo)題,用Body屬性設(shè)置郵件正文,,用Recipients,、Sender屬性指定收件人、發(fā)件人的郵件地址,,ServerAddress指定郵件服務(wù)器的地址等,,最后調(diào)用Execute()方法將表單送出。 5.5 表單引擎與數(shù)據(jù)庫(kù)的連接 表單引擎通過ADO(ActiveX Data Object)建立無源數(shù)據(jù)庫(kù)連接,。ADO[4]是Microsoft數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)接口,,是建立在OLE DB之上的高層數(shù)據(jù)庫(kù)訪問技術(shù)。它封裝了OLE DB提供的接口,,相比于OLE DB提供者,,ADO的接口可以使程序員在更高級(jí)別上進(jìn)行數(shù)據(jù)交互,大大簡(jiǎn)化了程序編制,,增加了程序的可移植性,。而采用無源數(shù)據(jù)庫(kù)連接方式,無需用戶配置ODBC環(huán)境,,利用ADO就可通過代碼進(jìn)行連接,。 在連接數(shù)據(jù)庫(kù)前,需要在工程中引入 Microsoft ActiveX Data Objects 2.0 Library,,然后創(chuàng)建Connection對(duì)象并設(shè)置ConnectionString屬性進(jìn)行連接,。ConnectionString為可讀寫string類型,用于指定一個(gè)連接字符串,,告訴ADO如何連接數(shù)據(jù)庫(kù),,如: ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=DB_NAME;Data Source=127.0.0.1" 其中Initial Catalog指定數(shù)據(jù)庫(kù)的名稱,Data Source指定數(shù)據(jù)庫(kù)服務(wù)器的IP地址,。 用open方法打開建立的連接,,創(chuàng)建結(jié)果集對(duì)象Recordset,根據(jù)需求編寫SQL語(yǔ)句,,利用Connection對(duì)象的Execute()方法可將結(jié)果集返回到客戶端,,進(jìn)行各種處理,。 最后用Connection對(duì)象的Close方法關(guān)閉已建立的連接。 6.結(jié)論 傳統(tǒng)的基于HTML/XML表單的工作流管理系統(tǒng)(WFMS),,在用戶友好性,、擴(kuò)展性和靈活性方面存在較大的缺陷,采用基于Word的表單引擎能夠很好的解決這些問題,。在實(shí)踐中,,我們已經(jīng)將Word表單引擎與工作流管理系統(tǒng)集成,通過在具體業(yè)務(wù)中的應(yīng)用和對(duì)應(yīng)用情況的認(rèn)真分析,,得出結(jié)論如下: (1) 基于Word構(gòu)建的工作流表單引擎能使用戶輕松的創(chuàng)建,、維護(hù)各種動(dòng)態(tài)電子表單而不需要用戶具有專業(yè)的技術(shù),且能對(duì)企業(yè),、政府中現(xiàn)存的大量靜態(tài)電子表單進(jìn)行升級(jí),,較好的解決了各種表單驅(qū)動(dòng)的業(yè)務(wù)流程中表單的不確定性問題。 (2) Word表單引擎采用電子郵件作為表單流轉(zhuǎn)的方式,,提高了工作流系統(tǒng)的靈活性和易用性,,較好的解決了各種表單驅(qū)動(dòng)的業(yè)務(wù)中流程的不確定性問題。 (3) Word電子表單繼承了Microsoft Word的全部功能,,功能強(qiáng)大,,操作簡(jiǎn)單,且具有“所見即所得”的打印特性,,使得政府或企業(yè)可以輕松完成電子表單的打印存檔工作,,而且用戶不需要花費(fèi)專門的時(shí)間和經(jīng)費(fèi)接受培訓(xùn),就可以很好的適應(yīng)系統(tǒng),,從多方面為組織降低成本。
基于表單的分布式工作流系統(tǒng)研究與實(shí)現(xiàn) |
|