專利名稱:流程分支并行匯聚的實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計算機(jī)應(yīng)用技術(shù),具體來說就是提供了工作流流程分支并行匯聚的實現(xiàn)。
背景技術(shù):
工作流被廣泛應(yīng)用于政府辦公,企業(yè)業(yè)務(wù)流程辦理,員工管理,物流等各個領(lǐng)域。目前,政 府辦公,企業(yè)內(nèi)部人事管理,業(yè)務(wù)管理都有大量的業(yè)務(wù)流程的需求,這些業(yè)務(wù)流程快速,方便 地提供各種信息的流轉(zhuǎn),對政府辦公效率提高,企業(yè)信息快速反應(yīng),降低業(yè)務(wù)運營成本起著巨 大的作用。流程的分支匯聚則足這些辦公或業(yè)務(wù)流程中十分常見的業(yè)務(wù)。流程的分支并行匯聚 是說流程在運行到某個環(huán)節(jié)(發(fā)散環(huán)節(jié))時,此環(huán)節(jié)將任務(wù)同時發(fā)到了不同的后續(xù)環(huán)節(jié)。這 些后續(xù)環(huán)節(jié)處理完成之后,需要將處理結(jié)果發(fā)送到同一個環(huán)節(jié)(匯聚環(huán)節(jié))進(jìn)行匯總處理。在 發(fā)散環(huán)節(jié)將任務(wù)發(fā)出后,是否可以匯聚的條件(匯聚環(huán)節(jié)可以被激活)取決于發(fā)散環(huán)節(jié)和匯聚 環(huán)節(jié)之間的所有中間環(huán)節(jié)是否存在在活動的環(huán)節(jié)實例。在一個流程中,往杵有多個發(fā)散環(huán)節(jié), 多個匯聚環(huán)節(jié)。如何確定發(fā)散環(huán)節(jié)對應(yīng)的匯聚環(huán)節(jié),如何計算發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間 環(huán)節(jié)就顯得非常重要。本方法計算匯聚環(huán)節(jié)使用査找發(fā)散點到流程結(jié)束環(huán)節(jié)的所有路徑的交叉 點的方法,邏輯嚴(yán)密,匯聚環(huán)節(jié)計算準(zhǔn)確,適應(yīng)多級發(fā)散、匯聚嵌套等各種復(fù)雜的匯聚邏輯。 同時,將匯聚環(huán)節(jié)及中間環(huán)節(jié)的查找提前到流程定義,也相應(yīng)減輕了流程運行期引擎執(zhí)行匯聚 的計算壓力,提卨了運行期引擎的執(zhí)行效率。
發(fā)明內(nèi)容
本發(fā)明提供一種流程分支并行匯聚的實現(xiàn)方法,整個匯聚方法分為兩部分
a) 流程定義時,計算出發(fā)散環(huán)節(jié)對應(yīng)的匯聚環(huán)節(jié),記錄發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間環(huán)節(jié)。
b) 流程運行時,判斷匯聚條件是否滿足査詢發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間環(huán)節(jié)有無活 動的環(huán)節(jié)實例,有,則不能匯聚;無,則可以匯聚。
計算匯聚環(huán)節(jié)的基本思路遍歷發(fā)散環(huán)節(jié)通向流程結(jié)束環(huán)節(jié)的所有路徑,取這些路徑的交 匯點,第一個交匯點即為該發(fā)散環(huán)節(jié)對應(yīng)的匯聚環(huán)節(jié)。 計算匯聚環(huán)節(jié)的具體算法
1) 創(chuàng)建一個二維鏈表,用以存放所有的路徑。
2) 創(chuàng)建第一條路徑(鏈表),將發(fā)散環(huán)節(jié)存入此路徑,并將這條路徑存入二維鏈表。3) 遍歷二維鏈表里的所有路徑,對每一條路徑(設(shè)為當(dāng)前路徑)的最后一個環(huán)節(jié),如果此 環(huán)節(jié)有且只有一個后續(xù)環(huán)節(jié),則將此后續(xù)環(huán)節(jié)存放進(jìn)當(dāng)前路徑。如果此環(huán)節(jié)有不止一個后續(xù)環(huán) 節(jié),則除第一個后續(xù)環(huán)節(jié)外,對每個后續(xù)環(huán)節(jié),都創(chuàng)建一條新的路徑,并將當(dāng)前路徑中存放的 所有環(huán)節(jié)存入新的路徑,這樣當(dāng)前路徑就拆分為多條路徑(和后續(xù)環(huán)節(jié)數(shù)量一致)。將每個后續(xù) 環(huán)節(jié)分別存入一條路徑,并把所有新創(chuàng)建的路徑存放到二維鏈表中。
4) 遞歸執(zhí)行3),直到二維鏈表中所有的路徑的最后一個環(huán)節(jié)都沒有后續(xù)環(huán)節(jié)為止。這樣, 二維鏈表中存儲的路徑即為發(fā)散環(huán)節(jié)到流程結(jié)束環(huán)節(jié)的所有路徑。
5) 取所有路徑第一個交匯點即為匯聚環(huán)節(jié)。
本發(fā)明的有益效果是該分支并行匯聚的實現(xiàn)方法精確,高效率地判斷了流程匯聚的條件,
基本上能適應(yīng)所有匯聚業(yè)務(wù),為有匯聚需求的流程提供了完美的解決方案。
附圖1是匯聚流程圖示
具體實施例方式
參照附圖對本發(fā)明的力'法作以下詳細(xì)的說明。
本發(fā)明的流程分支并行匯聚的實現(xiàn)方法,包括流程的定義和流程的運行,其中, a)流程定義時,計算出發(fā)散環(huán)節(jié)對應(yīng)的匯聚環(huán)節(jié),記錄發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間環(huán)
■M ;
b)流程運行時,判斷匯聚條件是否滿足査詢發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間環(huán)節(jié)有無活 動的環(huán)節(jié)實例,有,則不能匯聚;無,則能匯聚;
計算匯聚環(huán)節(jié)遍歷發(fā)散環(huán)節(jié)通向流程結(jié)束環(huán)節(jié)的所有路徑,取這些路徑的交匯點,第一 個交匯點即為該發(fā)散環(huán)節(jié)對應(yīng)的匯聚環(huán)節(jié);
匯聚環(huán)節(jié)的具體算法如下
1) 創(chuàng)建一個二維鏈表,用以存放所有的路徑;
2) 創(chuàng)建第一條路徑或鏈表,將發(fā)散環(huán)節(jié)存入此路徑,并將這條路徑存入二維鏈表;
3) 遍歷二維鏈表里的所有路徑,針對每一條路徑的最后一個環(huán)節(jié),(1)此環(huán)節(jié)有且只有 一個后續(xù)環(huán)節(jié),則將此后續(xù)環(huán)節(jié)存放進(jìn)當(dāng)前路徑;(2)此環(huán)節(jié)有不止一個后續(xù)環(huán)節(jié),則除第一 個后續(xù)環(huán)節(jié)外,對每個后續(xù)環(huán)節(jié),都創(chuàng)建一條新的路徑,并將當(dāng)前路徑中存放的所有環(huán)節(jié)存入 新的路徑,這樣當(dāng)前路徑就拆分為多條路徑,且路徑的數(shù)量與后續(xù)環(huán)節(jié)數(shù)量一致,將每個后續(xù) 環(huán)節(jié)分別存入一條路徑,并把所有新創(chuàng)建的路徑存放到二維鏈表中;
4) 遞歸執(zhí)行3),直到二維鏈表屮所有的路徑的最后一個環(huán)節(jié)都沒有后續(xù)環(huán)節(jié)為止,這樣,二維鏈表中存儲的路徑即為發(fā)散環(huán)節(jié)到流程結(jié)束環(huán)節(jié)的所有路徑;
5)取所有路徑第一個交匯點即為匯聚環(huán)節(jié)。 實施例
如圖1所示,1、 4、 15是發(fā)散環(huán)節(jié),需要計算它們分別對應(yīng)的匯聚環(huán)節(jié)計算環(huán)節(jié)1對應(yīng)的 匯聚環(huán)節(jié),按照上述步驟,計算過稃如下
執(zhí)行完l)、 2)時,二維鏈表只包含一條路徑l
循環(huán)執(zhí)行步驟3),第一次循環(huán)時,環(huán)節(jié)1的后續(xù)環(huán)節(jié)為2、 3、 13,由于環(huán)節(jié)i的后續(xù)環(huán)節(jié) 不止一個,路徑1》將被拆分為三條,復(fù)制路徑1的所有元素進(jìn)入拆分出的路徑,并將環(huán)節(jié)1 的3個后續(xù)環(huán)節(jié)分別存放進(jìn)這三條路徑,這樣這條二維鏈表變?yōu)槿缦?1+2
1 + 13
外節(jié)2, 3, 13的后續(xù)環(huán)節(jié)都只有一個,因此第二次循環(huán)后,二維鏈表變?yōu)?1 + 13+14
如第一次和第二次循環(huán)的邏輯,第三次循環(huán)后,二維鏈表變?yōu)?br>
1+2》4^7 l+2》4今6 1卡3^11一12 1 + 13+14—12
如此反復(fù),當(dāng)二維鏈表中所有的路徑的最后一個環(huán)節(jié)都沒有后續(xù)環(huán)節(jié)時,循環(huán)結(jié)束。此時
二維鏈表為
1^2^4+9+10^19^12^15^16+18+20
1">3^11》12+15+16+18》20
1 + 13+14+12—15+16+18+201">2+4^5^8^10^19+12^15+16+18~>20 1+2+4+7》8^10+19^12+15^16^18》20 1">2+4^6^8^10^19" 12^15^16^18^20 1》3^11^12+15^17+18+20 1》13^14+12+15^17^18》20 1^2+4^9^10^19^12^15+17^18^20 1—2^4+5》8+10+19^12》15+17+18》20 1^2+4》7》8+10—19^12+15+17+18~>20 1^2^4+6+8^10^19^12^15》17">18》20 取上述所有路徑的交匯點,第一個交匯點為12,即為匯聚環(huán)節(jié)。
用同樣的方法,我們可以得到環(huán)節(jié)4對應(yīng)的匯聚環(huán)節(jié)為環(huán)節(jié)10,環(huán)節(jié)15對應(yīng)的匯聚環(huán)節(jié)為 環(huán)節(jié)18。
記錄發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間環(huán)節(jié)
確定了發(fā)散環(huán)節(jié)對應(yīng)的匯聚環(huán)節(jié)后,就可以從第一歩中獲得的二維鏈表中杳找發(fā)散環(huán)節(jié)和匯 聚環(huán)節(jié)之間的中間環(huán)節(jié)了。邏輯如下
遍歷第一步中獲得的二維鏈表的所有路徑。每個路徑中獲取發(fā)散環(huán)節(jié)到對應(yīng)匯聚環(huán)節(jié)之間 的所有屮間環(huán)節(jié)。所有路徑的屮間環(huán)節(jié)的并集即為發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間所有的中間環(huán)節(jié)。
圖1所示,環(huán)節(jié)l和匯聚環(huán)節(jié)12之l'uj的中間環(huán)節(jié)為4, 19, 8, 11, 3, 7, 2, 13, 9, 6, 14, 10, 5。
運行時,判斷匯聚條件是否滿足
流程運行時,如果當(dāng)前環(huán)節(jié)是匯聚環(huán)節(jié),需要判斷匯聚條件是否滿足,只有當(dāng)匯聚條件滿足 時,才能發(fā)起該環(huán)節(jié)的任務(wù)。
匯聚條件是否滿足判斷方法如下
在計算匯聚環(huán)節(jié)的具體算法中,我們已經(jīng)獲得了每個發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間環(huán)節(jié), 查詢發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間環(huán)節(jié)有無活動的環(huán)節(jié)實例,如果有,匯聚條件不滿足;如 果沒有,匯聚條件滿足,可以進(jìn)行匯聚。
權(quán)利要求
1. 流程分支并行匯聚的實現(xiàn)方法,其特征在于包括流程的定義和流程的運行,其中,a)流程定義時,計算出發(fā)散環(huán)節(jié)對應(yīng)的匯聚環(huán)節(jié),記錄發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間環(huán)節(jié);b)流程運行時,判斷匯聚條件是否滿足查詢發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)之間的中間環(huán)節(jié)有無活動的環(huán)節(jié)實例,有,則不能匯聚;無,則能匯聚。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,匯聚環(huán)節(jié)的計算是遍歷發(fā)散環(huán)節(jié)通向流程結(jié)束環(huán)節(jié)的所有路徑,取這些路徑的交匯點,第一個交匯點即為該發(fā)散環(huán)節(jié)對應(yīng)的匯聚環(huán)節(jié);具體算方法如下-1) 創(chuàng)建一個二維鏈表,用以存放所有的路徑;2) 創(chuàng)建第一條路徑或鏈表,將發(fā)散環(huán)節(jié)存入此路徑,并將這條路徑存入二維鏈表;3) 遍歷二維鏈表里的所有路徑,針對每一條路徑的最后一個環(huán)節(jié),(O此環(huán)節(jié)有且只有個后續(xù)環(huán)節(jié),則將此后續(xù)環(huán)節(jié)存放進(jìn)當(dāng)前路徑;(2)此環(huán)節(jié)有不lt一個后續(xù)環(huán)節(jié),則除第一個后續(xù)環(huán)節(jié)外,對每個后續(xù)環(huán)節(jié),都創(chuàng)建一條新的路徑,并將當(dāng)前路徑中存放的所有環(huán)節(jié)存入新的路徑,這樣當(dāng)前路徑就拆分為多條路徑,且路徑的數(shù)量與后續(xù)環(huán)節(jié)數(shù)量一致,將每個后續(xù)環(huán)節(jié)分別存入一條路徑,并把所有新創(chuàng)建的路徑存放到二維鏈表中;4) 遞歸執(zhí)行3),直到二維鏈表屮所有的路徑的最后一個環(huán)節(jié)都沒有后續(xù)環(huán)節(jié)為止,這樣,二維鏈表中存儲的路徑即為發(fā)散環(huán)節(jié)到流程結(jié)束環(huán)節(jié)的所有路徑;5) 取所有路徑第一個交匯點即為匯聚環(huán)節(jié)。
全文摘要
本發(fā)明提供一種流程分支并行匯聚的實現(xiàn)方法。本方法分為兩部分1.流程定義中計算匯聚環(huán)節(jié)及匯聚中間環(huán)節(jié),具體實現(xiàn)為首先查找發(fā)散環(huán)節(jié)到流程結(jié)束環(huán)節(jié)之間所有的路徑,再查找第一個在這些路徑中全部出現(xiàn)的環(huán)節(jié),此環(huán)節(jié)即為發(fā)散環(huán)節(jié)對應(yīng)的匯聚環(huán)節(jié)。找到匯聚環(huán)節(jié)后,遍歷發(fā)散環(huán)節(jié)和匯聚環(huán)節(jié)的所有路徑,即可取得匯聚的所有中間環(huán)節(jié)。2.引擎運行過程中,到達(dá)匯聚環(huán)節(jié)時,通過查看匯聚的中間環(huán)節(jié)是否有活動實例來確定匯聚條件是否滿足。本方法的最大特點是邏輯嚴(yán)密,計算結(jié)果精確,適應(yīng)多級發(fā)散、匯聚嵌套等各種復(fù)雜的匯聚邏輯,同時,由于大量的計算開銷被提前到流程定義中,減輕了流程運行時引擎計算壓力,提高了運行效率。
文檔編號G06Q10/00GK101477651SQ20081023796
公開日2009年7月8日 申請日期2008年12月4日 優(yōu)先權(quán)日2008年12月4日
發(fā)明者付金濤, 李傳義, 王建華, 聶文婷, 清 胡 申請人:山東浪潮齊魯軟件產(chǎn)業(yè)股份有限公司