李乾仕,王淑營(yíng),曾文驅(qū)
(1.西南交通大學(xué)信息科學(xué)與技術(shù)學(xué)院,四川 成都 611730;2.廣州地鐵設(shè)計(jì)研究院股份有限公司,廣東 廣州 510010)
近年來(lái),各行業(yè)信息逐漸表現(xiàn)出資源異構(gòu)、分布性、解耦性等特點(diǎn)[1],使用工作流技術(shù)來(lái)管理業(yè)務(wù)流程已成為一種趨勢(shì)[2-4]。工作流是一類(lèi)能夠完全或者部分自動(dòng)執(zhí)行的經(jīng)營(yíng)過(guò)程,根據(jù)一系列過(guò)程規(guī)則、文檔、信息或任務(wù)能夠在不同的執(zhí)行者之間傳遞、執(zhí)行[5],市面上出現(xiàn)了如JBPM(Java Business Process Management)、Activiti、Flowable等具有代表性的工作流產(chǎn)品[6-8]。
企業(yè)為了適應(yīng)越來(lái)越激烈的市場(chǎng)競(jìng)爭(zhēng)和不斷變化的業(yè)務(wù)需求,業(yè)務(wù)流程隨著時(shí)間的推移會(huì)經(jīng)常發(fā)生改變,當(dāng)前工作流系統(tǒng)由于工作流程、工作規(guī)則的相對(duì)固定,很難根據(jù)實(shí)際變化及時(shí)調(diào)整流轉(zhuǎn)邏輯、任務(wù)權(quán)限、任務(wù)資源等組成要素。因此,工作流的柔性特性已經(jīng)成為任何一個(gè)工作流推廣應(yīng)用的關(guān)鍵賣(mài)點(diǎn)之一,同時(shí)也是難點(diǎn)之一[9-10]。
目前,國(guó)內(nèi)外學(xué)者們對(duì)工作流柔性的理論方法進(jìn)行了不同角度的研究分析。蔣艷榮等人[11]研究了柔性活動(dòng)的動(dòng)態(tài)細(xì)化方法,通過(guò)構(gòu)建知識(shí)樹(shù)作為啟發(fā)信息,結(jié)合約束進(jìn)行指導(dǎo)檢驗(yàn),實(shí)現(xiàn)柔性活動(dòng)的動(dòng)態(tài)細(xì)化。李金艷等人[12]及馬晨華等人[13]從工作流系統(tǒng)柔性訪問(wèn)控制模型著手,分析柔性角色的動(dòng)態(tài)授權(quán)。Sprovieri等人[14]研究了一種規(guī)劃算法來(lái)解決業(yè)務(wù)流程建模靈活性問(wèn)題,使其可以在運(yùn)行時(shí)計(jì)劃基于案例的業(yè)務(wù)流程。通過(guò)對(duì)各研究的歸納總結(jié),柔性工作流具體表現(xiàn)在以下2個(gè)方面:1)任務(wù)動(dòng)態(tài)變更,即流程運(yùn)行期間對(duì)任務(wù)作出變更后,如任務(wù)屬性的變更或任務(wù)順序的變更等,無(wú)需重啟流程,即可實(shí)現(xiàn)流程實(shí)例的自更新;2)路徑動(dòng)態(tài)變更,即在流程建?;A(chǔ)上,任務(wù)的執(zhí)行路徑可以根據(jù)實(shí)際業(yè)務(wù)情況發(fā)生變化,在運(yùn)行中動(dòng)態(tài)構(gòu)建靜態(tài)建模圖中沒(méi)有表示的路徑或者動(dòng)態(tài)選擇合適的路徑。
而對(duì)于流程的路徑柔性,即在運(yùn)行過(guò)程中實(shí)現(xiàn)流程路徑的靈活變更成為當(dāng)前研究的熱點(diǎn)方向。有學(xué)者[15-16]開(kāi)發(fā)了基于ECA(Event-Condition-Action)規(guī)則的圖形化工作流建模工具,通過(guò)在流程的關(guān)鍵決策點(diǎn)制定響應(yīng)機(jī)制,為用戶提供選擇“執(zhí)行路徑”的靈活性。為了解決云服務(wù)工作流靈活性問(wèn)題,F(xiàn)radj等人[17]在構(gòu)建了BPMN模型的基礎(chǔ)上,使用狀態(tài)圖表示云服務(wù)工作流行為,控制系統(tǒng)負(fù)責(zé)根據(jù)狀態(tài)圖定義的引擎行為來(lái)決定工作流的執(zhí)行,從而實(shí)現(xiàn)路徑柔性。
通過(guò)分析歸納,上述研究在工作流路徑動(dòng)態(tài)選擇及變更問(wèn)題上,對(duì)國(guó)內(nèi)的工作流系統(tǒng)而言仍有如下方面亟待改進(jìn):1)多數(shù)研究只是加入了規(guī)則約束且在關(guān)鍵節(jié)點(diǎn)處才能響應(yīng)路徑的變化,不適合國(guó)內(nèi)工作流系統(tǒng)任意節(jié)點(diǎn)業(yè)務(wù)路徑多變的特性;2)國(guó)內(nèi)工作流系統(tǒng)審批任務(wù)眾多,面臨著多步多分支回退,涉及任務(wù)重做,現(xiàn)有研究沒(méi)有涉及重做過(guò)程的數(shù)據(jù)一致性;3)對(duì)于多審批會(huì)簽的工作流系統(tǒng),難以實(shí)現(xiàn)在流程運(yùn)行中修改并行路線。上述需求都是工作流柔性問(wèn)題的重要表現(xiàn),本文在現(xiàn)有研究及工具基礎(chǔ)上對(duì)其進(jìn)行分析改進(jìn)。
工作流的應(yīng)用分為2個(gè)階段,建模階段和運(yùn)行階段,流程建模是設(shè)計(jì)人員對(duì)業(yè)務(wù)過(guò)程進(jìn)行抽象提取,利用建模工具按照工作流建模標(biāo)準(zhǔn)設(shè)計(jì)出可以通過(guò)工作流引擎解析并運(yùn)行的流程[10]?,F(xiàn)有的工作流系統(tǒng)一旦模型建立,除了其中定義的路徑判斷,很難在運(yùn)行階段根據(jù)實(shí)際需求更改路徑及分支,比較典型的問(wèn)題有流程回退和任務(wù)加簽,本文對(duì)這2個(gè)問(wèn)題進(jìn)行分析并提出相應(yīng)的技術(shù)解決方案,以此增強(qiáng)工作流的路徑柔性。
圖1為傳統(tǒng)工作流系統(tǒng)實(shí)現(xiàn)回退功能的審批工作流建模圖。
圖1 傳統(tǒng)工作流審批回退流程模型圖
圖1描述的業(yè)務(wù)為:用戶辦理評(píng)審任務(wù)時(shí),審批人員根據(jù)前序任務(wù)的辦理情況,可以指定駁回到前序任務(wù),從而實(shí)現(xiàn)流程的流轉(zhuǎn)控制。從圖1中可以看出,駁回的流轉(zhuǎn)線需要體現(xiàn)在模型圖上。但是在實(shí)際的企業(yè)流程模型中,涉及的任務(wù)量往往是龐大的。對(duì)于需要具備回退功能的任務(wù)節(jié)點(diǎn)而言,需要流程建模人員在建模階段考慮大量的與運(yùn)行時(shí)業(yè)務(wù)相關(guān)的操作,偏移了建模人員的關(guān)注點(diǎn)。除此之外,企業(yè)需求是多變的,建模完成的流程圖可能在運(yùn)行階段需要更改。傳統(tǒng)工作流系統(tǒng)必須更改建模圖再重啟流程方能生效,即無(wú)法在流程運(yùn)行中變更流轉(zhuǎn)路徑。
因此工作流系統(tǒng)需要在運(yùn)行中實(shí)現(xiàn)用戶的自定義回退,而不需要所有回退的情況都在建模階段定義。雖然目前,很多工作流系統(tǒng)應(yīng)用都對(duì)這一業(yè)務(wù)進(jìn)行了補(bǔ)充和改進(jìn),但是,多數(shù)回退僅支持簡(jiǎn)單的回退,對(duì)有并行路由和排他路由的回退研究較少,沒(méi)有考慮回退中任務(wù)數(shù)據(jù)的一致性并且會(huì)發(fā)生回退死鎖[18-19]。接下來(lái)分析流程回退存在的幾種場(chǎng)景。
1.1.1 典型回退場(chǎng)景分析
1)順序、排他分支(XOR)及合并回退。
順序分支即2個(gè)活動(dòng)之間呈前驅(qū)后繼關(guān)系,節(jié)點(diǎn)之間只有一條通路。這種模式回退較簡(jiǎn)單,不用考慮回退后數(shù)據(jù)一致性問(wèn)題與流程死鎖,數(shù)據(jù)恢復(fù)也容易實(shí)現(xiàn),直接回退到歷史表中的目標(biāo)節(jié)點(diǎn)即可。
排他分支與排他合并的流程模型圖如圖2所示,排他分支節(jié)點(diǎn)后有多條分支,在執(zhí)行過(guò)程中,只能選擇其中一條路徑,所以此種模式分支與合并的回退與順序回退方式相同。
圖2 包含排他路由的流程模型圖
2)并行(AND)分支回退。
流程執(zhí)行到并行分支會(huì)創(chuàng)建多條同步執(zhí)行的路徑,所以在跨并行回退時(shí)需要考慮其他分支的執(zhí)行情況。如圖3所示,當(dāng)活動(dòng)4需要回退到活動(dòng)2時(shí),流程運(yùn)行到AND分支再次同步創(chuàng)建分支任務(wù),由于另一條并行分支的活動(dòng)7處于正在執(zhí)行狀態(tài),導(dǎo)致其前后數(shù)據(jù)不一致的問(wèn)題出現(xiàn)。
圖3 并行分支回退
3)并行合并回退。
與圖3所描述功能相對(duì)應(yīng)的是并行合并回退,如圖4所示。當(dāng)活動(dòng)7回退到活動(dòng)4后,AND合并分支將一直等待活動(dòng)6的觸發(fā),但是活動(dòng)6并沒(méi)有創(chuàng)建,導(dǎo)致流程死鎖的出現(xiàn)。
圖4 并行合并回退
1.1.2 支持跨分支合并的回退算法
為了更好地表達(dá)改進(jìn)的流程回退理論方法,本文通過(guò)形式化定義來(lái)描述算法中需要的流程相關(guān)概念。
一個(gè)流程可以用二元組E來(lái)定義,其中A表示流程的活動(dòng)集,R代表活動(dòng)之間的依賴關(guān)系,A和R的定義如下:
A用四元組A(split_type,join_type,AC,status)表示。1)split_type與join_type表示該活動(dòng)節(jié)點(diǎn)類(lèi)型,其值可為Null、AND(并行)、XOR(排他)。Null代表該活動(dòng)為順序線性活動(dòng),當(dāng)split_type為AND,表示活動(dòng)為并行分支活動(dòng),為XOR表示排他分支活動(dòng),當(dāng)join_type為AND代表并行合并活動(dòng),為XOR代表排他合并活動(dòng)。2)AC表示該活動(dòng)的前驅(qū)節(jié)點(diǎn)集合。3)status描述該活動(dòng)實(shí)例狀態(tài),有未啟動(dòng)、掛起、激活、已完成這4種狀態(tài)。通過(guò)以上信息基本描述了在回退過(guò)程中需要的活動(dòng)信息。
R表示活動(dòng)之間的依賴集合??梢酝ㄟ^(guò)R表示,access表示a到b的可達(dá)性,即是否存在至少一條從活動(dòng)a到b的通路,如果可達(dá),則access為true,否則為false。type表示a到b之間通路類(lèi)型,根據(jù)上文對(duì)幾種回退場(chǎng)景的分析,總結(jié)出如下幾種通路類(lèi)型:順序關(guān)系Sequence,跨并行分支AndSplit,跨并行合并AndJoin,跨排他分支XorSplit,跨排他合并XorJoin。
本文在上述定義描述的基礎(chǔ)上,對(duì)現(xiàn)有工作流回退邏輯進(jìn)行改進(jìn),研究支持跨并行及合并的多步回退算法。算法1主要表達(dá)了在不同分支路由情況下獲取可回退節(jié)點(diǎn)集合的不同處理邏輯,以保證流程數(shù)據(jù)的一致性且不會(huì)發(fā)生死鎖等問(wèn)題。
算法1 獲取可回退節(jié)點(diǎn)的回溯算法
Input: 活動(dòng)信息集E,回溯任務(wù)currentAct,待回退活動(dòng)srcAct
Output: 可回退目標(biāo)節(jié)點(diǎn)集rollbackList
1: function GetRollbackList(E,currentAct,srcAct)
2: for i←0 to currentAct.AC.length do
3: preAct←currentAct.AC[i]
//若preAct已經(jīng)回溯訪問(wèn)過(guò)了、currentActc處于激活狀態(tài)或者與待回退活動(dòng)不可達(dá),則跳過(guò)
4: if preAct is visited or currentAct.status==active or R(preAct,srcAct).access==false then
5: continue
6: end if
7: if R(preAct,currentAct).type==Sequence then
8: add preAct to rollbackList
9: else if R(preAct,currentAct).type==AndSplit then
10: terminate all subsequent activities of preAct
11: add preAct to rollbackList
12: else if R(preAct,currentAct).type==AndJoin then
13: add A(currentAct).AC to rollbackList
14: else add preAct to rollbackList//排他分支合并情況
15: end if
//進(jìn)入下層回溯
16: GetRollbackList(E,preAct,srcAct)
17: end for
18: return rollbackList
19: end function
1.1.3 回退執(zhí)行
在解決了回退列表的獲取問(wèn)題后,下一步則是根據(jù)用戶的選擇,執(zhí)行回退操作。在執(zhí)行回退時(shí),需要記錄2個(gè)方面的信息:1)回退前的流程實(shí)例上下文信息,用于回退異常恢復(fù)現(xiàn)場(chǎng);2)回退的目標(biāo)活動(dòng)歷史執(zhí)行數(shù)據(jù),用于回滾歷史操作,因?yàn)槟繕?biāo)活動(dòng)必然是已完成活動(dòng),該部分信息可以通過(guò)歷史記錄表獲取,作為目標(biāo)回退后再次執(zhí)行該活動(dòng)的數(shù)據(jù)來(lái)源,保證數(shù)據(jù)的一致性。圖5為執(zhí)行回退邏輯的流程圖。
圖5 回退執(zhí)行流程圖
1.2.1 并行會(huì)簽任務(wù)現(xiàn)狀
在如辦公自動(dòng)化系統(tǒng)、電子政務(wù)系統(tǒng)、企業(yè)MIS系統(tǒng)中,都有涉及會(huì)簽的功能[20-21],即一個(gè)任務(wù)以并行的方式多人辦理,滿足一定條件(如通過(guò)率)才進(jìn)入下一任務(wù)。圖6為截取的一段多專(zhuān)業(yè)設(shè)計(jì)師的會(huì)簽審批流程圖。
圖6 傳統(tǒng)工作流審批會(huì)簽流程模型圖
從圖6可知,當(dāng)前大多工作流系統(tǒng)實(shí)現(xiàn)多專(zhuān)業(yè)審批任務(wù)會(huì)簽時(shí),在模型圖就構(gòu)建了并行的多個(gè)任務(wù)[22]。帶來(lái)的問(wèn)題是:首先,隨著企業(yè)組織人員的擴(kuò)大,后續(xù)也會(huì)加入更多的人員審批,需要在模型圖上繼續(xù)增添并行分支路徑;其次,這些任務(wù)的功能相似,只是辦理人員不同。所以這種方案造成流程圖模型及功能冗余復(fù)雜。
1.2.2 支持運(yùn)行中并行任務(wù)路徑變更的解決方案
現(xiàn)有工作流實(shí)現(xiàn)并行會(huì)簽需要在流程建模階段設(shè)置多個(gè)并行任務(wù),不符合柔性工作流的需求特征。本文提出如下解決辦法,在不改變模型圖的基礎(chǔ)上,實(shí)現(xiàn)運(yùn)行中并行任務(wù)的路徑變更。
1)擴(kuò)展配置文件。
就此問(wèn)題的解決方案,本文通過(guò)研究工作流BPMN模型規(guī)范文件[23],對(duì)其進(jìn)行擴(kuò)展,如圖7所示,擴(kuò)展增加多實(shí)例節(jié)點(diǎn)的配置信息部分。
圖7 實(shí)現(xiàn)多實(shí)例并行路徑變更的擴(kuò)展配置
圖7的內(nèi)容為關(guān)鍵配置信息,具體解釋如下:
assigneeList與assignee從流程變量得到,其來(lái)源于建模階段的任務(wù)節(jié)點(diǎn)配置,表示會(huì)簽人員列表和當(dāng)前會(huì)簽人員。
isSequential表示多實(shí)例任務(wù)是串行還是并行,串行則先后創(chuàng)建任務(wù),否則代表并行創(chuàng)建多個(gè)同步任務(wù)實(shí)例。
completionCondition代表該任務(wù)完成條件,可直接配置邏輯表達(dá)式,如上文中,當(dāng)通過(guò)人數(shù)/總實(shí)例大于等于0.6則通過(guò),也可配置實(shí)現(xiàn)類(lèi)的全路徑,通過(guò)注入Bean方式獲取。
2)多實(shí)例任務(wù)的創(chuàng)建。
多實(shí)例任務(wù)的創(chuàng)建與普通任務(wù)創(chuàng)建不一樣,多實(shí)例任務(wù)在流程圖上的表現(xiàn)為單節(jié)點(diǎn),存在著一對(duì)多的內(nèi)在邏輯關(guān)系,而普通任務(wù)節(jié)點(diǎn)完全按照流程定義節(jié)點(diǎn)數(shù)進(jìn)行分配。為了實(shí)現(xiàn)該功能,本文通過(guò)增加以下流程變量,如表1所示,將用戶設(shè)計(jì)的可配置文件解析為業(yè)務(wù)中可以感知的流程狀態(tài),從而實(shí)現(xiàn)多實(shí)例任務(wù)創(chuàng)建過(guò)程的控制邏輯。
表1 多實(shí)例任務(wù)創(chuàng)建所需的流程變量
接下來(lái)結(jié)合以上變量的變化對(duì)不同串/并行多實(shí)例任務(wù)的創(chuàng)建過(guò)程進(jìn)行分析。
1)多實(shí)例串行任務(wù)的創(chuàng)建。
圖8為創(chuàng)建多實(shí)例串行任務(wù)的邏輯圖,除了要?jiǎng)?chuàng)建多個(gè)串行子任務(wù)以外,還需要?jiǎng)?chuàng)建單獨(dú)的子流程執(zhí)行實(shí)例。這樣做的目的,一是將變量作用域進(jìn)行細(xì)分,二是串行多任務(wù)的執(zhí)行不會(huì)影響原有執(zhí)行實(shí)例。流程變量的初始值如表2所示。
圖8 多實(shí)例串行任務(wù)創(chuàng)建示意圖
表2 創(chuàng)建多實(shí)例串行任務(wù)的流程變量初始化
在執(zhí)行過(guò)程中,表2的流程變量需要根據(jù)執(zhí)行情況發(fā)生變化,情況如下:每當(dāng)完成一個(gè)任務(wù)后,numOfCompletedInstances自加;numOfActiveInstances保持為1,因?yàn)橐淮沃挥幸粋€(gè)串行任務(wù)正在執(zhí)行;loopCounter在此情況下標(biāo)識(shí)歷史串行執(zhí)行數(shù),進(jìn)行自加操作。
2)多實(shí)例并行任務(wù)的創(chuàng)建。
與多實(shí)例串行任務(wù)不同的是,每個(gè)并行任務(wù)都屬于一個(gè)新的子級(jí)執(zhí)行實(shí)例,它們有著相同的父級(jí)執(zhí)行實(shí)例,如圖9所示,因?yàn)椴⑿腥蝿?wù)相互獨(dú)立,分配在不同的執(zhí)行實(shí)例可達(dá)到解耦合、提高容錯(cuò)性的目的。流程變量的初始值如表3所示。
圖9 多實(shí)例并行任務(wù)創(chuàng)建示意圖
表3 創(chuàng)建多實(shí)例并行任務(wù)的流程變量初始化
在執(zhí)行過(guò)程中,每當(dāng)完成一個(gè)任務(wù)后,numOfCompletedInstances自加,numOfActiveInstances自減;此時(shí)loopCounter標(biāo)識(shí)每一個(gè)并行任務(wù),所以保持不變。
通過(guò)以上分析,結(jié)合圖10的業(yè)務(wù)邏輯處理,則可在不改變流程模型基礎(chǔ)上,實(shí)現(xiàn)運(yùn)行中多并行任務(wù)的加簽功能,同時(shí)保證各執(zhí)行分支的數(shù)據(jù)隔離性。
圖10 實(shí)現(xiàn)多實(shí)例任務(wù)創(chuàng)建的流程圖
本文結(jié)合當(dāng)前流行的工作流引擎Flowable,在引擎組件中加入路徑變更管理器,實(shí)現(xiàn)上述邏輯,總體組件框架如圖11所示,包括以下幾部分:1)事務(wù)管理器;2)模型解析組件;3)數(shù)據(jù)恢復(fù)組件;4)總控制器。
圖11 組件框架
在工作流系統(tǒng)中,存在調(diào)用外部應(yīng)用的活動(dòng)節(jié)點(diǎn),對(duì)于這部分節(jié)點(diǎn),在進(jìn)行回退操作時(shí),也需要進(jìn)行撤銷(xiāo)回退,事務(wù)管理器用于統(tǒng)一外部數(shù)據(jù)事務(wù)與流程回退事務(wù),保證數(shù)據(jù)的一致性。模型分析組件用于這2個(gè)方面:一是對(duì)流程模型解析,以獲取不同回退情況下的模型節(jié)點(diǎn);二是通過(guò)本文的回溯算法獲取流程模型的可回退列表。數(shù)據(jù)恢復(fù)組件用于對(duì)中間活動(dòng)撤銷(xiāo)過(guò)程中進(jìn)行數(shù)據(jù)恢復(fù)??偪刂破魇秦?fù)責(zé)調(diào)用各模塊實(shí)現(xiàn)具體功能的用戶接口。
Flowable是Activiti的一個(gè)分支,作為目前廣泛使用的輕量級(jí)業(yè)務(wù)流程引擎,它可以十分靈活地加入任何應(yīng)用、服務(wù)或者構(gòu)架中。為了實(shí)現(xiàn)本文研究的回退理論及并行多實(shí)例會(huì)簽,對(duì)其進(jìn)行如下的改進(jìn)實(shí)現(xiàn):
1)在其核心類(lèi)TaskService中新增stopBeforeRollBack(srcTask,transaction)方法,實(shí)現(xiàn)停止當(dāng)前活動(dòng)以及其他并行分支的活動(dòng),參數(shù)1為待回退的活動(dòng),參數(shù)2為統(tǒng)一回退事務(wù)的上下文對(duì)象。
2)在processService類(lèi)中新增方法revokeActsByRollBack(srcTask,destTask,transaction),用于撤銷(xiāo)待回退活動(dòng)與目標(biāo)活動(dòng)之間的活動(dòng),即刪除回退中已執(zhí)行的活動(dòng)實(shí)例及回滾工作流與業(yè)務(wù)操作,需要保證回滾處于同一事務(wù)當(dāng)中。
3)新增流程回退核心控制類(lèi)TaskRollBack,相當(dāng)于上文回退模型圖中的回退控制調(diào)度器,主要包括getRollBackList、executRollBack等方法。getRollBackList是對(duì)1.1.2節(jié)獲取可回退活動(dòng)列表的實(shí)現(xiàn),executRollBack是對(duì)1.1.3節(jié)所述流程圖的功能實(shí)現(xiàn),即調(diào)用改進(jìn)步驟1與步驟2所述的新增方法,執(zhí)行流程回退。
4)在MultipleTaskService類(lèi)中增加方法mutipleTaskCreat(bpmnXmlDoc,srcTask),其業(yè)務(wù)邏輯實(shí)現(xiàn)了圖10所述的不同情況多實(shí)例任務(wù)創(chuàng)建,參數(shù)1為流程模版XML文件配置信息,參數(shù)2代表多實(shí)例節(jié)點(diǎn)的源任務(wù)。
本文所述方法在中車(chē)產(chǎn)品快速配置設(shè)計(jì)平臺(tái)得以應(yīng)用,軌道交通設(shè)計(jì)過(guò)程面臨著多路由、多分支的審批回退業(yè)務(wù),通過(guò)引入Flowable引擎,并結(jié)合上文所述改進(jìn),實(shí)現(xiàn)了其設(shè)計(jì)過(guò)程的回退方案和運(yùn)行中并行會(huì)簽任務(wù)的創(chuàng)建。下面以地鐵轉(zhuǎn)向架配置設(shè)計(jì)流程為例,如圖12所示,驗(yàn)證本文所述回退算法的應(yīng)用效果。
圖12 地鐵轉(zhuǎn)向架設(shè)計(jì)工作流模型圖
該流程存在順序、排他、并行多種路由方式,工作流引擎首先加載解析流程模型圖,并由引擎控制驅(qū)動(dòng),當(dāng)需要執(zhí)行回退操作時(shí),得到表4所示的可回退目標(biāo)集合。用戶根據(jù)設(shè)計(jì)業(yè)務(wù)的實(shí)際情況,選擇具體的回退活動(dòng),執(zhí)行回退操作。值得注意的是,由于活動(dòng)眾多,本文只列舉該過(guò)程關(guān)鍵回退活動(dòng)。
表4 測(cè)試獲取的關(guān)鍵活動(dòng)可回退結(jié)果
在回退集合獲取的回溯過(guò)程中,由于排他路由的選擇,可能會(huì)出現(xiàn)回退到從未辦理過(guò)的活動(dòng),所以表中存在多種情況的回退路徑。但是,通過(guò)本文所述的模型分析組件,在運(yùn)行中可以發(fā)現(xiàn)無(wú)效路徑,從而選擇正確的回退路徑。同時(shí),并行分支活動(dòng)及中間活動(dòng)的數(shù)據(jù)與狀態(tài)在事務(wù)管理器與數(shù)據(jù)恢復(fù)組件的作用下也一起回退,實(shí)現(xiàn)了回退數(shù)據(jù)的一致性,體現(xiàn)出優(yōu)秀的性能。
為了滿足工作流系統(tǒng)對(duì)實(shí)際場(chǎng)景中不確定性的業(yè)務(wù)變更支持,本文研究了流程路徑回退與多實(shí)例會(huì)簽任務(wù)加簽功能來(lái)增強(qiáng)工作流路徑變更柔性。文獻(xiàn)[18]通過(guò)配置條件路徑、缺省路徑和默認(rèn)回退路徑實(shí)現(xiàn)運(yùn)行中路徑選擇策略,但是在回退過(guò)程沒(méi)有考慮數(shù)據(jù)的一致性問(wèn)題,配置條件不夠靈活;文獻(xiàn)[22]提出了適應(yīng)順序會(huì)簽和并行會(huì)簽這2種會(huì)簽策略,側(cè)重于會(huì)簽活動(dòng)通過(guò)的規(guī)則判斷,沒(méi)有考慮運(yùn)行中串/并行會(huì)簽路徑的創(chuàng)建問(wèn)題。本文在現(xiàn)有研究的基礎(chǔ)上,從工作流管理系統(tǒng)的路徑需求出發(fā),結(jié)合Flowable工作流引擎,實(shí)現(xiàn)了一個(gè)能獨(dú)立于軟件平臺(tái)的,基于Web應(yīng)用的柔性工作流系統(tǒng),并在中車(chē)軌道交通產(chǎn)品快速配置設(shè)計(jì)系統(tǒng)中應(yīng)用,通過(guò)系統(tǒng)的實(shí)踐與測(cè)試,驗(yàn)證了技術(shù)的可行性與有效性。此外,如何支持在流程運(yùn)行階段更改較為復(fù)雜的流程定義并與流程實(shí)例實(shí)時(shí)生效而不產(chǎn)生沖突,是下一步的重點(diǎn)研究?jī)?nèi)容。