• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Web的工作流編輯的設(shè)計(jì)與實(shí)現(xiàn)

      2021-11-22 15:51:22徐海嘯于洪梅李想李朋洋陳威陽(yáng)
      電子技術(shù)與軟件工程 2021年7期
      關(guān)鍵詞:流程圖實(shí)例定義

      徐海嘯 于洪梅 李想 李朋洋 陳威陽(yáng)

      (1.吉林大學(xué)計(jì)算機(jī)學(xué)院與技術(shù)學(xué)院 吉林省長(zhǎng)春市 130012 2.中共長(zhǎng)春市紀(jì)律檢查委員會(huì) 吉林省長(zhǎng)春市 130041)

      1 緒論

      工作流相比于傳統(tǒng)模式的一大優(yōu)點(diǎn)是它能夠?qū)⑷蝿?wù)的管理和業(yè)務(wù)的管理分離出來(lái)。業(yè)務(wù)的流動(dòng)倚賴于任務(wù)的執(zhí)行,而任務(wù)的完成推動(dòng)了業(yè)務(wù)的實(shí)現(xiàn)。舉一個(gè)經(jīng)典的逐級(jí)審批的例子,傳統(tǒng)方式是為每一項(xiàng)任務(wù)設(shè)立一個(gè)標(biāo)志,當(dāng)任務(wù)被完成時(shí)更改對(duì)應(yīng)的標(biāo)志。這種方式在遇到業(yè)務(wù)流程的變動(dòng)時(shí)便顯得束手無(wú)策。例如在遞交申請(qǐng)之后審批的流程由甲審批完后乙審批更改為獲得甲乙任一審批即可,傳統(tǒng)模式在應(yīng)對(duì)這一實(shí)際變動(dòng)時(shí)只能修改程序邏輯,更改代碼來(lái)實(shí)現(xiàn),而修改代碼需要消耗極大的人力和時(shí)間資源。此時(shí),工作流技術(shù)就體現(xiàn)了充分的優(yōu)勢(shì)。采用工作流技術(shù)來(lái)管理這項(xiàng)業(yè)務(wù)時(shí),所有業(yè)務(wù)的參與者只能獲取到被分配給自己的任務(wù),流程的改變通過流程編輯器來(lái)實(shí)現(xiàn),由流程編輯器重新編輯流程定義,部署到工作流引擎上,用不同的版本加以區(qū)分,流程的定義存放在一個(gè)xml 文件之中,因此采用工作流技術(shù)可以實(shí)現(xiàn)不修改代碼或少量修改代碼卻能修改流程的目標(biāo)。工作流技術(shù)的另外一個(gè)優(yōu)點(diǎn)是能夠在多個(gè)參與者之間自動(dòng)地傳遞信息、分配任務(wù),比如上述審批例子中修改后的流程,甲審批完成后自動(dòng)消除乙的審批任務(wù)。

      工作流技術(shù)的實(shí)現(xiàn)需要倚賴工作流管理系統(tǒng)。工作流管理系統(tǒng)定義、執(zhí)行并管理工作流,是工作流技術(shù)的具體體現(xiàn)。為實(shí)現(xiàn)現(xiàn)實(shí)中常見的業(yè)務(wù)流程的從開始到結(jié)束的整體執(zhí)行和流動(dòng),有效直觀地管理流程執(zhí)行中各項(xiàng)數(shù)據(jù),并能夠適應(yīng)現(xiàn)實(shí)環(huán)境中經(jīng)常變動(dòng)的業(yè)務(wù)流程,本文設(shè)計(jì)并實(shí)現(xiàn)了一款基于Web 的工作流流程編輯系統(tǒng)。

      本文首先從功能上對(duì)系統(tǒng)做出設(shè)計(jì),接下來(lái)從模型的建立、工作流引擎等方面詳細(xì)地把對(duì)系統(tǒng)設(shè)計(jì)之初的思想做出了介紹,并且在分析對(duì)比多個(gè)主流工作流引擎之后給出了工作流引擎選用的原因;本文分別對(duì)各個(gè)部分的技術(shù)實(shí)現(xiàn)給出了描述,總結(jié)了設(shè)計(jì)并實(shí)現(xiàn)本系統(tǒng)的研究意義等。

      2 系統(tǒng)設(shè)計(jì)

      2.1 系統(tǒng)總體設(shè)計(jì)

      實(shí)現(xiàn)基于Web 的工作流系統(tǒng),支持對(duì)流程定義和流程實(shí)例進(jìn)行動(dòng)態(tài)修改,在網(wǎng)頁(yè)中以圖形和文字方式直觀地展示。在瀏覽器端將業(yè)務(wù)流程表示為以圖形元素和帶箭頭的線條結(jié)合的方式,支持動(dòng)態(tài)地修改流程,以及對(duì)每個(gè)結(jié)點(diǎn)的不同屬性加以查看和修改。用戶還可以管理流程定義和流程實(shí)例,查看和編輯它們的詳細(xì)信息和所處狀態(tài)。

      本系統(tǒng)采用基于Web 的形式,以html+js+ajax 的方式來(lái)實(shí)現(xiàn),無(wú)須客戶端的安裝,無(wú)須下載jre,只是第一次運(yùn)行需要下載所有js的腳本,相比于java 圖形界面包和applet 等是理想的實(shí)現(xiàn)方式。為了實(shí)現(xiàn)頁(yè)面編輯功能的靈活簡(jiǎn)便,可以運(yùn)用js、html、 xml 等技術(shù),輔以ajax 動(dòng)態(tài)地與后臺(tái)交互,同時(shí)采用web 網(wǎng)頁(yè)發(fā)布的形式,方便和其它應(yīng)用程序的集成以及用戶隨時(shí)隨地可操作的同時(shí),一方面可以極大地節(jié)約時(shí)間,方便快速地對(duì)業(yè)務(wù)流程進(jìn)行調(diào)整;另一方面可以直觀地展示業(yè)務(wù)流程在調(diào)節(jié)前后的變化,方便對(duì)比完善。此外電子信息特有的快速搜索功能給人們提供了書面所達(dá)不到的便利。

      具體實(shí)現(xiàn)技術(shù)為Spring 與工作流引擎集成,定義工作流流程,通過工作流引擎記錄保存到xml 文件和數(shù)據(jù)庫(kù)中,當(dāng)流程啟動(dòng)時(shí)執(zhí)行工作流流程,通過不同用戶對(duì)其分配任務(wù)的完成情況推動(dòng)流程的進(jìn)展,直到完成所有步驟,結(jié)束流程,記錄歷史記錄表中,有相關(guān)權(quán)限的用戶可以查詢和查看。

      保存數(shù)據(jù)時(shí)采用ajax 的方式來(lái)實(shí)現(xiàn),既可以把流程定義文件存儲(chǔ)在文件格式中,也可以保存到數(shù)據(jù)庫(kù)的表中。同時(shí)通過這兩種方式對(duì)流程數(shù)據(jù)進(jìn)行保存,便于流程的上傳和下載。

      2.2 系統(tǒng)詳細(xì)設(shè)計(jì)

      2.2.1 模型的建立

      工作流中涉及的兩個(gè)主要的設(shè)計(jì)模型:定義模型和實(shí)例模型。定義模型決定了流程本身的性質(zhì),流程的路由狀態(tài),流程進(jìn)行到了哪一步,能否進(jìn)入下一個(gè)狀態(tài)、接下來(lái)流程的行進(jìn)方向等。而實(shí)例模型則定義了在流程的這一狀態(tài)下各個(gè)節(jié)點(diǎn)所處的狀態(tài),各分支條件滿足情況、下一步各個(gè)節(jié)點(diǎn)狀態(tài)的變化趨勢(shì)等。

      2.2.2 工作流引擎

      業(yè)務(wù)流程建模標(biāo)注,簡(jiǎn)稱BPMN。是由BPMN 標(biāo)準(zhǔn)組織發(fā)布的,為各大廠商以及工作流相關(guān)開源社區(qū)提供了流程建模的標(biāo)準(zhǔn)。其主要目標(biāo)是使用一些能夠被所有使用者快速理解的標(biāo)記,來(lái)用圖形化的方式記錄下工作流流程從創(chuàng)建初期的業(yè)務(wù)分析到流程實(shí)例的最終實(shí)現(xiàn),同時(shí)由用戶進(jìn)行監(jiān)管和控制的完整過程。

      Activiti 繼承自JBPM,是一個(gè)針對(duì)企業(yè)用戶、開發(fā)人員、系統(tǒng)管理員的輕量級(jí)工作流業(yè)務(wù)管理平臺(tái),其核心是使用Java 開發(fā)的快速、穩(wěn)定的BPMN 2.0 流程引擎[1]。Activiti 十分注重流程服務(wù)的可嵌入性和可擴(kuò)展性,同時(shí),作為一個(gè)符合 Apache 許可的基于工作流的業(yè)務(wù)流程管理開源項(xiàng)目,更加強(qiáng)調(diào)面向流程參與人員。這一點(diǎn)具體體現(xiàn)在Activiti 流程引擎將每一項(xiàng) BPM 業(yè)務(wù)功能模塊都采用服務(wù)的形式提供給開發(fā)技術(shù)人員。開發(fā)技術(shù)人員可以通過使用這些服務(wù)迅速、高效地搭建出功能強(qiáng)大、靈活簡(jiǎn)潔而且效率較高的 BPM 應(yīng)用程序。Activiti 不僅可以與Spring 完美地集成,同時(shí)基于其簡(jiǎn)約思想的設(shè)計(jì)使Activiti 非常輕量級(jí)。Activiti 選擇了使用MyBatis作為和數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交換的工具通過SQL 語(yǔ)句執(zhí)行Command,讓引擎在速度上保持最高的性能。Activiti 提供了七大Service 接口。在表結(jié)構(gòu)的設(shè)計(jì)方面,Activiti把運(yùn)行時(shí)數(shù)據(jù)和歷史數(shù)據(jù)進(jìn)行了分離,這種設(shè)計(jì)方式在數(shù)據(jù)積累到十分龐大的情況下仍然可以做出快速的反應(yīng)。

      2.2.3 流程建模

      BPMN 由一組圖形元素構(gòu)成,利用這些圖形元素可以很快地實(shí)現(xiàn)流程建模和流程分析,并且利于對(duì)流程實(shí)例的管理和監(jiān)控。一個(gè)業(yè)務(wù)流程模型是指一個(gè)由BPMN 通過的各種圖形元素組合而成的網(wǎng)狀結(jié)構(gòu)圖。其中圖形元素包括一系列活動(dòng)和定義活動(dòng)執(zhí)行順序的流程控制器。BPMN 包括以下四種基本元素:

      流對(duì)象(Flow Object):作為BPMN 的核心圖形元素,流對(duì)象主要包括了事件(Event)、活動(dòng)(Activity)和網(wǎng)關(guān)(Gateway)三種基本構(gòu)件[2]。事件用一個(gè)圓圈形表示,指代了流程在執(zhí)行期間發(fā)生的事情,包括開始(Start)事件、中間(Intermediate)事件和結(jié)束(End)事件。這些事件往往會(huì)對(duì)流程流轉(zhuǎn)產(chǎn)生影響?;顒?dòng)用一個(gè)圓角矩形表示,表明了流程實(shí)例在執(zhí)行過程中需要做的步驟和執(zhí)行這些事情的人或系統(tǒng)。一個(gè)活動(dòng)可以由多個(gè)活動(dòng)組合而成,表示一系列需要完成的任務(wù)。網(wǎng)關(guān)用菱形表示,用來(lái)表示流程的分支以及合并。網(wǎng)關(guān)包括很多種,例如排他網(wǎng)關(guān)、并行網(wǎng)關(guān)等。

      連接對(duì)象(Connecting Objects):將順序相關(guān)的流對(duì)象連接起來(lái)的對(duì)象,與流對(duì)象一起組成了完整的業(yè)務(wù)流程結(jié)構(gòu)。其中實(shí)線實(shí)心箭頭表示序列流(Sequence Flow),代表流程中各個(gè)執(zhí)行活動(dòng)的先后順序。虛線空心箭頭表示消息流(Message Flow),主要用在不同的執(zhí)行者之間傳遞信息。這里的執(zhí)行者可以是角色也可以是具體的某個(gè)人,甚至是一個(gè)系統(tǒng)。點(diǎn)狀線表示聯(lián)合關(guān)系(Association),用來(lái)指代活動(dòng)的輸入和輸出。

      甬道(Swimlanes):用來(lái)對(duì)不同功能職責(zé)加以區(qū)分。Pool 代表流程實(shí)例執(zhí)行過程中的一個(gè)參與實(shí)體。Pool 被用作一個(gè)圖形容器來(lái)與另外實(shí)體進(jìn)行隔離,常被用于兩個(gè)獨(dú)立的執(zhí)行者之間的物理劃分界限。通常出現(xiàn)在交互流程當(dāng)中。一般來(lái)說(shuō),每一個(gè)Pool 都會(huì)有自身的流程,如果這些在Pool 內(nèi)部的自身流程是順序流,那么這個(gè)順序流往往不會(huì)跨越多個(gè)Pool。兩個(gè)Pool 之間的消息通過消息流進(jìn)行傳遞。Lane 被用作對(duì)活動(dòng)進(jìn)行組織和分類,從圖形系統(tǒng)上看是在Pool 中進(jìn)行的子劃分,既可以是水平的也可以是垂直的。

      描述對(duì)象(Artifacts):BPMN 流程圖中的拓展元素,提供了能夠是流程圖擁有可以表達(dá)具體化活動(dòng)中必要的上下文的方法。數(shù)據(jù)對(duì)象(Data Object)用來(lái)描述業(yè)務(wù)流程活動(dòng)所需要的相關(guān)數(shù)據(jù)以及在過程中產(chǎn)生的數(shù)據(jù)。這類對(duì)象可以用連線與活動(dòng)進(jìn)行連結(jié)。組(Group)用以對(duì)目標(biāo)作出必要的解釋,對(duì)流程的執(zhí)行流轉(zhuǎn)并不會(huì)產(chǎn)生影響。注釋(Annotation)主要是給流程圖的閱讀者附加一些文字描述信息,有助于閱讀者更快更全面地掌握流程。這主要是基于流程的參與者們不可能都參與了流程圖的設(shè)計(jì)和繪制這一事實(shí)而產(chǎn)生的。

      2.2.4 其它功能模塊設(shè)計(jì)

      日志系統(tǒng):記錄用戶的主要操作、系統(tǒng)的使用情況等基本事項(xiàng)。通過數(shù)據(jù)庫(kù)的logs 表進(jìn)行維護(hù)每個(gè)用戶的登錄登出狀態(tài)、期間所做的操作等,便于梳理流程的時(shí)間推進(jìn)線,查看用戶是否有違規(guī)操作,保障系統(tǒng)的安全性等。另外,在流程進(jìn)行中遇到問題時(shí)可以參照日志更快地發(fā)現(xiàn)帶來(lái)錯(cuò)誤的錯(cuò)誤操作,及時(shí)對(duì)流程進(jìn)行相應(yīng)補(bǔ)救。

      歷史記錄:記錄流程的狀態(tài)變化,追蹤流程進(jìn)展。對(duì)流程執(zhí)行過程中各個(gè)重要節(jié)點(diǎn)的執(zhí)行狀態(tài)進(jìn)行記錄。便于查詢和分析。甚至可以實(shí)現(xiàn)一套簡(jiǎn)單的評(píng)價(jià)系統(tǒng),對(duì)已經(jīng)結(jié)束的流程進(jìn)行簡(jiǎn)單的評(píng)價(jià),并分析流程執(zhí)行過程中耗費(fèi)時(shí)間、資源最大的步驟,導(dǎo)致拖延的原因等,并且可以對(duì)下一次類似的流程執(zhí)行進(jìn)行參照和指導(dǎo)。

      用戶系統(tǒng):不同用戶按照組別給定不同的權(quán)限,展示權(quán)限范圍內(nèi)的內(nèi)容和相關(guān)可執(zhí)行的操作。對(duì)于管理人員可以查詢相應(yīng)的可執(zhí)行人員,快速分配節(jié)點(diǎn)需要執(zhí)行的相關(guān)工作;查看流程執(zhí)行情況和各個(gè)節(jié)點(diǎn)狀態(tài),完成負(fù)責(zé)節(jié)點(diǎn)的執(zhí)行和督辦。

      3 系統(tǒng)實(shí)現(xiàn)

      3.1 數(shù)據(jù)庫(kù)設(shè)計(jì)

      根據(jù)數(shù)據(jù)庫(kù)表中所存放的數(shù)據(jù)的性質(zhì)可以大致將其分為模型數(shù)據(jù)和實(shí)例數(shù)據(jù)。

      模型數(shù)據(jù)是用來(lái)存儲(chǔ)過程模型的一系列數(shù)據(jù)。主要包括以下幾張表:workflow,工作流模型表,用來(lái)存儲(chǔ)工作流模型的基本信息,包括流程名稱、對(duì)流程的描述、創(chuàng)建的時(shí)間等;node 記錄節(jié)點(diǎn)的狀態(tài),不同的節(jié)點(diǎn)需要定義的內(nèi)容有所不同;procdef 是流程定義表,包含流程定義的ID、資源文件表、原文件名和圖示;model 是流程設(shè)計(jì)模型表,存儲(chǔ)了流程模型各個(gè)節(jié)點(diǎn)的信息。

      實(shí)例數(shù)據(jù)是用來(lái)存儲(chǔ)流程實(shí)例的表,是工作流引擎對(duì)過程模型進(jìn)行實(shí)例化操作時(shí)創(chuàng)建的。與模型數(shù)據(jù)相對(duì)應(yīng),實(shí)例數(shù)據(jù)主要包括:workflow_instance,工作流實(shí)例表,在工作流實(shí)例被創(chuàng)建時(shí)currentstep 記錄當(dāng)前步驟狀態(tài)、currentstep_prev 記錄前一個(gè)步驟的狀態(tài),當(dāng)執(zhí)行到下一步驟時(shí)自動(dòng)將currentstep 轉(zhuǎn)換為currentstep_prev,將新到達(dá)的步驟記錄為currentstep、historystep 記錄了歷史執(zhí)行步驟,每一步驟具有唯一的ID,在currentstep_prev 被覆蓋之前先把其信息錄入historystep 中,通過工作流程實(shí)例ID 與實(shí)例建立聯(lián)系、workflowstate 記錄了流程ID,流程名稱和流程狀態(tài)(包括被創(chuàng)建、活動(dòng)、中止、完成、未知等)。Activiti 在工作時(shí)也創(chuàng)建了一些記錄工作流狀態(tài)和流程運(yùn)行的表。deployment 包含了已經(jīng)部署的流程名稱和id,procdef 中保存的資源文件表保存了部署ID、資源的位置和存儲(chǔ)方式等信息,execution 保存了正在執(zhí)行的對(duì)象的信息,側(cè)重于流程實(shí)例、對(duì)象狀態(tài)、任務(wù)等,正在執(zhí)行的任務(wù)則被保存在了currtask 中。以inst 為后綴的一些列表保存了各種歷史記錄的信息,比如taskinst 存放已經(jīng)執(zhí)行完的歷史任務(wù)信息,procinst是流程實(shí)例的歷史表,存放執(zhí)行完畢的流程實(shí)例信息,actinst:存放歷史所有完成的活動(dòng)等。此外還有一些必要的數(shù)據(jù)記錄表,例如variable 記錄記錄運(yùn)行時(shí)流程變量數(shù)據(jù);user 保存用戶信息等。

      3.2 具體實(shí)現(xiàn)技術(shù)

      本系統(tǒng)的核心是Activiti 工作流引擎與Spring 框架的集成,實(shí)現(xiàn)工作流流程的管理、查看和編輯,用戶歷史記錄和日志的查看等功能。系統(tǒng)采用B/S 模式,方便用戶隨時(shí)使用和系統(tǒng)升級(jí)。工作流引擎選用開源的Activiti,快速、高效地對(duì)流程的操作進(jìn)行記錄和做出反應(yīng),通過xml 文件和數(shù)據(jù)庫(kù)兩種方式存儲(chǔ)流程實(shí)例數(shù)據(jù),即可以直觀地通過網(wǎng)頁(yè)的形式展示,又可以方便地修改數(shù)據(jù)庫(kù)中的某一項(xiàng)狀態(tài),記錄流程運(yùn)行的歷史記錄和用戶操作日志,方便查看與分析。

      3.3 流程在系統(tǒng)中的執(zhí)行過程及部分代碼分析

      本節(jié)將按照工作流流程的一個(gè)完整周期,從流程的設(shè)計(jì),流程定義的上傳和部署,流程實(shí)例的啟動(dòng),流程執(zhí)行過程中任務(wù)的完成,到流程定義的版本更新等詳細(xì)地實(shí)現(xiàn)工作流流程在本系統(tǒng)中的流轉(zhuǎn)和執(zhí)行,展現(xiàn)該系統(tǒng)的功能。

      3.3.1 流程的設(shè)計(jì)

      為了便于流程定義文件在Web 端的上傳和下載,本系統(tǒng)在把流程定義文件放入數(shù)據(jù)庫(kù)的同時(shí)還提供了bpmn 流程定義文件的上傳。Activiti 為設(shè)計(jì)bpmn 文件提供了兩種方式:

      IDE(集成開發(fā)環(huán)境)插件:由于本系統(tǒng)是在JetBrains 公司提供的java 語(yǔ)言開發(fā)的集成環(huán)境IntelliJ IDEA 上實(shí)現(xiàn)的,因此采用了Activiti Designer 插件actiBPM 來(lái)設(shè)計(jì)流程定義文件。此外,除了IDEA,在Eclipse 上也存在Activiti 插件,同樣可以很方便地設(shè)計(jì)流程文件。在IDEA 上利用actiBPM 插件來(lái)設(shè)計(jì)流程定義文件的界面,主要分為三個(gè)部分,左上部分為具體的流程圖設(shè)計(jì)界面,通過拖拽右上部分的各個(gè)部件以及連接線就可以完成流程圖的設(shè)計(jì),下半部分為參數(shù)設(shè)置區(qū),選中流程圖設(shè)計(jì)界面具體的節(jié)點(diǎn)、部件或者連線就可以設(shè)置相應(yīng)的參數(shù)。

      3.3.2 流程定義的上傳和部署

      設(shè)計(jì)好了流程文件,接下來(lái)就是把該文件上傳到系統(tǒng)并對(duì)流程定義進(jìn)行部署。為了便于用戶進(jìn)行上傳,本系統(tǒng)允許用戶上傳bpmn 和zip 兩種文件,即允許用戶將多個(gè)bpmn 文件進(jìn)行打包上傳。同時(shí)鑒于網(wǎng)絡(luò)速度和穩(wěn)定性考慮,單次上傳最大只允許不超過5M的文件。

      3.3.3 啟動(dòng)流程實(shí)例

      成功部署流程定義并跳轉(zhuǎn)到“已部署流程定義”界面后,即可看到所有已經(jīng)部署到工作流引擎中的流程定義文件,以及包括版本、ID、名稱、Key 等在內(nèi)的流程定義的各項(xiàng)屬性。其中流程定義ID的固定格式是 Key:版本:ID。在這個(gè)界面可以根據(jù)流程定義來(lái)啟動(dòng)對(duì)應(yīng)的流程實(shí)例,也可以查看流程定義對(duì)應(yīng)的流程圖。對(duì)各個(gè)部署的Process 流程定義查看其流程圖。

      為了顯示方便和簡(jiǎn)潔,工作流引擎對(duì)流程圖進(jìn)行了相應(yīng)的修改,但是流程的總體結(jié)構(gòu)任然與設(shè)計(jì)時(shí)相同。為了完整地執(zhí)行一遍流程,檢測(cè)系統(tǒng)的實(shí)現(xiàn)程度,啟動(dòng)一個(gè)流程實(shí)例。單擊“啟動(dòng)流程”按鈕,成功啟動(dòng)后系統(tǒng)會(huì)自動(dòng)跳轉(zhuǎn)到流程實(shí)例界面,在這個(gè)界面可以查看已啟動(dòng)的流程實(shí)例的ID、流程定義ID 等屬性,并且可查看對(duì)應(yīng)的流程圖。

      啟動(dòng)的流程圖與未啟動(dòng)流程實(shí)例時(shí)流程定義的流程圖一個(gè)巨大的區(qū)別就是:此時(shí)流程圖與開始節(jié)點(diǎn)相連的第一個(gè)節(jié)點(diǎn)被高亮顯示,表明了流程已經(jīng)開始執(zhí)行,并且現(xiàn)在處在某個(gè)節(jié)點(diǎn)的任務(wù)上,等待該任務(wù)的完成。

      3.3.4 任務(wù)的完成和分支的選擇

      流程的流動(dòng)需要任務(wù)完成來(lái)推動(dòng)。流程在運(yùn)行到任務(wù)節(jié)點(diǎn)時(shí)自動(dòng)分配任務(wù)給對(duì)應(yīng)的參與者和執(zhí)行者。

      在“審核”和“審批”的節(jié)點(diǎn),任務(wù)的完成有兩種方式,一種是通過并向下一個(gè)節(jié)點(diǎn)流轉(zhuǎn),另一種是未通過回流到上一個(gè)節(jié)點(diǎn)。為了區(qū)分這兩種方式,需要用到自流程設(shè)計(jì)時(shí)賦予連線的變量Condition。當(dāng)在這一節(jié)點(diǎn)取到“通過”時(shí),通過對(duì)于的連線取到了True,條件成立,而另一條連線上的條件不成立,取到False,因此流程向著通過的連線流進(jìn),流程向下一步執(zhí)行;同樣的在當(dāng)前節(jié)點(diǎn)“未通過”時(shí)向下流的連線取到了False,而回流的連線取到了True,因此流程劉回到之前的節(jié)點(diǎn)。

      通過用戶的ID可以從數(shù)據(jù)庫(kù)中查詢?cè)撚脩舯环峙涞膫€(gè)人任務(wù),對(duì)于不被分配的任務(wù)詳情是不可見的,這樣可以保障數(shù)據(jù)的安全性,也符合java 的封裝性。通過與任務(wù)相關(guān)的Service 創(chuàng)建一個(gè)任務(wù)查詢對(duì)象就可以從數(shù)據(jù)庫(kù)中獲得該責(zé)任人的任務(wù),然后封裝在model中傳遞給前臺(tái)以便對(duì)用戶展示。

      3.3.5 歷史任務(wù)的查詢

      在實(shí)際應(yīng)用中常常會(huì)遇到這樣的情況,即使某項(xiàng)任務(wù)已經(jīng)完成了,但是我們對(duì)于這項(xiàng)任務(wù)執(zhí)行人,執(zhí)行時(shí)間和執(zhí)行情況等仍需要一定的了解。為了滿足這類需求,所有已經(jīng)完成的任務(wù)都被存放在數(shù)據(jù)庫(kù)的歷史表格當(dāng)中。通過一定的查詢操作可以獲取想要的信息。

      除了列出所有的歷史任務(wù),還可以根據(jù)流程定義ID、流程實(shí)例ID 等快速找出想要的信息。此外,信息化相較于紙張形式的一個(gè)很大的優(yōu)點(diǎn)就是快速便捷的搜索功能。只要在表格右上角的Search 欄里輸入想要查詢的部分或全部?jī)?nèi)容,就可以迅速查到對(duì)應(yīng)的信息,帶來(lái)了極大的便利,增加效率。

      通過歷史任務(wù)Service 創(chuàng)建歷史任務(wù)實(shí)例查詢,指定辦理人或者通過流程實(shí)例ID 查詢相關(guān)任務(wù)。可以通過相應(yīng)的Service 查看正在運(yùn)行的流程定義、實(shí)例變量等數(shù)據(jù);而對(duì)于當(dāng)前未處于活動(dòng)狀態(tài)的流程實(shí)例的相關(guān)信息只能從actinst 表中查詢。雖然查詢方式大同小異,但是采用這種分開管理的模式,把正在運(yùn)行各類數(shù)據(jù)的交給RuntimeService、TaskService 來(lái)處理,而把歷史數(shù)據(jù)統(tǒng)統(tǒng)交給HistoryService 來(lái)進(jìn)行管理,可以很好地增強(qiáng)流程實(shí)例的執(zhí)行效率,避免由于龐大冗余的歷史數(shù)據(jù)給流程的執(zhí)行帶來(lái)負(fù)擔(dān)。這是因?yàn)檎趫?zhí)行的流程實(shí)例所用到和產(chǎn)生的數(shù)據(jù)相比于記錄在數(shù)據(jù)庫(kù)中的歷史數(shù)據(jù)來(lái)說(shuō)要小很多,而且對(duì)正在執(zhí)行的流程實(shí)例的相關(guān)數(shù)據(jù)的訪問也比歷史數(shù)據(jù)要頻繁許多。

      3.3.6 流程定義的更新

      工作流相比于傳統(tǒng)模式實(shí)現(xiàn)的一個(gè)很大的優(yōu)勢(shì)就在于,可以不修改或者少修改代碼就可以實(shí)現(xiàn)流程的變更?;趯?shí)際生活中,往往會(huì)因?yàn)槿藛T變動(dòng)、時(shí)間安排、應(yīng)用環(huán)境的變更等導(dǎo)致業(yè)務(wù)流程產(chǎn)生變化。為應(yīng)對(duì)這種常常發(fā)生的實(shí)際情況,本系統(tǒng)允許流程定義的更新。只需要對(duì)任務(wù)節(jié)點(diǎn)進(jìn)行拖拽,對(duì)連線進(jìn)行重組,或者新加入或者刪除一些節(jié)點(diǎn)部件。完成設(shè)計(jì)之后,將最新的流程定義文件上傳到系統(tǒng),對(duì)其進(jìn)行部署,就可以看到新版本的流程定義了。

      4 結(jié)論

      本文設(shè)計(jì)并實(shí)現(xiàn)了基于Web 的工作流流程編輯器,可以在Web 端輕松控制流程的流轉(zhuǎn),查看流程實(shí)例和流程定義,改變其狀態(tài)。本文從流程的設(shè)計(jì)、流程的上傳和部署、流程實(shí)例的啟動(dòng)、個(gè)人任務(wù)的選擇、流程變量的傳遞、任務(wù)完成推動(dòng)流程的執(zhí)行以及歷史任務(wù)的查詢等流程從創(chuàng)建到完成的一個(gè)完整周期介紹了本系統(tǒng)的功能和使用。

      猜你喜歡
      流程圖實(shí)例定義
      專利申請(qǐng)審批流程圖
      河南科技(2016年8期)2016-09-03 08:08:22
      專利申請(qǐng)審批流程圖
      河南科技(2016年6期)2016-08-13 08:18:29
      成功的定義
      山東青年(2016年1期)2016-02-28 14:25:25
      寧??h村級(jí)權(quán)力清單36條
      完形填空Ⅱ
      完形填空Ⅰ
      修辭學(xué)的重大定義
      山的定義
      《天津醫(yī)藥》稿件處理流程圖
      教你正確用(十七)
      翼城县| 松溪县| 凌云县| 保定市| 河南省| 客服| 长治县| 抚松县| 张家港市| 津市市| 广河县| 揭西县| 志丹县| 湖北省| 思茅市| 札达县| 赫章县| 平南县| 叙永县| 女性| 名山县| 洛扎县| 张家川| 蚌埠市| 墨江| 忻城县| 商城县| 乐陵市| 潍坊市| 呼和浩特市| 万全县| 石嘴山市| 博客| 惠州市| 桐庐县| 太仓市| 肃宁县| 呼图壁县| 冷水江市| 济宁市| 丽水市|