胡昌平 王平 卞德志
摘? 要: 針對工作流在復(fù)雜業(yè)務(wù)應(yīng)用場景中按照業(yè)務(wù)條件動態(tài)分配人工節(jié)點辦理人的需求,設(shè)計實現(xiàn)了一種工作流辦理人篩選規(guī)則引擎,對現(xiàn)有工作流引擎提供的人員變量接口進行擴展,通過執(zhí)行運行期定義的規(guī)則,動態(tài)設(shè)置辦理人集合。該引擎分析了辦理人篩選規(guī)則基本構(gòu)成元素,定義了篩選規(guī)則對象模型,給出了規(guī)則解析運算的算法邏輯,并且提供了規(guī)則的可視化編輯設(shè)計界面,降低運營人員操作難度,達到快速靈活分配辦理人的目的。該規(guī)則引擎已經(jīng)結(jié)合開源Activiti工作流引擎在多個企業(yè)的實際應(yīng)用并獲取良好的應(yīng)用成果。
關(guān)鍵詞: 工作流;辦理人篩選;規(guī)則引擎;Activiti
【Abstract】: Aiming at the requirement of dynamically allocates users for workflow manual activity according to business conditions in complex business application scenarios, a screening rule engine of workflow handlers is designed and implemented, which extends the handler variable interface provided by the existing workflow engine, and dynamically sets up handlers by executing the rules defined at run-time. The engine analyses the main elements of the handlers screening rules, defines the object model of the screening rules, gives the logic of the rule analysis operation, and provides the visual editing and design interface of the rules, reduces the operation difficulty of operators, and achieves the purpose of fast and flexible allocation of handlers. The rule engine has been successfully applied in many enterprises by embedded into the open source workflow engine of Activiti.
【Key words】: Workflow; Handler screening; Rule engine; Activiti
0? 引言
人工處理節(jié)點是工作流系統(tǒng)中的一種重要活動節(jié)點類型,國內(nèi)許多學(xué)者對流程引擎在不同領(lǐng)域的應(yīng)用進行了研究[1-8],其中都涉及人工處理節(jié)點的使用?,F(xiàn)有的工作流引擎,例如Activiti、JBPM等支持以角色分配、直接指定用戶、XML配置、變量綁定和監(jiān)聽器方式指定辦理人。雖然這些方式可以滿足按照固定組織、角色、人員進行分配的需求,但是在一些復(fù)雜應(yīng)用場景中,如果需要按照業(yè)務(wù)邏輯條件,動態(tài)分配不同的人員組合共同處理同一人工節(jié)點,依靠現(xiàn)有辦理人設(shè)置方式就難以實現(xiàn)了,只能在工作流事件監(jiān)聽器接口中,以硬編碼方式實現(xiàn)辦理人分配邏輯,但是硬編碼方式實現(xiàn)業(yè)務(wù)邏輯,缺乏靈活性,操作難度大,需要開發(fā)人員編碼,這就給工作流系統(tǒng)運營實施工作帶來一定挑戰(zhàn)。
解決這個問題的思路是采用規(guī)則引擎在運行時動態(tài)解釋業(yè)務(wù)規(guī)則,執(zhí)行篩選邏輯,避免硬編碼,例如文獻[9]給出了一種分布式規(guī)則引擎的實現(xiàn)方案,文獻[10]對智能化規(guī)則引擎的應(yīng)用技術(shù)研究。但是通用化的規(guī)則引擎,要求運營人員掌握其規(guī)則語法,編寫規(guī)則腳本,并且進行調(diào)試,難度較大。因此,本文在分析抽象工作流辦理人篩選共性業(yè)務(wù)需求的基礎(chǔ)上, 建立統(tǒng)一規(guī)范的篩選規(guī)則對象模型,定義規(guī)則對象序列化格式,構(gòu)建篩選規(guī)則引擎,實現(xiàn)基于模型的篩選規(guī)則解析運算,動態(tài)分配辦理人,同時基于模型設(shè)計實現(xiàn)了可視化規(guī)則編輯界面[11],降低運營人員操作難度,提高系統(tǒng)運維效率,達到快速靈活設(shè)置工作辦理人的目的。
1? 篩選規(guī)則分析
1.1? 基本規(guī)則分析
1.2? 規(guī)則邏輯模型
根據(jù)以上分析,可以建立以基本規(guī)則1)為基礎(chǔ)的辦理篩選規(guī)則邏輯模型,首先定義圖1所示的過濾表達式。
過濾表達式以全體人員集合為輸入,輸出返回按照表達式進行處理后的人員集合。完整的篩選規(guī)則是對各條過濾表達式運算的結(jié)果進一步做交、并或差集運算,可以用表達式樹的形式建立完整的過濾規(guī)則,如圖2所示。
1.3? 業(yè)務(wù)條件
過濾表達式中業(yè)務(wù)條件是由業(yè)務(wù)數(shù)據(jù)、組織數(shù)據(jù)、流程上下文數(shù)據(jù)等形成的布爾邏輯表達式,由業(yè)務(wù)邏輯解析引擎執(zhí)行,用于判斷是否需要對指定范圍人員進行篩選。管理管可以先使用條件構(gòu)造器編輯業(yè)務(wù)條件表達式保存到系統(tǒng)中,在創(chuàng)建篩選規(guī)則時選用。
1.4? 人員范圍
在過濾表達式中,可以為每條過濾表達式選擇一項預(yù)設(shè)的人員范圍,預(yù)設(shè)人員范圍包括按照用戶個人屬性、角色、所屬部門、關(guān)聯(lián)業(yè)務(wù)數(shù)據(jù)和相關(guān)流程節(jié)點等劃定的人員范圍,也包括全體人員集合和空集。過濾表達式計算時,將根據(jù)業(yè)務(wù)條件是否滿足直接返回指定范圍的人員集合,或者返回從全體人員中排除指定人員范圍后的剩余人員集合。創(chuàng)建篩選規(guī)則時,可選預(yù)設(shè)人員范圍,以便構(gòu)成過濾表達式。人員范圍不限于組織機構(gòu)、角色等常見的幾種,也可以由應(yīng)用系統(tǒng)的數(shù)據(jù)指定,例如在項目管理系統(tǒng)中,不同項目團隊成員也是一種人員范圍。
2? 引擎設(shè)計
2.1? 邏輯架構(gòu)設(shè)計
篩選規(guī)則引擎由規(guī)則設(shè)計器、規(guī)則解析運算器兩部分組成,規(guī)則設(shè)計器提供用戶設(shè)計界面,生成規(guī)則文本。工作流系統(tǒng)通過引擎接口獲取辦理人集合,觸發(fā)規(guī)則解析運算器加載規(guī)則文本,執(zhí)行規(guī)則解析運算邏輯,整個引擎架構(gòu)如圖3所示。
2.2? 規(guī)則對象模型
辦理人篩選規(guī)則的靜態(tài)對象結(jié)構(gòu)模型采用組合設(shè)計模式設(shè)計,核心類與接口如圖4所示。
IRule是一個完整的規(guī)則表達式,Calculate方法接收流程上下文參數(shù)執(zhí)行規(guī)則計算,實現(xiàn)該接口的SetExpression類表示二元集合運算,Left和Right通過遞歸引用IRule,形成了參與集合運算的兩個子表達式,SetOperator屬性表示交并集運算符,對Left和Right關(guān)聯(lián)的兩個子表達式的結(jié)果集進行交集或并集運算。
FilterExpression是過濾表達式,同樣實現(xiàn)了IRule接口,作為規(guī)則對象結(jié)構(gòu)樹中葉子節(jié)點,其屬性包含了過濾表達式的所有元素。
IBizCondition接口表示業(yè)務(wù)條件表達式,靜態(tài)結(jié)構(gòu)與規(guī)則表達式類似,呈樹形結(jié)構(gòu),BoolExpression作為二元邏輯運算表達式,可以對Left和Right關(guān)聯(lián)的子條件式進行與或運算。ConditonExpression類表示數(shù)據(jù)對比條件,可以指定流程參數(shù)、業(yè)務(wù)數(shù)據(jù)、用戶數(shù)據(jù)等與固定常量或其他參數(shù)數(shù)據(jù)進行比較。
人員范圍過濾器與過濾表達式對象之間采用橋接模式設(shè)計,F(xiàn)ilterExpression通過IScopeFilter接口調(diào)用人員過濾器的范圍過濾方法,該接口將人員范圍過濾方法的實現(xiàn)與FilterExpression分離,基于接口實現(xiàn)不同的人員范圍過濾機制,同時提供了擴展機制,IScopeFilter實現(xiàn)類對象可以通過IOC框架注入過濾表達式對象中。
3? 引擎實現(xiàn)
3.1? 可視化規(guī)則設(shè)計器
可視化設(shè)計器包括業(yè)務(wù)條件設(shè)計界面和辦理人過濾規(guī)則設(shè)計界面。業(yè)務(wù)條件設(shè)計界面可以使用業(yè)務(wù)數(shù)據(jù)條件表達式、SQL、代碼和組合方式快速構(gòu)建多條業(yè)務(wù)條件。業(yè)務(wù)條件設(shè)計界面如圖5所示。
辦理人過濾規(guī)則設(shè)計器為管理員提供了辦理人篩選規(guī)則的配置編輯工具界面。設(shè)計器根據(jù)管理員輸入,生成規(guī)則的客戶端對象模型,進行序列化后保存到流程配置文件中。規(guī)則編輯器界面如圖6所示。
3.2? 規(guī)則表達式序列化
規(guī)則對象模型生成后需要將其序列化,以便保存到流程配置文件或者發(fā)送前端渲染設(shè)計器頁面。
常用序列化方式有XML和Json方式,考慮到序列化采用Json格式具備易于讀寫,格式壓縮后占帶寬小等優(yōu)點,客戶端JavaScript可以簡單的通過eval()函數(shù)進行Json數(shù)據(jù)的讀取,同時也支持多種服務(wù)器端語言,便于服務(wù)器端的解析,因此采用Json序列化方式轉(zhuǎn)化規(guī)則對象為文本保存到流程配置文件中。
3.3? 規(guī)則運算
流程引擎觸發(fā)篩選規(guī)則計算,規(guī)則組件首先加載規(guī)則JSON文本,反序列化成為IRuleExpression接口類型表示的規(guī)則對象,然后通過調(diào)用其Calculate方法,對規(guī)則對象樹左右分支逐層向下遍歷訪問,直到計算出葉子節(jié)點過濾表達式的結(jié)果,再逐層向上做交并運算,最后得出規(guī)則過濾結(jié)果。遍歷計算邏輯主要在SetExpression類和FilterExpression類的Calculate接口方法中實現(xiàn),關(guān)鍵代碼如下:
3.4? 流程引擎掛載
篩選引擎可以通過Activiti工作流引擎提供的TaskService().setAssignee(taskId,userId)接口,在流程啟動后掛載到工作流中執(zhí)行。當執(zhí)行到指定步驟時,流程引擎觸發(fā)篩選規(guī)則引擎執(zhí)行,獲取到辦理人,然后通過接口設(shè)置辦理人執(zhí)行流程。
4? 結(jié)論
本文設(shè)計實現(xiàn)的工作流辦理人篩選引擎,可以動態(tài)靈活設(shè)置工作流的辦理規(guī)則,解決了硬編碼復(fù)雜業(yè)務(wù)規(guī)則導(dǎo)致系統(tǒng)僵硬的問題, 滿足了企業(yè)工作流應(yīng)用中的復(fù)雜業(yè)務(wù)場景的需求,降低了工作流管理人員的操作復(fù)雜度,提升流程應(yīng)用管理的效率,結(jié)合Activiti工作流引擎在多個實際企業(yè)應(yīng)用項目中實際應(yīng)用并取得了良好的效果。
參考文獻
[1]鞏思漢. 基于工作流的應(yīng)急預(yù)案管理系統(tǒng)的設(shè)計與實現(xiàn)[J].軟件, 2015, 36(11):89-91.
[2]曹月恬, 詹舒波. 基于工作流的計算機輔助電話訪問系統(tǒng)[J]. 軟件, 2016, 37 (02): 42-45.
[3]顏樂鳴. 基于工作流的軟件測試過程模型研究[J]. 軟件, 2018, 39(5): 160-165.
[4]楊朝霞. 基于RBAC的學(xué)生科研項目管理系統(tǒng)工作流模型分析與設(shè)計[J]. 軟件, 2012, 33 (4): 13-15.
[5]崔歡歡, 黃偉, 舒江波. 基于規(guī)則引擎的自適應(yīng)工資系統(tǒng)設(shè)計與實現(xiàn)[J]. 軟件導(dǎo)刊, 2018, 17(6): 102-105.
[6]朱曉輝, 馬晶, 王焱. 基于規(guī)則和工作流引擎的保險電子商務(wù)系統(tǒng)研究[J]. 現(xiàn)代電子技術(shù), 2016, 39(19): 157-160, 164.
[7]劉恩海, 李甜, 陳媛媛. 跨部門的工作流引擎模式研究[J]. 計算機應(yīng)用與軟件, 2018, 35(6): 76-82.
[8]安婧. 基于工作流引擎的辦公自動化管理系統(tǒng)的設(shè)計[J]. 微型電腦應(yīng)用, 2018, 34(7): 19-21.
[9]朱思遠, 張雷. 一種分布式規(guī)則引擎的實現(xiàn)方法[J]. 軟件, 2015, 36(12): 158-161.
[10]趙志偉. 智能化規(guī)則引擎技術(shù)研究[J]. 軟件, 2018, 39(8): 65-69.
[11]歐陽廣津, 武彤. 基于JBPM的在線流程設(shè)計器的研究與應(yīng)用[J]. 計算機技術(shù)與發(fā)展, 2018, 28(7): 29-33.