0 引言
作為PDM系統(tǒng)的重要組成部分,工作流管理有利于工作流的建立與執(zhí)行,從而達(dá)到簡化業(yè)務(wù)流程的目的。然而,現(xiàn)有的工作流管理解決方案是用來處理靜態(tài)業(yè)務(wù)流程。當(dāng)一個工作流程發(fā)生變化的時候,這些解決方案會完全中止執(zhí)行受到影響的工作流程實例,然后從頭開始執(zhí)行修改過的工作流程實例。這種簡單化的解決方案會導(dǎo)致任務(wù)已經(jīng)完成的工作流節(jié)點被重復(fù)執(zhí)行,從而造成系統(tǒng)資源的浪費(fèi)。目前許多學(xué)者對工作流的研究大多局限于工作流建模,有關(guān)動態(tài)工作流變化的問題卻沒有得到很好的解決,現(xiàn)存的解決方案不能夠為管理工作流變化提供有效的方法。因此,對PDM系統(tǒng)中動態(tài)工作流變化的分析與研究是十分必要的。
1 PDM系統(tǒng)中工作流的表達(dá)
工作流是一類能夠完全或部分自動執(zhí)行的業(yè)務(wù)過程,根據(jù)一系列過程規(guī)則,文檔、信息或任務(wù)能夠在不同的執(zhí)行者傳遞、執(zhí)行。作為一種計算機(jī)化的業(yè)務(wù)流程,工作流可以采用Petri網(wǎng)(Petri Net,PN)、有向圖(Directed Network Graph,DNG)等許多正式方法對其建模。因為基于有向圖的表達(dá)形式被廣泛的應(yīng)用在各種業(yè)務(wù)平臺中,所以本文采用它來實現(xiàn)工作流程平臺。于是,一個工作流W可以用一個二元組(N,C)來表示,其中N={n1,n2,…)為工作流中的各個活動,在工作流模型中表現(xiàn)為節(jié)點:C={c1,c2,…}為各個活動間的次序關(guān)系,在工作流模型中表現(xiàn)為節(jié)點間的連接線。圖1舉例說明了一個簡單的工作流W=(N,C),其中N={n0,n1,n2,n3,n4),C={c0,c1,c2,c3,c4}。如果連接線c指向節(jié)點n,那么c是節(jié)點n的輸入連接線;反之c是節(jié)點n的輸出連接線。每一個節(jié)點n又可以用一個四元組(t,u,Ci,Co)來表示,其中t代表相關(guān)任務(wù),u代表相關(guān)用戶,Ci代表所有輸入連接線,Co代表所有輸出連接線。每一條連接線c由一個三元組(r,ns,ne)表示,其中r是關(guān)于c的響應(yīng),ns是連接線c的開始節(jié)點,ne是連接線c的結(jié)束節(jié)點,節(jié)點ns是節(jié)點ne的前節(jié)點,節(jié)點ne是節(jié)點ns的后節(jié)點。一條連接線的響應(yīng)類型決定了它的觸發(fā)條件,假如一個節(jié)點被成功執(zhí)行,則它的輸出連接線將會觸發(fā)“接受”響應(yīng),否則其連接線將會觸發(fā)“拒絕”響應(yīng)。圖2提供了一個帶有不同響應(yīng)連接線的示例。
圖1 由五個節(jié)點和五條連接線組成的一個簡單的工作流
圖2 兩種響應(yīng)類型:“接受”和“拒絕”
在實際的工作流管理系統(tǒng)中,工作流被定義成模板或圖示的形式。當(dāng)一個工作流模板被初始化,它就被稱之為實例。任何時候,一個工作流實例中的所有節(jié)點可以按照狀態(tài)的不同劃分為三種類型:就緒提交節(jié)點,等待執(zhí)行節(jié)點,已完成節(jié)點。工作流實例中節(jié)點的狀態(tài)在執(zhí)行過程中會發(fā)生變化,節(jié)點不同狀態(tài)間的轉(zhuǎn)換如圖3所示。
圖3 狀態(tài)轉(zhuǎn)換
每個節(jié)點的初始狀都是“就緒提交”,當(dāng)此狀態(tài)的節(jié)點被其用戶開發(fā)來執(zhí)行時,這時節(jié)點狀態(tài)為“等待執(zhí)行”。如果節(jié)點被成功執(zhí)行,它的狀態(tài)就轉(zhuǎn)化成“完成”,否則就變成“就緒提交”狀態(tài)。必須引起注意的是,有一些節(jié)點可能由于“拒絕”響應(yīng)而被多次執(zhí)行。理想狀態(tài)為,工作流實例應(yīng)該是未受中斷影響而一直執(zhí)行完成。然而,工作流變化會在實際的工程環(huán)境中發(fā)生。一個工作流實例的變化通常有可能是:1)節(jié)點的增加或去除;2)連接線的增加或去除:3)節(jié)點屬性的修改。一旦工作流實例受上述變化的影響,它將被迫中止執(zhí)行。此后,這種變化會應(yīng)用于受影響的工作流實例。通常情況下,修改后的工作流模板將會用來初始化工作流實例,并且該實例將重新啟動。在普通工作流管理系統(tǒng)中,重啟工作流實例將會導(dǎo)致所有節(jié)點回到初始狀態(tài),而不論這些節(jié)點現(xiàn)有狀態(tài)情況。這是一種消極的處理方式,因為所有在重啟實例中的節(jié)點都將再執(zhí)行一次。
2 節(jié)點識別
為了方便動態(tài)工作流變化的管理,主要依據(jù)以下三個條件對節(jié)點進(jìn)行識別,依次對這三個條件識別完成后,才能確定節(jié)點n在新工作流實例中是否需要重新執(zhí)行。這三個條件為:
1)節(jié)點n的屬性和連接線(觸發(fā)條件)是否發(fā)生了變化,即節(jié)點是否為未變節(jié)點;
2)節(jié)點n的任務(wù)是否已經(jīng)完成,即節(jié)點n是否為完成節(jié)點;
3)節(jié)點n的所有前節(jié)點是否都不需要重新執(zhí)行,即節(jié)點n的所有前節(jié)點是否都為可繞開節(jié)點。
2.1 未變節(jié)點的識別
假設(shè)一個工作流模板T1,一個被初始化的工作流實例W1。當(dāng)執(zhí)行W1時,工作流模板T1改變成T2,一個新工作流實例W2在模板T2中被初始化,用來取代工作流實例W1。對于實例W1中的任何一個節(jié)點n可能發(fā)生屬性改變或連接線改變。如果該節(jié)點的位置在實例W2中發(fā)生了改變,事實上就是該節(jié)點的連接線發(fā)生了改變,因此該節(jié)點屬于第二種情況。假設(shè)節(jié)點n在新工作流實例W2中發(fā)生了改變,并且它的名稱也變化了,那么該節(jié)點被認(rèn)定為一個新節(jié)點。
2.1.1 節(jié)點屬性變化的識別
在工作流實例中,一個節(jié)點的屬性主要包括任務(wù)與用戶兩個部分。如果任務(wù)發(fā)生了變化,那么該節(jié)點應(yīng)當(dāng)識別為變化的。如果節(jié)點的用戶發(fā)生了改變,那么該節(jié)點可以認(rèn)為沒有變化。因為用戶的改變不會影響節(jié)點的狀態(tài),如果節(jié)點的任務(wù)已經(jīng)完成了,那么在新的工作流實例中,新用戶就不用去執(zhí)行該任務(wù)了;如果節(jié)點處于就緒提交狀態(tài)或等待執(zhí)行狀態(tài),不論用戶改變與否,它在新工作流實例中都要被執(zhí)行。
因為節(jié)點的用戶名具有唯一索引,所以發(fā)現(xiàn)節(jié)點用戶的改變是比較容易的,而發(fā)現(xiàn)節(jié)點任務(wù)的改變卻是比較困難。一般的,節(jié)點的任務(wù)可能由人工或系統(tǒng)自動產(chǎn)生。人工產(chǎn)生的任務(wù)往往用來代表一系列描述信息或文檔(包括文本和圖形),因此通過比較描述信息或文檔標(biāo)識(文檔編號、大小、修改時間等)可以比較容易的區(qū)分兩個人工產(chǎn)生的任務(wù)。如果任務(wù)是由系統(tǒng)自動的生成的,它實際上是一個可以調(diào)用的計算機(jī)程序。通過比較兩個計算機(jī)程序的全路徑(如果它們都是本地可執(zhí)行文件)或統(tǒng)一資源定位(如果它們來自遠(yuǎn)程服務(wù)器的調(diào)用),可以明確的把它們區(qū)分開來。然而,應(yīng)該有一種方法用來檢查這種情況:當(dāng)計算機(jī)程序發(fā)生了變化而它的全路徑或統(tǒng)一資源定位卻沒有改變。為了解決這樣的問題,自動產(chǎn)生的任務(wù)應(yīng)該有版本管理功能,即它能對版本進(jìn)行響應(yīng)。作為一個例子,接下來的邏輯方法可以用來判斷一個節(jié)點的任務(wù)是否發(fā)生了變化。
如果兩個節(jié)點n1,n2有相同的屬性,那兩個節(jié)點的關(guān)系可以表示為n1en2。
2.1.2 節(jié)點連接線變化的識別
工作流實例中的節(jié)點也可能發(fā)生連接線的變化,圖4舉例說明了一些連接線變化的類型。如圖所示,在(a)中節(jié)點n2的位置變化導(dǎo)致節(jié)點n2連接線的改變;在(b)中增加節(jié)點n3和節(jié)點n4導(dǎo)致節(jié)點n1連接線的改變。
圖4 連接線的改變
嚴(yán)格意義上來說,如果一個節(jié)點的所有輸入與輸出連接線都沒有發(fā)生變化,那么這個節(jié)點就不會有連接線變化,即W1nCi=W2nCi∩W1nCo=W2nCo。為了驗證上述兩種情況,有必要確定兩條連接線c1∈W1n和c2∈W2n是否相同。如前面說明的那樣,連接線c可由三元組(r,ns,ne)來表示。如果兩條連接線c1與c2相同,那么就要滿足下列條件:
1)c1r=c2r,
2)c1ns=c2ns,
3)c1ne=c2ne。
條件1是可以得到比較直觀的判斷,然而條件2和3實際上是一個循環(huán)問題:要判斷W1n=W2n成立,那么首先要判斷條件W1ncins=W2ncjns和W1ncine=W2ncjne成立。
為了解決上述問題,需要設(shè)定以下規(guī)則:
1)任何兩個工作流實例的開始節(jié)點是相同的。
2)如果c1nsec2ns與c1neec2ne相同,則連接線c1寫c2相同。
理想情況是,如果兩個節(jié)點不僅屬性相同,而且連接線也相同,那么這兩個節(jié)點相同。對于舊工作流實例中的節(jié)點n,如果在新工作流實例中有一個節(jié)點滿足n=,則說明節(jié)點n沒有變化。
2.2 完成節(jié)點的識別
判斷一個節(jié)點在舊工作流實例中是否為完成節(jié)點是比較簡單的,因為所有的工作流管理系統(tǒng)都允許節(jié)點的狀態(tài)查詢,通過訪問節(jié)點狀態(tài)屬性的方式來獲得節(jié)點的狀態(tài)。
2.3 可繞開節(jié)點的識別
如果一個節(jié)點的任務(wù)在舊工作流實例中被執(zhí)行完成,在新工作流實例中仍然有效而不需要重新執(zhí)行,那么該節(jié)點在新工作流實例中就是可繞開節(jié)點。顯然,可繞開節(jié)點應(yīng)該是:1)舊工作流實例中存在的,2)已經(jīng)執(zhí)行完成的。然而,以上兩個條件還是不足以確定一個節(jié)點是否為可繞開節(jié)點,其緣由是一個節(jié)點的執(zhí)行狀況受到其輸入情況的影響。為了掌握節(jié)點輸入情況的關(guān)鍵部分,本文定義了如下概念:
1)如果連接線c對于節(jié)點n1來說是輸出連接線,對節(jié)點n2來說是輸入連接線,那么節(jié)點n1就是節(jié)點n2的前節(jié)點。兩個節(jié)點之間的相互關(guān)系可用n1→n2來表示。
2)如果n1到n2之間有一個節(jié)點集{nai}使得n1→na1,na1→na2,…,nan→na2,即n1→n2,那么可以認(rèn)為n1到n2之間有一個路徑。
為了確定新工作流實例中的節(jié)點是否為可繞開節(jié)點,需要增加一個概念:一個指向當(dāng)前節(jié)點的路徑中的所有節(jié)點都為可繞開節(jié)點。
因為一個可繞開節(jié)點在舊工作流實例和新工作流實例中產(chǎn)生的輸出結(jié)果是相同的,所以可繞開節(jié)點的聚合肯定也會產(chǎn)生相同的效果。因此,使用下面三個條件判斷一個節(jié)點在新工作流實例中是否為可繞開節(jié)點是足夠的。
1)節(jié)點n的屬性在新工作流實例沒有改變;
2)節(jié)點n在舊工作流實例中被執(zhí)行完成;
3)在新工作流實例中的所有節(jié)點{:
→n}都是可繞開節(jié)點,都可以不用重復(fù)執(zhí)行。
顯然,在一個新工作流實例中,開始節(jié)點總是可繞開節(jié)點,因為它總是滿足以上三個條件(在所有的工作流管理系統(tǒng)中,任何工作流實例中的開始節(jié)點都是由系統(tǒng)自動完成)。
我們可以運(yùn)用以上三個條件,對新工作流實例中的每一個節(jié)點進(jìn)行分析,然后確定其是否為可繞開節(jié)點。判斷步驟如下所示:
1)建立一個包括新工作流實例W2中所有節(jié)點的有序列表L;
2)從列表L中去除W2中的開始節(jié)點,并把開始節(jié)點設(shè)置為可繞開節(jié)點;
3)對于列表L中的任何節(jié)點n,核查在舊工作流實例W1中是否有一個節(jié)點,使得
與n有相同的屬性,并且
是被執(zhí)行完成的。如果節(jié)點n不滿足這兩個條件,再次從步驟(1)開始執(zhí)行,進(jìn)行下一個節(jié)點的判斷;若節(jié)點n滿足這兩個條件,則進(jìn)行下一步。
4)識別W2中所有的節(jié)點,確定其中是否存在指向節(jié)點n的路徑。若存在,則該路徑中所有的節(jié)點都為可繞開節(jié)點,那么就可以把節(jié)點n設(shè)置成可繞開節(jié)點,并從列表L中移除,重新回到步驟(1)再進(jìn)行下一個節(jié)點的判斷。
5)當(dāng)列表L中所有的節(jié)點都經(jīng)過了判斷,核實列表的長度有沒有發(fā)生變化。如果發(fā)生了變化,再次從步驟1開始判斷;如果長度沒有發(fā)生變化,中止整個判斷步驟,因為列表L中的所有可繞開節(jié)點已經(jīng)被識別出來,并且已從列表L中移除。
以上的非遞歸步驟確保了在一個或多個可繞開節(jié)點識別以后,有序列表L中的所有節(jié)點都會得到處理。盡管這種方式是非常簡單和健壯的,但由于一些位于有序列表前端的節(jié)點在識別是否為可繞開節(jié)點之前已經(jīng)被重復(fù)判斷了多次,從而導(dǎo)致該種方式缺乏效率。
一種更有效的理念就是運(yùn)用新工作流實例的拓?fù)浣Y(jié)構(gòu)來檢查節(jié)點,該理念能夠使這些節(jié)點有更多的機(jī)會被識別為可繞開節(jié)點。顯而易見的是,在新工作流實例中,由于開始節(jié)點總是可繞開節(jié)點,所以它是第一個被檢查到的可繞開節(jié)點。基于已有的規(guī)則,如果在新工作流實例中存在指向節(jié)點的路徑中有一個節(jié)點不是可繞開節(jié)點,那么節(jié)點就不是可繞開節(jié)點。因此,從新工作流實例的開始節(jié)點,即第一個可繞開節(jié)點開始,沿著開始節(jié)點的輸出連接線方向,遍歷整個工作流的方法是非常合理的。在開始節(jié)點的所有后續(xù)節(jié)點中,這些非可繞開節(jié)點能夠被識別出來,通過這樣的方式能簡化工作流實例,避免不必要的檢查。為了實現(xiàn)上述這些理念,本文開發(fā)了一種遞歸方法,如下所述:
1)如果輸入節(jié)點n足新工作流實例的開始節(jié)點,或者該節(jié)點的所有前節(jié)點都是可繞開節(jié)點,那么把節(jié)點n設(shè)置為可繞開節(jié)點。
2)經(jīng)過步驟(1)之后,如果輸入節(jié)點n是可繞開節(jié)點,則找出節(jié)點n的所有后續(xù)節(jié)點,把每一個后續(xù)節(jié)點設(shè)置為這種流程的輸入節(jié)點,重復(fù)相應(yīng)的流程;否則就退出該流程。
以上的方法從第一個可繞開節(jié)點開始。該方法只測試了一個可繞開節(jié)點的后續(xù)節(jié)點,通過利用工作流實例的拓?fù)浣Y(jié)構(gòu),可以避免對非可繞開節(jié)點的檢測。但是,對內(nèi)存的巨大需求卻成為該方法的一個主要問題。當(dāng)處理大量工作流實例的時候,這樣的一種遞歸算法可能會嚴(yán)重的降低工作流管理系統(tǒng)的運(yùn)行效率。因此,針對工作流,適度的運(yùn)用遞歸方法是合理的。為了處理大量的工作流的變化,這就需要有高效穩(wěn)定的非遞歸方法。
為了提出一種非遞歸方法,本文引入了節(jié)點層的概念。節(jié)點的層指的是從開始節(jié)點到節(jié)點的路徑中節(jié)點的個數(shù)。例如,在一個路徑n0→n1→n2→n3中,節(jié)點n2和n3的層分別為3和4。如果從開始節(jié)點到節(jié)點n有多條路徑,那么節(jié)點n的層被定義為最短路徑中節(jié)點的個數(shù)。
當(dāng)評估一個節(jié)點成為可繞開節(jié)點的可能性時,從前面層的節(jié)點開始運(yùn)行是可取的。因為這些節(jié)點有更多的機(jī)會成為可繞開節(jié)點,能夠更早的從有序列表中移除。隨后,在有序列表中對節(jié)點進(jìn)行排序之后,能夠運(yùn)用先前提及的非遞歸方法來實現(xiàn)對可繞開節(jié)點的識別。通過合理的消耗內(nèi)存,節(jié)點排序能夠有效的減少動態(tài)工作流變化的處理時間。
3 應(yīng)用實現(xiàn)
在上述理論研究的基礎(chǔ)之上,運(yùn)用Java開發(fā)語言,以MyEclipse 9.0 M1為開發(fā)環(huán)境,SQL Server 2005為數(shù)據(jù)庫,開發(fā)了支持動態(tài)工作流變化的工作流管理系統(tǒng),并實現(xiàn)與已有PDM系統(tǒng)的集成。系統(tǒng)界面如圖5所示。用戶可以根據(jù)不同企業(yè)的工作習(xí)慣,靈活的使用可視化的工作流編輯器,建立相應(yīng)的工作流程。為了方便對動態(tài)工作流變化的管理,運(yùn)用Java程序來實現(xiàn)所提出的方法,程序執(zhí)行步驟如下:
1)打開PDM系統(tǒng),在工作流編輯器中產(chǎn)生必要的數(shù)據(jù)集對象。
2)獲得一個流程實例。
3)獲得流程的新舊工作流模板。
4)把舊工作流實例保存在內(nèi)存中,給工作流過程附加新的工作流模板。
5)識別新工作流實例中的所有可繞開節(jié)點。
6)對新工作流實例進(jìn)行初始化,執(zhí)行所有可繞開節(jié)點。
7)把修改后的工作流過程釋放給所有等待執(zhí)行節(jié)點的用戶。
圖5 工作流管理系統(tǒng)界面
4 結(jié)束語
工作流管理是PDM系統(tǒng)的重要組成部分,是其基本功能,對動態(tài)工作流變化進(jìn)行分析與研究可以提高工作流管理系統(tǒng)的柔性。將動態(tài)工作流變化管理技術(shù)應(yīng)用到現(xiàn)有的PDM系統(tǒng)中來,實現(xiàn)了產(chǎn)品設(shè)計開發(fā)相關(guān)數(shù)據(jù)的完整性,提高了企業(yè)管理經(jīng)營的自動化水平。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://m.hanmeixuan.com/
本文標(biāo)題:PDM系統(tǒng)中動態(tài)工作流變化的分析與研究
本文網(wǎng)址:http://m.hanmeixuan.com/html/solutions/1401931989.html