付曉明
摘要: 實(shí)例講解如何集成activiti工作流引擎到SpringMVC、Hibernate框架下的業(yè)務(wù)管理系統(tǒng)中,并脫離activiti的用戶、表單模塊,使用獨(dú)立設(shè)計(jì)的用戶角色模型、表單模型設(shè)置流程節(jié)點(diǎn),方便業(yè)務(wù)系統(tǒng)的用戶模型和表單模型升級(jí)。
關(guān)鍵詞: activiti ;工作流引擎;Java語(yǔ)言
中圖分類號(hào):TP311? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)26-0235-02
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
企業(yè)業(yè)務(wù)管理系統(tǒng)包含了各種審批流程,所以必須集成工作流引擎以完成審批功能,Activities作為開(kāi)源的工作流引擎被廣泛應(yīng)用到各業(yè)務(wù)系統(tǒng),使業(yè)務(wù)系統(tǒng)更加專注于復(fù)雜業(yè)務(wù)邏輯的設(shè)計(jì)與實(shí)現(xiàn),同時(shí)工作流引擎的開(kāi)源特性也使系統(tǒng)在工作流引擎的優(yōu)化升級(jí)簡(jiǎn)單快捷。
1需求背景
本管理系統(tǒng)采用J2EE開(kāi)發(fā)架構(gòu),包括SpringMVC及Hibernate,WEB前端使用的dwzUI、JQuery。由于Activiti的用戶與表單模型無(wú)法滿足本系統(tǒng)要求,故使用本系統(tǒng)的用戶角色管理模塊和表單管理模塊與工作流集成,達(dá)到在任意流程節(jié)點(diǎn)上靈活設(shè)置角色與表單的效果。
2集成方法
2.1創(chuàng)建數(shù)據(jù)庫(kù)
由于工作流引擎自帶一套數(shù)據(jù)庫(kù)表,需要使用引擎提供的sql文件在業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)中生成這些表,引擎提供了各種類型數(shù)據(jù)庫(kù)的腳本,本系統(tǒng)選擇的是oracle的sql文件,集成的Activiti是5.15版本,源碼中找到database\activiti.oracle.create.history.sql文件,并在oracle中生成表,因?yàn)楸鞠到y(tǒng)不使用工作流自帶的用戶模型,所以不需要執(zhí)行腳本activiti.oracle.create.identity.sql。
2.2配置XML文件
本系統(tǒng)采用SpringMVC框架,將Activiti的配置文件引入到applicationContext.xml中,activiti.xml放到resources下,并處理節(jié)點(diǎn)中文亂碼問(wèn)題。
本系統(tǒng)使用Maven管理項(xiàng)目,需要將所有jar包上傳到maven-jar路徑下,在pom.xml文件
2.3上傳依賴文件
解壓activiti-explorer.war文件,將其中的api、editor、explorer、libs文件夾依次上傳到webapp目錄下,并將WEB-INF\classes下的editor.html、stencilset.json文件放到resources目錄下,activiti的jar包在activiti的lib目錄下,batik的jar包在sactiviti-explorer解壓后的WEB-INF\lib下,都需要拷貝到maven-jar路徑下。至此,所有開(kāi)發(fā)環(huán)境及準(zhǔn)備工作都已完成。
3流程管理
為了適應(yīng)流程隨著業(yè)務(wù)變動(dòng)而變化,滿足業(yè)務(wù)人員對(duì)流程進(jìn)行增刪改操作。本系統(tǒng)中設(shè)計(jì)了流程管理模塊,能夠?qū)崿F(xiàn)在線流程設(shè)計(jì)、任務(wù)節(jié)點(diǎn)處理人及表單設(shè)置、流程啟用、流程查詢等功能。
首先,在系統(tǒng)中創(chuàng)建流程模型的實(shí)體類,通過(guò)web.xml文件中配置的流程設(shè)計(jì)器重定向功能,調(diào)用流程設(shè)計(jì)器在線設(shè)計(jì)流程,流程模型的屬性必須包含流程KEY、流程名稱,在設(shè)計(jì)器中必填的ID、流程唯一標(biāo)識(shí)一般與流程KEY相同,設(shè)計(jì)完成保存流程后,引擎自動(dòng)生成一個(gè)XML文件和一個(gè)流程圖片,xml文件名是流程名稱.bpmn20.xml,圖片名是流程名稱.流程KEY.png,這兩個(gè)文件都以blob的格式保存在ACT_GE_BYTEARRAY表中,表ACT_RE_MODEL中保存的是模型信息,當(dāng)設(shè)計(jì)完模型后,就可以調(diào)用repositoryService.saveModel(模型對(duì)象)來(lái)生成一個(gè)流程定義,相當(dāng)于發(fā)布了一個(gè)新版本的流程定義,同時(shí)在表ACT_RE_DEPLOYMENT、ACT_RE_PROCDEF中各生成一條數(shù)據(jù),表示當(dāng)前最新的流程定義,有用戶發(fā)起該流程時(shí),使用的也是最新的流程定義。
流程定義都設(shè)置好后,該流程還需要設(shè)置表單和處理人,本系統(tǒng)的設(shè)計(jì)支持各任務(wù)節(jié)點(diǎn)獨(dú)立設(shè)置表單和處理人,通過(guò)讀取bpmn20.xml文件,解析流程的節(jié)點(diǎn)信息,展示到頁(yè)面中,對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行設(shè)置,如圖1:
在這里可以為每個(gè)節(jié)點(diǎn)設(shè)置表單、用戶角色和處理人過(guò)濾功能。用戶角色成員都包含服務(wù)部門屬性,可以通過(guò)過(guò)濾設(shè)置,對(duì)指定節(jié)點(diǎn)設(shè)置處理人員范圍,例如按起草人過(guò)濾、按上一節(jié)點(diǎn)處理人過(guò)濾、按參數(shù)過(guò)濾等,其中按起草人過(guò)濾最常用,在流程流轉(zhuǎn)的時(shí)候,可以通過(guò)獲取流程定義次節(jié)點(diǎn)的處理人角色的設(shè)置,篩選出來(lái)用戶,流程根據(jù)用戶信息進(jìn)行流轉(zhuǎn),為任務(wù)節(jié)點(diǎn)設(shè)置處理人。代碼如下:
這樣就可以脫離activiti的用戶和表單模型,設(shè)計(jì)符合本系統(tǒng)需求的用戶角色模型和表單模型。使用當(dāng)前web前端技術(shù),設(shè)計(jì)出來(lái)表單設(shè)計(jì)器,使用戶在瀏覽器中拖拽web控件,就可以設(shè)計(jì)簡(jiǎn)單表單(無(wú)復(fù)雜業(yè)務(wù)邏輯),在用戶啟動(dòng)流程的時(shí)候,調(diào)用activiti提供的接口即可。
4結(jié)語(yǔ)
至此,完成activit工作流引擎與業(yè)務(wù)管理系統(tǒng)的集成,并使用模塊化設(shè)計(jì),成了一個(gè)獨(dú)立于任何業(yè)務(wù)支持工作流引擎管理的系統(tǒng)框架。
【通聯(lián)編輯:唐一東】