版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 成都信息工程學(xué)院</b></p><p><b> 學(xué)位論文</b></p><p> B/S結(jié)構(gòu)下的OA流程可視化的研究與實(shí)現(xiàn)</p><p> B/S結(jié)構(gòu)下的OA流程可視化的研究與實(shí)現(xiàn)</p><p><b> 摘 要</b><
2、/p><p> 工作流是指整個(gè)或部分業(yè)務(wù)流程在計(jì)算機(jī)支持下的全自動(dòng)或半自動(dòng)化。在計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境下,工作任務(wù)在多個(gè)人或單位之間的流轉(zhuǎn)實(shí)際上將表現(xiàn)為信息或數(shù)據(jù)在多個(gè)人之間的傳送。使用可視化的OA工作流設(shè)計(jì)工具,用戶不需要編程就可以定義設(shè)計(jì)出滿足要求的收發(fā)文流程,實(shí)際使用效果良好。論文以可視化的OA工作流設(shè)計(jì)工具的開發(fā)為基礎(chǔ),主要闡述五個(gè)方面的內(nèi)容。第一部分介紹了工作流和工作流設(shè)計(jì)工具的相關(guān)概念與開發(fā)背景;第二部分對(duì)工作
3、相關(guān)基礎(chǔ)理論技術(shù)、系統(tǒng)環(huán)境與平臺(tái)基礎(chǔ)、以及開發(fā)技術(shù)進(jìn)行了描述;第三部分對(duì)系統(tǒng)功能進(jìn)行了分析;第四部分詳細(xì)介紹了系統(tǒng)流程、流程可視化設(shè)計(jì)的實(shí)際開發(fā)過程中使用到的關(guān)鍵技術(shù);最后一部分在總結(jié)了系統(tǒng)開發(fā)心得的同時(shí),提出了目前系統(tǒng)存在的不足和有待改進(jìn)的地方。</p><p> 關(guān)鍵詞:工作流;流程定義;可視化;Java Applet</p><p> The Research and Imple
4、mentation of Visual OA workflow Based on B/S Structure</p><p><b> Abstract</b></p><p> Workflow is a full automation or semi-automation on business process, which is supported by t
5、he computer technology. In the distributed environment, tasks transferred among different persons and departments are information or data passed among participants according to the defined set of rules. Using visual OA w
6、orkflow designing tools, users can define and design receiving and ending document workflow without programming. The actual result is very satisfactory. This paper is based on the develop</p><p> Key words:
7、 workflow;flow define;visual;Java Applet</p><p><b> 目 錄</b></p><p><b> 論文總頁(yè)數(shù):30頁(yè)</b></p><p><b> 1 引言1</b></p><p> 1.1 課題背景1&l
8、t;/p><p> 1.2 技術(shù)可行性研究1</p><p> 1.2.1 Java Applet技術(shù)的可行性研究1</p><p> 1.2.2 XML技術(shù)的可行性研究1</p><p> 1.2.3 Microsoft Office Access 2003數(shù)據(jù)庫(kù)的可行性研究1</p><p> 2 相
9、關(guān)基礎(chǔ)理論技術(shù)以及開發(fā)技術(shù)1</p><p> 2.1工作流的定義與存在問題描述2</p><p> 2.1.1 OA中工作流的定義2</p><p> 2.1.2工作流中的流程定義問題3</p><p> 2.2 java applet和applet繪圖技術(shù)的介紹3</p><p> 2.2.1
10、applet的介紹3</p><p> 2.2.2 Applet的AWT繪制4</p><p> 2.3系統(tǒng)環(huán)境與平臺(tái)基礎(chǔ)5</p><p> 3 系統(tǒng)需求分析與總體設(shè)計(jì)5</p><p> 3.1系統(tǒng)需求分析5</p><p> 3.2 系統(tǒng)功能介紹5</p><p>
11、 3.3 系統(tǒng)模塊功能和設(shè)計(jì)思想6</p><p> 3.4數(shù)據(jù)庫(kù)設(shè)計(jì)7</p><p> 3.4.1 E-R圖設(shè)計(jì)7</p><p> 3.4.2 表的構(gòu)建8</p><p> 3.4.3 數(shù)據(jù)庫(kù)連接實(shí)現(xiàn)9</p><p> 4 系統(tǒng)功能模塊實(shí)現(xiàn)9</p><p> 4
12、.2流程可視化設(shè)計(jì)實(shí)現(xiàn)10</p><p> 4.2.1界面可視化10</p><p> 4.2.2 繪圖功能設(shè)計(jì)11</p><p> 4.2.3 流程圖保存和讀取方法設(shè)計(jì)17</p><p> 4.2.4 節(jié)點(diǎn)間關(guān)系保存的實(shí)現(xiàn)23</p><p> 5 系統(tǒng)測(cè)試結(jié)果及存在的問題和改進(jìn)的方案27
13、</p><p><b> 結(jié) 論28</b></p><p><b> 參考文獻(xiàn)28</b></p><p><b> 致 謝29</b></p><p><b> 聲 明30</b></p><p&
14、gt;<b> 1 引言</b></p><p><b> 1.1 課題背景</b></p><p> 辦公自動(dòng)化(OA-Office Automation)是將現(xiàn)代化辦公和計(jì)算機(jī)網(wǎng)絡(luò)功能結(jié)合起來的一種新型的辦公方式,通過網(wǎng)絡(luò),組織機(jī)構(gòu)內(nèi)部的人員可跨越時(shí)間、地點(diǎn)協(xié)同工作。OA中涉及到諸多業(yè)務(wù)流程,流程的定義對(duì)與OA系統(tǒng)中業(yè)務(wù)的自動(dòng)流轉(zhuǎn)具有十
15、分重要的意義,但是在一般B/S模式下的OA系統(tǒng),對(duì)于流程的定義都是文字型或者表單形式的,而不是圖形化的,因?yàn)榛贖TML解析的B/S在繪圖方面存在缺陷,因此大多B/S的OA系統(tǒng)在流程定義時(shí),為了達(dá)到可視化的效果,都采用了流程定義用C/S來輔助。但是java中的applet技術(shù)可以實(shí)現(xiàn)在B/S下的繪圖,因此,結(jié)合applet技術(shù),可以在B/S系統(tǒng)中直接嘗試流程的可視化定義研究。</p><p> 1.2 技術(shù)可行
16、性研究</p><p> 在對(duì)可視化流程設(shè)計(jì)工具的研究和實(shí)現(xiàn)過程中一共用到了三種技術(shù):Java Applet、XML、Microsoft Office Access2003。在技術(shù)難度方面,由于有指導(dǎo)老師的指導(dǎo)和相關(guān)的參考文獻(xiàn),使得在開發(fā)過程中所遇到的困難都能夠一一得到解決。</p><p> 1.2.1 Java Applet技術(shù)的可行性研究</p><p>
17、 本系統(tǒng)利用Java Applet作為開發(fā)工具,是因?yàn)槌墒斓腏ava技術(shù)采用面向?qū)ο蟮木幊谭椒ā殉绦蚝蛿?shù)據(jù)封裝起來作為一個(gè)對(duì)象,并為每個(gè)對(duì)象賦予相應(yīng)的屬性。而Java Applet具有能嵌入到瀏覽器中運(yùn)行,能通過可視化技術(shù)手段實(shí)現(xiàn)繪圖功能,能連接數(shù)據(jù)庫(kù)服務(wù)器和應(yīng)用服務(wù)器等這些特點(diǎn),完全滿足了此次B/S結(jié)構(gòu)下OA流程可視化研究和實(shí)現(xiàn)的各種要求。</p><p> 1.2.2 XML技術(shù)的可行性研究</
18、p><p> “可擴(kuò)展標(biāo)記語(yǔ)言”(XML) 提供一種描述結(jié)構(gòu)化數(shù)據(jù)的方法。與主要用于控制數(shù)據(jù)的顯示和外觀的 HTML 標(biāo)記不同,XML 標(biāo)記用于定義數(shù)據(jù)本身的結(jié)構(gòu)和數(shù)據(jù)類型。利用XML技術(shù)可實(shí)現(xiàn)將繪制圖形中的節(jié)點(diǎn)關(guān)系和圖形信息保存在XML文件中并通過XML文件提供上層接口服務(wù)的功能。</p><p> 1.2.3 Microsoft Office Access 2003數(shù)據(jù)庫(kù)的可行性研究&
19、lt;/p><p> 系統(tǒng)采用Microsoft Office Access 2003作為開發(fā)數(shù)據(jù)庫(kù),使用于中度規(guī)模的數(shù)據(jù)錄入要求。它通過工具界面所提供的組件輸入數(shù)據(jù)到數(shù)據(jù)庫(kù),可以使用查詢?cè)O(shè)計(jì)和SQL實(shí)現(xiàn)查詢并生成報(bào)表。</p><p> 2 相關(guān)基礎(chǔ)理論技術(shù)以及開發(fā)技術(shù)</p><p> 2.1工作流的定義與存在問題描述</p><p>
20、 2.1.1 OA中工作流的定義</p><p> 當(dāng)今社會(huì)分工越來越細(xì),在一個(gè)單位內(nèi)部也越來越強(qiáng)調(diào)專業(yè)化,大部分工作都需要多個(gè)部門和員工合作完成。一個(gè)制度良好的單位往往對(duì)各種工作的工作流程以文件的形式固定下來,即使是管理不太正規(guī)的單位也有約定俗成的工作步驟。這種工作流程保證了一件任務(wù)能按預(yù)定的順序從起點(diǎn)流向終點(diǎn),并且在需要的時(shí)候可以跟蹤、查詢和統(tǒng)計(jì)。</p><p> 工作流(wo
21、rkflow)的概念是為提高工作效率的研究而產(chǎn)生的,目前尚無(wú)統(tǒng)一、明確的定義。工作流管理聯(lián)盟(WorkFlow Management Coalition ,WFMC)將工作流定義為:業(yè)務(wù)流程的全部或部分自動(dòng)化,在此過程中,文檔、信息或者任務(wù)按照一定的過程規(guī)則流轉(zhuǎn),實(shí)現(xiàn)組織成員間的協(xié)調(diào)工作以期達(dá)到業(yè)務(wù)的整體目標(biāo)。</p><p> 工作流包括以下幾個(gè)要素:</p><p> 實(shí)體(Ent
22、ity):是工作流的主體,是需要隨著工作流一起流動(dòng)的物件(Object)。例如,在一個(gè)采購(gòu)申請(qǐng)批準(zhǔn)流程中,實(shí)體就是采購(gòu)申請(qǐng)單;在公文審批流程中,實(shí)體就是公文。</p><p> 參與者(Participant):是各個(gè)處理步驟中的責(zé)任人,可能是人,也可能是某個(gè)職能部門,還可能是某個(gè)自動(dòng)化的設(shè)備;</p><p> 流程定義(Flow Definition):是實(shí)現(xiàn)某工作目標(biāo)而要完成的一
23、系列步驟的描述。它包含了所有使業(yè)務(wù)過程能被工作流執(zhí)行服務(wù)的必要信息。這些信息包含起始和終止條件、各個(gè)組成活動(dòng)、活動(dòng)調(diào)度規(guī)則、各業(yè)務(wù)的參與和需要做的工作、相關(guān)應(yīng)用次序和數(shù)據(jù)的調(diào)用信息等。過程由活動(dòng)和相關(guān)數(shù)據(jù)組成。</p><p> 流程定義工具被用來創(chuàng)建計(jì)算機(jī)可處理的業(yè)務(wù)過程描述。它可是形式過程定義語(yǔ)言或?qū)ο箨P(guān)系模型,也可以是簡(jiǎn)單地規(guī)定用戶間信息傳輸?shù)囊唤M路由命令。</p><p> 在
24、本論文中所研究的可視化流程設(shè)計(jì)工具就是一種通過Java 語(yǔ)言實(shí)現(xiàn)的利用圖形來定義業(yè)務(wù)流程模型的一種工具。</p><p> WFMC對(duì)工作流有一個(gè)簡(jiǎn)化的定義由一個(gè)四元組{Pt,Pa,Dt,Ti}對(duì)其進(jìn)行描述:</p><p> 1)工作流參與者(Workflow Participant):定義活動(dòng)的執(zhí)行者,執(zhí)行者可以是人和其他實(shí)體。</p><p> 2)工作
25、流過程活動(dòng)(Workflow Process Activity):定義工作流活動(dòng)的執(zhí)行步驟,它可分為原子活動(dòng)和子工作流過程。前者不可再分,后者可由原子活動(dòng)和其他子工作流組成。</p><p> 3)工作流相關(guān)數(shù)據(jù)(Workflow Relevant Data):定義工作流活動(dòng)和應(yīng)用所涉及的數(shù)據(jù)信息,它們可能包含系統(tǒng)和環(huán)境數(shù)據(jù)。</p><p> 4)躍遷信息(Transition In
26、formation):定義工作流活動(dòng)執(zhí)行的依賴信息,決定活動(dòng)之間的躍遷、一個(gè)活動(dòng)的完成可能對(duì)其他活動(dòng)的執(zhí)行產(chǎn)生影響。</p><p> 下面給出一個(gè)例子,并用上面的定義的規(guī)范進(jìn)行分解:</p><p> Pt = {擬稿人(處員)A,處室領(lǐng)導(dǎo)B,處室會(huì)簽負(fù)責(zé)人C,領(lǐng)導(dǎo)D,核稿人E,打字員F,檔案室G}</p><p> Pa = {擬稿a,送審b,送核稿c,審
27、核d,寫審核意見e,送會(huì)簽f,會(huì)簽意見g,返回?cái)M稿人h,寫核稿意見i,送領(lǐng)導(dǎo)批示j,編號(hào)k,送打字室l,寫批示意見m,返回核稿人n,排版印刷o,封發(fā)p,送檔案室q,歸檔r}</p><p><b> Dt = {文件}</b></p><p> Ti = {Pt(i):->t Pt(j)}表示從一個(gè)狀態(tài)到達(dá)另一個(gè)狀態(tài),t 是觸發(fā)條件,</p>
28、<p> 這些定義和例子將是我們通過流程設(shè)計(jì)工具設(shè)計(jì)流程時(shí)的參考。</p><p> 2.1.2工作流中的流程定義問題</p><p> 在一般B/S模式下的OA系統(tǒng),對(duì)于流程的定義都是文字型或者表單形式的,而不是圖形化的,因?yàn)榛贖TML解析的B/S在繪圖方面存在缺陷,因此大多B/S的OA系統(tǒng)在流程定義時(shí),為了達(dá)到可視化的效果,都采用了流程定義用C/S來輔助。而java中
29、的applet技術(shù)恰恰可以實(shí)現(xiàn)在B/S下的繪圖,因此結(jié)合applet技術(shù)可以在B/S系統(tǒng)中直接嘗試流程的可視化定義研究。</p><p> 如何將上一小節(jié)的工作流定義轉(zhuǎn)變成B/S結(jié)構(gòu)下的OA系統(tǒng)可以具體運(yùn)行的程序?首先在數(shù)據(jù)庫(kù)中設(shè)計(jì)一組表單作為狀態(tài)的模板,用一XML文檔來保存流程圖形的狀態(tài),所有XML 文檔保存在一個(gè)數(shù)據(jù)庫(kù)XML表中。上層接口通過讀取并解釋數(shù)據(jù)庫(kù)中的XML文件來實(shí)現(xiàn)工作流程。來如何設(shè)計(jì)出有效的可
30、視化流程設(shè)計(jì)工具是本文的重點(diǎn)。</p><p> 2.2 java applet和applet繪圖技術(shù)的介紹</p><p> 2.2.1 applet的介紹</p><p> Applet是使用Java語(yǔ)言編寫,可以在瀏覽器環(huán)境中運(yùn)行的小應(yīng)用程序。它與Application的區(qū)別主要在于其執(zhí)行方式的不同。application 是從其中的main() 方法開
31、始運(yùn)行的,而Applet 是在瀏覽器中運(yùn)行的。首先必須創(chuàng)建一個(gè)HTML 文件,通過編寫HTML語(yǔ)言代碼告訴瀏覽器載入何種Applet 以及如何運(yùn)行。就因?yàn)閍pplet能在瀏覽器里運(yùn)行的這一特點(diǎn),滿足了B/S結(jié)構(gòu)下的瀏覽器界面的需求,所以我們?yōu)檫x擇了applet作為可視化OA工作流程設(shè)計(jì)工具的開發(fā)工具。 </p><p> 小應(yīng)用程序的生命周期相對(duì)于Application而言較為復(fù)雜。在其生命周期中涉及到Appl
32、et類的四個(gè)方法(也被JApplet類繼承):init()、start()、stop()和destroy()。</p><p> Applet的生命周期中有四個(gè)狀態(tài):初始態(tài)、運(yùn)行態(tài)、停止態(tài)和消亡態(tài)。當(dāng)程序執(zhí)行完init()方法以后,Applet程序就進(jìn)入了初始態(tài);然后馬上執(zhí)行start()方法,Applet程序進(jìn)入運(yùn)行態(tài);當(dāng)Applet程序所在的瀏覽器圖標(biāo)化或者是轉(zhuǎn)入其它頁(yè)面時(shí),該Applet程序馬上執(zhí)行sto
33、p()方法,Applet程序進(jìn)入停止態(tài);在停止態(tài)中,如果瀏覽器又重新裝載該Applet程序所在的頁(yè)面,或者是瀏覽器從圖標(biāo)中復(fù)原,則Applet程序馬上調(diào)用start()方法,進(jìn)入運(yùn)行態(tài);當(dāng)然,在停止態(tài)時(shí),如果瀏覽器關(guān)閉,則Applet程序調(diào)用destroy()方法,進(jìn)入消亡態(tài)。</p><p> 2.2.2 Applet的AWT繪制 </p><p> Applet程序中所采用的AWT
34、的繪圖機(jī)制主要涉及三個(gè)方法:paint()方法、update()方法和repaint()方法,update()方法和paint()方法都有一個(gè)Graphics類參數(shù)。Graphics是畫圖的關(guān)鍵,它可以支持兩種繪圖:一種是基本的繪圖,如:畫線、矩形、圓等;另一種是畫圖象,主要用于動(dòng)畫制作。 </p><p> 要進(jìn)行繪圖,首先要找到一個(gè)Graphics類的對(duì)象。update()方法和paint()方法所傳遞的參
35、數(shù)都是Graphics類的對(duì)象,因此主要是通過重載它們來進(jìn)行繪圖,這是在動(dòng)畫程序中經(jīng)常使用的方法。我們還可以通過getGraphics()方法得到一個(gè)Graphics類的對(duì)象,這個(gè)對(duì)象和update()方法和paint()方法中所傳遞的對(duì)象一樣,都是該成員所對(duì)應(yīng)的Graphics類的對(duì)象。得到了Graphics類的對(duì)象,就可使用各種繪圖方法。 </p><p> Graphics中提供的圖形繪制方法有: <
36、;/p><p> paint( ) //進(jìn)行繪圖的具體操作,必須有程序員重寫 </p><p> update( ) //用于更新圖形,先清除背景、前景,再調(diào)用paint() </p><p> repaint( ) /*用于重繪圖形,在組件外形發(fā)生變化,即大小改變或位置移動(dòng)時(shí),repaint( )方法立即被系統(tǒng)自動(dòng)調(diào)用,而實(shí)際上repaint()方法是自動(dòng)調(diào)用u
37、pdate()方法*/ </p><p> 下面的方法支持基本的繪圖和畫圖像: </p><p> void drawLine( ) //畫直線,void drawArc( ) //畫弧線,</p><p> void drawPolygon( ) //畫多邊形,void drawRect( ) //畫矩形,</p><p> vo
38、id drawRoundRect( ) //畫帶有圓角的矩形,</p><p> void fill3DRect( ) //畫三維矩形,</p><p> void fillOval( ) //畫橢圓,</p><p> 這些方法都是來自于java.awt.Graphics類 </p><p> 2.3系統(tǒng)環(huán)境與平臺(tái)基礎(chǔ)</
39、p><p> OA可視化工作流設(shè)計(jì)工具在Java環(huán)境基礎(chǔ)上,后臺(tái)以Microsoft Office Access 2003為數(shù)據(jù)庫(kù)平臺(tái),前臺(tái)采用具有較強(qiáng)跨平臺(tái)性的Java Applet開發(fā)。具體環(huán)境描述如下:Microsoft Windows Server 2003;Microsoft Office Access 2003;jdk1.5.0_09;Eclipse 3.1。</p><p>
40、 3 系統(tǒng)需求分析與總體設(shè)計(jì)</p><p><b> 3.1系統(tǒng)需求分析</b></p><p> 在最近幾年的各級(jí)單位的信息化改造建設(shè)中,隨著信息化基礎(chǔ)設(shè)施建設(shè)的逐漸完備,各類應(yīng)用系統(tǒng)開始受到各級(jí)單位的重視,開發(fā)重點(diǎn)主要側(cè)重于人事信息數(shù)字化、文書信息化、公文流轉(zhuǎn)、交互式審批等信息化可行性高的工作領(lǐng)域。 因此,改革傳統(tǒng)辦公模式,開展電子辦公,使業(yè)務(wù)辦公、公文流轉(zhuǎn)
41、和管理過程電子化、信息化,并通過統(tǒng)一辦公規(guī)范,提高工作效率降低辦公成本,實(shí)現(xiàn)辦公自動(dòng)化已勢(shì)在必行。 </p><p> 而上述所介紹的公文流轉(zhuǎn)的一個(gè)重要特征就是流程復(fù)雜,難以用標(biāo)準(zhǔn)的程序化語(yǔ)言解釋,因而公文流轉(zhuǎn)系統(tǒng)必須有與之相適應(yīng)的工作流程定義系統(tǒng),使操作人員能夠自主地設(shè)定公文流轉(zhuǎn)流程。為此我們?cè)O(shè)計(jì)了一個(gè)可視化流程設(shè)計(jì)工具,該工具可以作為工作流管理系統(tǒng)里的一個(gè)模塊。它具有圖形用戶界面,用戶定義與任務(wù)執(zhí)行完全分離
42、,其體系結(jié)構(gòu)基本上符合WFMC 標(biāo)準(zhǔn)結(jié)構(gòu)。用戶不需要程序員的支持就可以定義和設(shè)計(jì)出工作流程模型,根據(jù)該模型生成的文件可以非常方便地被解釋為上層接口所需的工作流。</p><p> 3.2 系統(tǒng)功能介紹</p><p> 可視化OA工作流程設(shè)計(jì)工具針對(duì)用戶的要求對(duì)工作流程進(jìn)行定制和維護(hù),主要包括:對(duì)接點(diǎn)、接點(diǎn)連接線可自由拖放。具備刪除節(jié)點(diǎn)、節(jié)點(diǎn)之間連接線功能。接點(diǎn)之間采用箭頭連接。接點(diǎn)采
43、用矩形表示。圖形內(nèi)容利用XML形式保存于的Access數(shù)據(jù)庫(kù)中,可查詢,編輯,保存,更多自定義屬性。</p><p> 通過對(duì)用戶需求的分析,要求本流程設(shè)計(jì)工具具有以下功能: </p><p> (1)可視化的操作界面;</p><p> (2)可以對(duì)流程節(jié)點(diǎn)和弧線進(jìn)行填加、修改、刪除操作; </p><p> (3)工作流程支持串
44、簽、會(huì)簽和分支流程;</p><p> (4)可以將圖形內(nèi)容保存于access數(shù)據(jù)庫(kù)或(xml)中,可查詢,編輯,保存;</p><p> (5)可以通過流程模型解釋接口和引擎主程序提供給上層程序使用</p><p> 3.3 系統(tǒng)模塊功能和設(shè)計(jì)思想</p><p> 1994年11月,工作流管理聯(lián)盟發(fā)布了工作流管理系統(tǒng)的參考模型,該
45、模型定義了一個(gè)基本的工作流管理系統(tǒng)所需要的6個(gè)基本模塊:過程定義工具,工作流執(zhí)行服務(wù),其他工作流執(zhí)行服務(wù),客戶應(yīng)用程序,被調(diào)應(yīng)用程序,管理及監(jiān)控工具;并制定了個(gè)模塊之間的接口標(biāo)準(zhǔn)。</p><p> 流程設(shè)計(jì)工具與其系統(tǒng)交互的簡(jiǎn)單模塊關(guān)系圖:</p><p> 圖1 流程設(shè)計(jì)工具與其系統(tǒng)交互的簡(jiǎn)單模塊關(guān)系圖</p><p> 圖2 可視化流程設(shè)計(jì)工具的系統(tǒng)
46、關(guān)系圖</p><p> 可視化流程設(shè)計(jì)工具各模塊的功能描述和設(shè)計(jì)思想介紹:</p><p> (1)繪圖模塊:可將需要設(shè)計(jì)的流程用此模塊畫出,利用java.awt來繪制節(jié)點(diǎn)和弧線;</p><p> (2)圖象關(guān)系序列化模塊:可將已畫出流程中的節(jié)點(diǎn)和弧線序列化,利用接口java.io.Serializable就能實(shí)現(xiàn);</p><p>
47、; (3)圖象關(guān)系保存模塊:可將序列化后的節(jié)點(diǎn)和弧線關(guān)系保存起來供上層流程定義解釋器使用。</p><p><b> 3.4數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p> 3.4.1 E-R圖設(shè)計(jì)</p><p> 實(shí)體關(guān)系圖(E-R圖)將系統(tǒng)中的數(shù)據(jù)模型以一種更加清楚、具體的方式展現(xiàn)出來。圖中方框代表實(shí)體,橢圓代表實(shí)體的屬性,實(shí)體和實(shí)體之間的關(guān)
48、系用菱形來表示。</p><p> 在工作流管理系統(tǒng)中,上層程序需要通過讀取保存在數(shù)據(jù)庫(kù)里流程的XML文件來實(shí)現(xiàn)流程的解釋和實(shí)例化。在對(duì)工作流進(jìn)行定義的工作中用到的E-R如下圖所示: </p><p><b> 圖3 E-R圖</b></p><p> 3.4.2 表的構(gòu)建</p><p> 表1 流程節(jié)點(diǎn)表(
49、flow_Node)</p><p> 表2 流程表(flowdata)</p><p> 3.4.3 數(shù)據(jù)庫(kù)連接實(shí)現(xiàn)</p><p> public Connection getConnection(){</p><p> // now we can get the connection from the DriverManag
50、er</p><p> Connection con = null;</p><p><b> try {</b></p><p> Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); </p><p> //驅(qū)動(dòng) set this to a MS
51、Access DB you have on your machine</p><p> String filename = "/fileData.mdb";</p><p> String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";</p>
52、<p> database+= filename.trim() + ";DriverID=22;READONLY=true}"; </p><p> // add on to the end </p><p> con = DriverManager.getConnection( "jdbc:odbc:ccos" ,"
53、","");</p><p><b> //數(shù)據(jù)源 </b></p><p> } catch (ClassNotFoundException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStack
54、Trace();</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p><b> } </b></p><p&g
55、t; return con;</p><p><b> } </b></p><p> 4 系統(tǒng)功能模塊實(shí)現(xiàn)</p><p> 4.1系統(tǒng)流程及圖示</p><p> 一個(gè)流程的設(shè)計(jì)是先通過繪圖來對(duì)實(shí)際業(yè)務(wù)過程進(jìn)行分析、建模,然后通過一定的技術(shù)生成所建立流程模型的可被上層接口處理的形式化描述。其流程如下圖:&l
56、t;/p><p><b> 圖4 系統(tǒng)流程圖</b></p><p> 4.2流程可視化設(shè)計(jì)實(shí)現(xiàn)</p><p> 4.2.1界面可視化</p><p> 這是工具開始運(yùn)行出現(xiàn)的第一個(gè)界面,由Internet Explorer瀏覽器打開,可以適應(yīng)B/S結(jié)構(gòu)的OA系統(tǒng)。</p><p> 圖
57、5 工具可視化界面</p><p> 界面的布局由BorderLayout來實(shí)現(xiàn),分北部、西部、中部三部分。</p><p><b> 包括:</b></p><p> 北部 控制板(ArcControls);</p><p> 西部 繪圖工具板(ToolBlank);</p><p>
58、 中部 繪圖畫板 (ArcCanvas)。</p><p><b> 具體代碼實(shí)現(xiàn)如下:</b></p><p> this.setLayout(borderLayout1);</p><p> this.add(ArcControls,BorderLayout.NORTH);</p><p> this.add
59、(ArcCanvas,BorderLayout.CENTER);</p><p> this.add(ToolBlank, BorderLayout.WEST);</p><p> 4.2.2 繪圖功能設(shè)計(jì) </p><p> 當(dāng)設(shè)計(jì)一個(gè)流程時(shí),用戶點(diǎn)擊繪圖工作板中的繪制節(jié)點(diǎn)和繪制弧線兩個(gè)按鈕結(jié)合著選擇環(huán)節(jié)名,將指定的可視化部件拖
60、拉繪制在工作平臺(tái)上,每一個(gè)可視化部件代表一個(gè)角色,用流向箭頭將各個(gè)部件關(guān)聯(lián)起來。還可以對(duì)節(jié)點(diǎn)和弧線進(jìn)行修改和刪除。</p><p> 一個(gè)矩形節(jié)點(diǎn)的繪制,需要對(duì)它的各項(xiàng)屬性進(jìn)行定義,包括對(duì)它的起點(diǎn)坐標(biāo)、矩形的寬和高、矩形的邊框坐標(biāo)。以下是節(jié)點(diǎn)定義的簡(jiǎn)單描述: </p><p> public class Node extends BaseObject{</p><p
61、> int LeftUpNodeX;//定義頂點(diǎn)坐標(biāo)</p><p> int LeftUpNodeY;</p><p> private int starx; //定義起始點(diǎn),高,寬</p><p> private int stary;</p><p> private int Heigh;</p><
62、;p> private int Width;</p><p> private int MinX; //定義邊框</p><p> private int MinY;</p><p> private int MaxX;</p><p> private int MaxY;</p><p> Col
63、or color; //定義外框顏色</p><p> String NodeName="";//節(jié)點(diǎn)名稱</p><p><b> }</b></p><p><b> 繪制節(jié)點(diǎn):</b></p><p> g.drawRect(this.starx,this.sta
64、ry,this.Width,this.Height);//畫矩形</p><p> g.drawString(this.NodeName,this.starx+this.Width/3,this.stary+Height/2);//畫節(jié)點(diǎn)名</p><p><b> 拖動(dòng)節(jié)點(diǎn):</b></p><p> public void SetNo
65、deMoved(int x,int y){</p><p> this.starx = x;</p><p> this.stary = y;</p><p> this.MinX = starx;</p><p> this.MinY = stary;</p><p> this.MaxX = starx
66、+ Width;</p><p> this.MaxY = stary + Height;</p><p><b> }</b></p><p> 拖動(dòng)節(jié)點(diǎn)時(shí)鼠標(biāo)動(dòng)態(tài):</p><p> public void mouseDragged(MouseEvent e) { //鼠標(biāo)拖動(dòng)</p><
67、p> int x = e.getX();</p><p> int y = e.getY();</p><p> switch(status){</p><p><b> case 1:</b></p><p> if (this.NodeIFinit == true) {</p><
68、p> node = new Node(e.getX(), e.getY(),CurrentNodeName);</p><p> this.NodeObject.add(node);</p><p> this.IfDrag = true;</p><p> this.NodeIFinit = false;</p><p>
69、repaint();</p><p><b> }</b></p><p><b> else {</b></p><p> if (IfDrag == true) {</p><p> if (node != null) {</p><p> node.SetHe
70、ightAndWidth(x, y);</p><p> repaint();</p><p><b> }</b></p><p><b> }</b></p><p><b> else {</b></p><p> if (SelectN
71、odeDrag == true) {</p><p> node.SetNodeMoved(x, y);</p><p> node.DrawMyself(this.getGraphics());</p><p> repaint();</p><p><b> }</b></p><p>
72、;<b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p>
73、; 節(jié)點(diǎn)與節(jié)點(diǎn)之間需要用弧線進(jìn)行連接。一段弧線需要對(duì)它的起點(diǎn)坐標(biāo)、終點(diǎn)坐標(biāo)等屬性進(jìn)行定義。以下是弧線定義的簡(jiǎn)單描述:</p><p><b> 弧線定義:</b></p><p> public class Arc {</p><p> private int endx; //結(jié)束坐標(biāo)</p><p> pri
74、vate int endy;</p><p> private int startx;//起點(diǎn)坐標(biāo)</p><p> private int starty;</p><p> private int[] SelectedNode = new int[2];//選擇節(jié)點(diǎn)</p><p> private Vector Point;//點(diǎn)
75、元素</p><p> private Color color;</p><p> private boolean ArcEnd;//判斷弧段是否結(jié)束增加節(jié)點(diǎn)</p><p> public Arc(int x,int y) {</p><p> Point = new Vector();</p><p>
76、int[] star = new int[2];//點(diǎn)由2元素(x,y)組成</p><p> star[0] = x;</p><p> star[1] = y;</p><p> this.startx = x;</p><p> this.starty = y;</p><p> this.Point.
77、addElement(star);</p><p> this.color = Color.BLACK;</p><p> this.ArcEnd = false;</p><p><b> }</b></p><p><b> 繪制弧線:</b></p><p>
78、 public void DrawMyself(Graphics g){</p><p> int length = Point.size();</p><p> g.setColor(color);</p><p> if (length > 0) {</p><p> System.out.println("Arc
79、 node size:" + length);</p><p> if (length == 1) { }</p><p><b> else {</b></p><p> for (int i = 0; i < length - 1; i++) {</p><p> int[] Spoint =
80、 (int[]) Point.elementAt(i);</p><p> int[] Epoint = (int[]) Point.elementAt(i + 1);</p><p> g.drawLine(Spoint[0], Spoint[1], Epoint[0], Epoint[1]);</p><p><b> }</b>&l
81、t;/p><p><b> 弧線拖動(dòng):</b></p><p> public void mouseDragged(MouseEvent e) { //鼠標(biāo)拖動(dòng)</p><p> int x = e.getX();</p><p> int y = e.getY();</p><p> s
82、witch(status){ </p><p><b> case 3:</b></p><p> if (SelectArcDrag == true) {</p><p> if ( (arc != null) && (arcNodeindex != -1)) {</p><p> arc.Se
83、tSelectedNode(arcNodeindex, x, y);</p><p> repaint();</p><p> }else if((arc != null)&&(arcNodeindex == -1)){//選中的是最后一個(gè)不再Vetor里面的點(diǎn)</p><p> arc.SetSelectedNode(x, y);</p
84、><p> repaint();</p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><
85、p><b> }</b></p><p><b> 畫箭頭:</b></p><p> int[] lastpoint = (int[]) Point.elementAt(length - 1);</p><p> g.drawLine(lastpoint[0], lastpoint[1], this.end
86、x, this.endy); //畫箭頭</p><p> if((lastpoint[0] == endx)&&(lastpoint[1]<endy))//開口向下</p><p><b> {</b></p><p> g.drawLine(endx,endy,endx+3,endy-3);</p>
87、<p> g.drawLine(endx,endy,endx-3,endy-3);</p><p> }else if((lastpoint[0] == endx)&&(lastpoint[1]>endy)){ //開口向上</p><p> g.drawLine(endx,endy,endx+3,endy+3);</p><p&
88、gt; g.drawLine(endx,endy,endx-3,endy+3);</p><p> }else if((lastpoint[1] == endy)&&(lastpoint[0]>endx)){//開口向左</p><p> g.drawLine(endx,endy,endx+3,endy-3);</p><p> g.d
89、rawLine(endx,endy,endx+3,endy+3);</p><p> }else if((lastpoint[1] == endy)&&(lastpoint[0]<endx)){//開口向右</p><p> g.drawLine(endx,endy,endx-3,endy-3);</p><p> g.drawLine(
90、endx,endy,endx-3,endy+3);</p><p> }else{//任意方向用點(diǎn)代替</p><p> g.fillOval(endx-2,endy-2,5,5);</p><p><b> }</b></p><p> if ( (SelectedNode[0] != 0) &&
91、; (SelectedNode[1] != 0)) {</p><p> g.setColor(Color.BLUE);</p><p> g.fillOval(SelectedNode[0]-2,SelectedNode[1]-2,5,5);</p><p><b> }</b></p><p><b>
92、; 刪除節(jié)點(diǎn):</b></p><p> public void DeleteSelectedNode() {</p><p> if (haveSelectedNode == true) {</p><p> this.NodeObject.removeElementAt(nodeindex);</p><p> th
93、is.haveSelectedNode = false;</p><p> repaint();</p><p><b> }</b></p><p><b> }</b></p><p><b> 刪除弧線 : </b></p><p> p
94、ublic void DeleteSelectedArc() {</p><p> if (haveSelectedArc == true) {</p><p> this.ArcObject.removeElementAt(arcindex);</p><p> this.haveSelectedArc = false;</p><p&g
95、t; repaint();</p><p><b> }</b></p><p><b> }</b></p><p> 下圖為一設(shè)計(jì)好了的流程圖:</p><p> 圖6 一個(gè)設(shè)計(jì)好的工作流程圖</p><p> 4.2.3 流程圖保存和讀取方法設(shè)計(jì)</
96、p><p> 將序列化后的節(jié)點(diǎn)與弧線的對(duì)象保存為xml文件,易于保存和重繪。</p><p> 序列化是將對(duì)象寫到流中,序列化需要對(duì)象實(shí)現(xiàn)Serializable接口,序列化后能將對(duì)象轉(zhuǎn)換成一系列字節(jié),并可在以后完全復(fù)原。序列化可以實(shí)現(xiàn)“有限持久化”。</p><p> 在保存前先要對(duì)已經(jīng)繪出的節(jié)點(diǎn)以及弧線進(jìn)行屬性采集,我們用一個(gè)NodeBean以及ArcBean
97、方法來實(shí)現(xiàn)其功能,NodeBean的代碼描述如下:</p><p> public class NodeBean implements java.io.Serializable{}</p><p> public NodeBean(){</p><p><b> }</b></p><p> String Lef
98、tUpNodeX; //定義頂點(diǎn)坐標(biāo)</p><p> String LeftUpNodeY;</p><p> private String MinX;//定義邊框</p><p> private String MinY;</p><p> private String MaxX;</p><p> pr
99、ivate String MaxY;</p><p> Color color; //定義外框顏色</p><p> String NodeName="";//節(jié)點(diǎn)名稱</p><p> public String getNodeName() {</p><p> return NodeName;</p>
100、;<p><b> }</b></p><p> public void setNodeName(String nodeName) {</p><p> NodeName = nodeName;</p><p><b> }</b></p><p> public Color
101、 getColor() {</p><p> return color;</p><p><b> }</b></p><p> public void setColor(Color color) {</p><p> this.color = color;</p><p><b&g
102、t; }</b></p><p> public String getLeftUpNodeX() {</p><p> return LeftUpNodeX;</p><p><b> }</b></p><p> public void setLeftUpNodeX(String leftUpNo
103、deX) {</p><p> LeftUpNodeX = leftUpNodeX;</p><p><b> }</b></p><p> public String getLeftUpNodeY() {</p><p> return LeftUpNodeY;</p><p><
104、b> }</b></p><p> public void setLeftUpNodeY(String leftUpNodeY) {</p><p> LeftUpNodeY = leftUpNodeY;</p><p><b> }</b></p><p> public String ge
105、tMaxX() {</p><p> return MaxX;</p><p><b> }</b></p><p> public void setMaxX(String maxX) {</p><p> MaxX = maxX;</p><p><b> }</b&g
106、t;</p><p> public String getMaxY() {</p><p> return MaxY;</p><p><b> }</b></p><p> public void setMaxY(String maxY) {</p><p> MaxY = maxY;
107、</p><p><b> }</b></p><p> public String getMinX() {</p><p> return MinX;</p><p><b> }</b></p><p> public void setMinX(String m
108、inX) {</p><p> MinX = minX;</p><p><b> }</b></p><p> public String getMinY() {</p><p> return MinY;</p><p><b> }</b></p>
109、<p> public void setMinY(String minY) {</p><p> MinY = minY;</p><p><b> }</b></p><p> 將流程圖中節(jié)點(diǎn)的屬性對(duì)象進(jìn)行采集以后,通過調(diào)用</p><p> ObjectToXMLUtil.objectXmlE
110、ncoder方法可以對(duì)節(jié)點(diǎn)和弧段進(jìn)行保存,以下代碼是對(duì)節(jié)點(diǎn)的保存,描述如下:</p><p> Vector v = new Vector();</p><p> Vector temp = this.canvas.getNodeObject();</p><p> for(int i=0;i<temp.size();i++){//通過NODEBEAN存
111、儲(chǔ)</p><p> Node o = (Node)temp.elementAt(i);</p><p> NodeBean bean = new NodeBean();</p><p> bean.setNodeName(o.NodeName);</p><p> bean.setLeftUpNodeX(o.getLeftUpNod
112、eX()+"");</p><p> bean.setLeftUpNodeY(o.getLeftUpNodeY()+"");</p><p> bean.setMaxX(o.GetMaxX()+"");</p><p> bean.setMaxY(o.GetMaxY()+"");&
113、lt;/p><p> bean.setMinX(o.GetMinX()+"");</p><p> bean.setMinY(o.GetMinY()+"");</p><p> v.add(bean); </p><p><b> }</b></p><p
114、> String nodeFile = "nodeData"+System.currentTimeMillis()+".xml";</p><p> ObjectToXMLUtil.objectXmlEncoder( v ,nodeFile );</p><p> 對(duì)弧線的屬性采集類ArcBean相關(guān)的代碼描述如下:</p>
115、<p> public class ArcBean implements java.io.Serializable{}</p><p> private String endx;</p><p> private String endy;</p><p> private String startx;</p><p>
116、private String starty;</p><p> public ArcBean(){//返回值</p><p><b> } </b></p><p> public String getEndx() {</p><p> return endx;</p><p><b
117、> }</b></p><p> public void setEndx(String endx) {</p><p> this.endx = endx;</p><p><b> }</b></p><p> public String getEndy() {</p><
118、;p> return endy;</p><p><b> }</b></p><p> public void setEndy(String endy) {</p><p> this.endy = endy;</p><p><b> }</b></p><p
119、> public String getStartx() {</p><p> return startx;</p><p><b> }</b></p><p> public void setStartx(String startx) {</p><p> this.startx = startx;&l
120、t;/p><p><b> }</b></p><p> public String getStarty() {</p><p> return starty;</p><p><b> }</b></p><p> public void setStarty(Stri
121、ng starty) {</p><p> this.starty = starty;</p><p><b> }</b></p><p> 將流程圖中弧線的屬性對(duì)象進(jìn)行采集以后,通過調(diào)用</p><p> ObjectToXMLUtil.objectXmlEncoder方法可以對(duì)節(jié)點(diǎn)和弧段進(jìn)行保存,以下代碼是
122、對(duì)節(jié)點(diǎn)的保存,描述如下:</p><p> Vector line = new Vector();</p><p> Vector lineTemp = this.canvas.getArcObject();</p><p> for(int i=0;i<lineTemp.size();i++){</p><p> Arc o
123、= (Arc)lineTemp.elementAt(i);</p><p> ArcBean bean = new ArcBean();</p><p> bean.setStartx(o.getStartx()+"");</p><p> bean.setStarty(o.getStarty()+"");</p&
124、gt;<p> bean.setEndx(o.getEndx()+"");</p><p> bean.setEndy(o.getEndy()+"");</p><p> line.add(bean); </p><p><b> }</b></p><p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java基于bs結(jié)構(gòu)下的oa流程可視化的研究與實(shí)現(xiàn)(源代碼+論文)
- H2003031188_楊洋_BS結(jié)構(gòu)下的OA流程可視化的研究與實(shí)現(xiàn).doc
- 可視化流程設(shè)計(jì)系統(tǒng)-畢業(yè)論文
- 可視化流程設(shè)計(jì)系統(tǒng)-畢業(yè)論文
- minic編譯過程可視化系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)——畢業(yè)論文
- minic編譯過程可視化系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)——畢業(yè)論文
- oa系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 可視化流程建模與監(jiān)控方案的設(shè)計(jì)與實(shí)現(xiàn).pdf
- bs結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā)——畢業(yè)論文
- 基于Flex的AUV設(shè)計(jì)流程可視化建模研究與實(shí)現(xiàn).pdf
- 基于xpdl的可視化流程設(shè)計(jì)器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于XPDL的可視化流程設(shè)計(jì)器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 畢業(yè)論文-----基于bs結(jié)構(gòu)的校友錄系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 基于WSRF的可視化研究與實(shí)現(xiàn).pdf
- 畢業(yè)論文——基于bs結(jié)構(gòu)的房屋租售管理系統(tǒng)的實(shí)現(xiàn)
- 基于stm32的可視化倒車?yán)走_(dá)的設(shè)計(jì)——畢業(yè)論文
- 網(wǎng)絡(luò)辦公oa系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文——基于bs結(jié)構(gòu)的在線學(xué)籍管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 礦井通風(fēng)網(wǎng)絡(luò)可視化軟件的研制與實(shí)現(xiàn)——通風(fēng)網(wǎng)絡(luò)可視化研究.pdf
- 編譯過程可視化的研究與實(shí)現(xiàn).pdf
評(píng)論
0/150
提交評(píng)論