摘要:首先分析了生產流程和管理流程的特點,給出了協同過程模型的形式化定義,最后用一個例子說明該方法與現有過程建模方法的差異#65377;
關鍵詞:工作流; 協同; 過程建模; 異常; 柔性
中圖分類號:TP3016文獻標志碼:A
文章編號:10013695(2007)04012005
0引言
工作流系統軟件起源于企業辦公自動化的應用需求中,它將企業中的各種文檔按照預先定義好的路由路徑和路由條件進行路由#65377;當文檔路由到某個節點并滿足預先規定的路由條件時,它將該節點對應的文檔處理任務指派給企業中各種有能力完成該任務的資源來處理(資源包括人#65380;機器#65380;軟件等),并根據任務處理結果和路由方向判定條件將被該節點處理完的文檔路由到下一個節點繼續處理,直到最后路由到路徑的終點完成文檔處理流程[1~3]#65377;但是現實生活中的流程沒有那么簡單#65377;現實中的流程總是存在著兩種流程,即生產流程(主流程)和管理流程(輔流程),這兩種流程存在顯著差異,并且相互協作#65377;
主流程直接面向顧客生產產品或提供服務,可以為企業直接帶來利潤#65377;主流程上的業務活動(工作單元#65380;任務#65380;工種)之間的執行先后關系一般都是偏序關系,因為如果不是偏序關系,將意味著主流程上會有任務重復執行,這會增加主流程上的生產成本#65377;例如,假設一個企業目前有N個不同的工種,根據市場需求需要生產一種新產品或提供一種新服務X#65377;那么在不采納效率更高#65380;成本更低的新工種的前提下,最經濟地獲得一個產品或一次服務X的生產流程設計方法是:在N個工種中選定最少的工種并且每個選定的工種只執行一次,也就是要設法使得這些選定工種之間的執行先后關系是偏序的#65377;
此外,在一個生產成本最低的主流程上的業務活動之間,執行先后關系也不會存在條件分支#65377;也就是說,不會存在一個業務活動完成后,執行業務活動A或執行業務活動B的情況#65377;因為如果把主流程看成是一個人要達到的某個目標的話,那么條件分支就意味著,達到一個相同的目標會有多種途徑#65377;在現實中,人們總會選擇一條最有利的途徑來達到目標,并且在實踐過程中不斷用新的更加有利的目標實現途徑來取代已有的目標實現途徑#65377;因此,在生產成本最低的主流程上,業務活動之間的執行先后關系也不會出現條件分支的情況#65377;
任何一個生產成本最低的主流程設計都是一種非常理想化的設計,主流程上既沒有“Or”(條件分支)也沒有“Loop”(業務活動之間的執行關系是偏序的)#65377;但是現實總不會那么輕易如人所愿,主流程上任何一個業務活動的執行都可能會產生各種預想不到的意外#65377;然而主流程上的任務執行者一般是企業的基層員工,他們對于特定工種的專業技能很強,并且在沒有被上級授權的情況下不容許違反企業制定的流程或者規章制度#65377;當主流程上出現無法處理的意外后,基層員工應該立刻將這些意外匯報給上級管理人員來處理,而上級管理人員所處的流程就是輔流程#65377;
輔流程并不為企業直接帶來利潤,但卻是企業必不可少的一部分#65377;輔流程專門負責處理主流程中出現的各種意外情況,并且要根據各種制約因素隨機應變地制定相應的處理策略#65377;輔流程上的業務活動執行者一般是企業的中層和基層管理人員#65377;他們有權調度所管轄的企業資源,以處理主流程上出現的意外;同時還要分析主流程的不合理之處,并不斷優化調整主流程,使得主流程與時俱進#65377;
由此可見,主流程與輔流程是有顯著差異并且相互協作的#65377;但是現有的主流程建模方法,如EPC和WFNet等,都無法表達出這兩種流程的差異和協作關系#65377;本文研究的目標是設計一種新型的過程建模方法,把現實生活中的主#65380;輔流程之間的動態協作關系模擬出來#65377;
1模型基本術語
(1)案例(Case)#65377;它是指工作流系統要處理的業務對象#65377;例如,一個客戶訂單#65380;為某個顧客提供的一次理發服務#65380;一個公文文檔#65380;一條上級傳達的指令等#65377;案例驅動了工作流系統運作;工作流系統的一切行為都是以案例為中心#65377;
(2)約束(Constraint)#65377;它是一階謂詞公式,并且該一階謂詞公式中的每個謂詞都是以案例為論域的一元謂詞#65377;
(3)主流程(Main Process)#65377;它是一系列工作單元的集合及其工作單元執行先后關系的總稱#65377;由它負責當案例使得每個工作單元上綁定的約束為真的情況下系統該如何處理案例#65377;
(4)輔流程(Ministrant Process)#65377;它也是一系列工作單元的集合及其工作單元執行先后關系的總稱,但是它負責當出現案例使得主流程的工作單元上綁定的約束為假的情況時,系統該如何處理案例#65377;
(5)任務(Task)#65377;它是主流程和輔流程上的工作單元#65377;根據任務是否可以再分解,可以劃分為原子任務(Atomic Task)和復合任務(Composite Task)#65377;原子任務的完成不依賴于其他任務是否完成,僅僅取決于工作流系統中是否存在有能力完成該任務的資源,并且系統指定的資源是否可以在規定的時間內完成該任務#65377;復合任務的完成依賴于其他原子任務或復合任務是否完成#65377;根據復合任務所處的流程,復合任務可以劃分為主流程上的復合任務(Composite Task in Main Process,主任務)和輔流程上的復合任務(Composite Task in Ministrant Process,輔任務)#65377;
(6)主#65380;輔流程上的原子任務所綁定的約束可以劃分為三類,即前置約束(Prepositional Constraint)#65380;授權約束(Empower Constraint)和后置約束(Postpositional Constraint)#65377;前置約束用于判定與之綁定的原子任務是否可以被執行;授權約束用于判定與之綁定的原子任務應該指派給系統中的哪個資源來執行;后置約束用于判定與之綁定的原子任務是否已經被指定的資源完成#65377;
(7)原子任務的狀態可以劃分為初始態(Initial)#65380;觸發態(Triggered)#65380;授權態(Empowered)和完成態(Completed)#65377;一個原子任務處于初始態,表明該任務的所有前置任務都已經完成;一個原子任務處于觸發態,表明該任務綁定的所有前置約束均為真;一個原子任務處于授權態,表明該任務綁定的所有授權約束均為真;一個原子任務處于完成態,表明該任務綁定的所有后置約束均為真#65377;
(8)復合任務的狀態可以劃分為初始態和完成態#65377;一個復合任務處于初始態,表明該復合任務的所有前置任務都已經完成;一個復合任務處于完成態,表明該復合任務的所有子任務都處于完成態#65377;
(9)異常(Exception)#65377;它是指同時滿足如下條件的案例:①該案例使得主流程上的一個原子任務綁定的一個約束為假;②在輔流程上存在一個可以繼續處理該案例的輔任務#65377;
(10)意外(Accident)#65377;它是指滿足如下條件的案例:①該案例使得主流程上的一個原子任務綁定的一個約束為假,并且在輔流程上不存在可以繼續處理該案例的輔任務;②該案例使得輔流程上一個原子任務綁定的一個約束為假#65377;
(11)案例的狀態可以劃分為正常態(Normal)#65380;異常態(Exceptional)#65380;意外態(Accidental)和完成態#65377;一個案例處于正常態,表明該案例當前至少使一個主任務處于初始態,并且該案例不滿足異常或者意外規定的條件;一個案例處于異常態,表明該案例滿足異常規定的條件;一個案例處于意外態,表明該案例滿足意外規定的條件;一個案例處于完成態,表明該案例已經初始化的所有主任務都處于完成態#65377;
2協同過程模型的形式化定義
定義1協同過程模型(Coordinated Process Model,CPM)是一個十三元組#65377;
CPM=
(1)Scase表示系統接收到的所有案例的非空有窮集合,O∈Scase,O叫做案例#65377;
(2)T表示原子任務的非空有窮集合,τ∈T,τ叫做原子任務#65377;
(3)Tα表示主流程上復合任務的非空有窮集合,τα∈Tα,τα叫做主流程上的復合任務,簡稱主任務#65377;
(4)Tβ表示輔流程上復合任務的非空有窮集合,τβ∈Tβ,τβ叫做輔流程上的復合任務,簡稱輔任務#65377;
T#65380;Tα#65380;Tβ兩兩相關為空集#65377;τx∈T∪Tα∪Tβ,τx叫做任務,τy∈Tα∪Tβ,τy叫做復合任務#65377;
(51)Rαcomposite表示主流程上任務之間的復合關系#65377;
①RαcompositeTa×2Sα×2Sα×Sα#65377;其中Sα=T∪Tα#65377;
②τα∈Tα<τα,V,E>∈Rαcomposite[(ταV)∧(V≠)∧(
③<τα1,V1,E1>,<τα2,V2,E2>∈Rαcomposite[(τα1=τα2)→(V1=V2)∧(E1=E2)]#65377;
<τα,V,E>∈Rαcompositeτx∈V<τx1,τx2>∈E,稱為τx是τα的子任務;V是τα的所有子任務集合;τα是τx的父任務;在τα上,τx1是τx2的前置任務;在τα上,τx2是τx1的后置任務;
(52)Rαdependency表示主流程上復合任務之間的依賴關系#65377;
①RαdependencyTα×Tα#65377;
②<τα1,V,E>∈Rαcompositeτα2∈(V∩Tα)(<τα1,τα2>∈Rαdependency)#65377;
③
<τα1,τα2>∈Rαdependency,稱為τα2是τα1的子主任務#65377;
(53)Aτα|τ表示主流程上復合任務與原子任務之間的依賴關系#65377;
①Aτα|τTα×T#65377;
②<τα,V,E>∈Rαcompositeτ∈(V∩T)(<τα,τ>∈Aτα|τ)#65377;
<τα,τ>∈Aτα|τ,稱為τ是τα的子原子任務#65377;
(61)Rβcomposite表示輔流程上任務之間的復合關系#65377;
①RβcompositeTβ×2Sβ×2Sβ×Sβ#65377;其中Sβ=T∪Tβ#65377;
②τβ∈Tβ<τβ,V,E>∈Rβcomposite[(τβV)∧(V≠)∧(
③<τβ1,V1,E1>,<τβ2,V2,E2>∈Rβcomposite[(τβ1=τβ2)→(V1=V2)∧(E1=E2)]#65377;
<τβ,V,E>∈Rβcompositeτx∈V<τx1,τx2>∈E,稱為τx是τβ的子任務;V是τβ的所有子任務集合;τβ是τx的父任務;在τβ上,τx1是τx2的前置任務;在τβ上,τx2是τx1的后置任務;
(62)Rβdependency表示輔流程上復合任務之間的依賴關系#65377;
①RβdependencyTβ×Tβ#65377;
②<τβ1,V,E>∈Rβcompositeτβ2∈(V∩Tβ)(<τβ1,τβ2>∈Rβdependency)#65377;
③
<τβ1,τβ2>∈Rβdependency,稱為τβ2是τβ1的子輔任務#65377;
(63)Aτβ|τ表示輔流程上復合任務與原子任務之間的依賴關系#65377;①Aτβ|τTβ×T#65377;②<τβ,V,E>∈Rβcompositeτ∈(V∩T)(<τβ,τ>∈Aτβ|τ)#65377;
<τβ,τ>∈Aτβ|τ,稱為τ是τβ的子原子任務#65377;
(7)λpre表示前置約束的非空有窮集合,cpre∈λpre,cpre叫做前置約束#65377;
(8)λemp表示授權約束的非空有窮集合,cemp∈λemp,cemp叫做授權約束#65377;
(9)λpost表示后置約束的非空有窮集合,cpost∈λpost,cpost叫做后置約束#65377;
λpre#65380;λemp#65380;λpost兩兩相交為空集,c∈λpre∪λemp∪λpost,c叫做約束#65377;約束是一階謂詞公式,并且該一階謂詞公式中的每個謂詞都是以Scase為論域的一元謂詞#65377;
(101)δτ2c表示復合任務上子原子任務的約束集映射,δτ2c∶Aτα|τ∪Aτβ|τ→2(λpre∪λemp∪λpost)#65377;
(102)Aτα|τ|c表示主任務上子原子任務與約束的綁定關系#65377;①Aτα|τ|cAτα|τ×(λpre∪λemp∪λpost)#65377;②<τα,τ>∈Aτα|τc∈δτ2c(τα,τ)(<τα,τ,c>∈Aτα|τ|c)#65377;
<τα,τ,c>∈Aτα|τ|c,<τα,τ,c>叫做主任務τα的子原子任務τ綁定一個約束c#65377;
(11)δα2β表示主流程向輔流程變遷的變遷函數,δα2β∶Aτα|τ|c→Tβ∪{ε}#65377;其中ε表示空元素并且εTβ#65377;
(12)δβ2α表示輔流程向主流程變遷的變遷函數,δβ2α∶δα2β(Aτα|τ|c)→2(T∪Tα):①<τα,τ,c>∈Aτα|τ|c<τα,V,E>∈Rαcomposite,令t(E)是E的傳遞閉包,(δβ2α(δα2β(τα,τ,c))V)∧(τx∈δβ2α(δα2β(τα,τ,c))τy∈δβ2α(δα2β(τα,τ,c))(<τy,τx>∈t(E)))∧(τx∈(V-δβ2α(δα2β(τα,τ,c)))
τy∈δβ2α(δα2β(τα,τ,c))((<τx,τy>∈t(E))∨(<τy,τx>∈t(E))))#65377;②δβ2α(ε)=#65377;
(13)δo2τα表示案例的主任務集映射,δo2τα∶Scase→2Tα,o∈Scase,δo2τα≠#65377;o∈Scase,δo2τα(o)表示案例o請求系統完成的所有主任務集合#65377;
定義2o∈Scase<τα,τ,c>∈Aτα|τ|c,<τα,τ,c,o>是系統中一個關于案例o的異常,當且僅當c(o)∧(δα2β(τα,τ,c)≠ε)#65377;
定義3o∈Scase<τα,τ,c>∈Aτα|τ|c,<τα,τ,c,o>是系統中一個關于案例o的意外,當且僅當c(o)∧δα2β(τα,τ,c)=ε,或者(<τα,τ,c,o>是一個異常)∧(<δα2β(τα,τ,c),τ′>∈Aτβ|τc′∈δτ2c(δα2β(τα,τ,c),τ′)(c′(o)))#65377;
規則1o∈Scase<τx,V,E>∈Rαcomposite∪Rβcomposite#65377;如果案例o已經使得復合任務τx處于初始態,那么案例o將使得τx的所有沒有前置任務的子任務都處于初始狀態(任務處于初始態的傳遞規則1)#65377;
規則2o∈Scase<τx,V,E>∈Rαcomposite∪Rβcompositeτ′x∈V#65377;如果案例o已經使得復合任務τx處于初始態并且τ′x在τx上的所有前置任務都為完成態,那么案例o將使得τ′x處于初始態(任務處于初始態的傳遞規則2)#65377;
規則3o∈Scase<τx,τ>∈Aτα|τ∪Aτβ|τ#65377;如果案例o已經使得復合任務τx的子原子任務τ處于初始態并且(λpre∩δτ2c(τx,τ)=或者cpre∈λpre∩δτ2c(τx,τ))(cpre(o)),那么案例o將使得該原子任務處于觸發態(原子任務從初始態到觸發態的變遷規則)#65377;
規則4o∈Scase<τx,τ>∈Aτα|τ∪Aτβ|τ#65377;如果案例o已經使得復合任務τx的子原子任務τ處于觸發態并且(λemp∩δτ2c(τx,τ)=或者cemp∈λemp∩δτ2c(τx,τ)(cemp(o))),那么案例o將使得該原子任務處于授權態(原子任務從觸發態到授權態的變遷規則)#65377;
規則5o∈Scase<τx,τ>∈Aτα|τ∪Aτβ|τ#65377;如果案例o已經使得復合任務τx的子原子任務τ處于授權態并且(λpost∩δτ2c(τx,τ)=或者cpost∈λpost∩δτ2c(τx,τ)(cpost(o))),那么案例o將使得該原子任務處于完成態(原子任務從授權態到完成態的變遷規則)#65377;
定理1τx∈Tα∪Tβ((<τx,τy>∈Rαdependency∪Rβdependency)→(復合任務τx的所有子任務都是原子任務))(由定義1中的子定義(51)#65380;(52)#65380;(61)#65380;(62)易證)#65377;
規則6o∈Scase<τx,V,E>∈Rαcomposite∪Rβcomposite#65377;如果案例o已經使得復合任務τx處于初始態并且τx的所有子任務都處于完成態,那么案例o將使得τx處于完成態(復合任務完成態的傳遞規則)#65377;
定義41o∈Scase,案例o處于正常態的充要條件是,系統中沒有關于案例o的異常或意外,并且在δo2τα(o)中至少有一個主任務該案例沒有使其處于完成態#65377;
定義42o∈Scase,案例o處于異常態的充要條件是,系統中存在關于案例o的異常#65377;
定義43o∈Scase,案例o處于意外態的充要條件是,系統中存在關于案例o的意外#65377;
定義44o∈Scase,案例o處于完成態的充要條件是,系統中沒有關于案例o的異常或者意外,并且案例o已經使δo2τα(o)中的每個主任務都處于完成態#65377;
基于協同過程模型的工作流引擎算法案例o相關過程信息的基本數據結構如下:
(1)state(o)是案例o的當前狀態,state(o)∈{ε,正常態,異常態,意外態,完成態}#65377;
o∈Scase,如果state(o)=ε,表明該案例是工作流系統已經接收但尚未開始處理的案例#65377;
(2)Sτx1|τx2|q(o)是案例o已經觸發的所有復合任務的狀態表#65377;①Sτx1|τx2|q(o)(Tα∪Tβ∪{ε})×(Tα∪Tβ)×{初始態,完成態}#65377;②<τx1,τx2,q>∈Sτx1|τx2|q(o),如果τx1=ε,那么復合任務τx2沒有父任務并且τx1的當前狀態為q;如果τx1≠ε,那么τx1是τx2的父任務并且τx1的當前狀態為q#65377;
(3)Sτx1|τx2|τ|q(o)是案例o已經觸發的所有原子任務的狀態表#65377;①Sτx1|τx2|τ|q(o)(Tα∪Tβ∪{ε})×(Tα∪Tβ)×T×{初始態,觸發態,授權態,完成態}#65377;②<τx1,τx2,τ,q>∈Sτx1|τx2|τ|q(o),如果τx1=ε,那么復合任務τx2沒有父任務并且τ是τx2的子原子任務;如果τx1≠ε,那么τx1是τx2的父任務并且τx2是τ的父任務#65377;
(4)<τα,τ,c,o>∈Aτα|τ|c×Scase是案例o處于異常態時相應的異常或者是處于意外態時相應的意外#65377;
輸入:案例o∈Scase
begin
while(true) {
if (State(o)等于ε){Sτx1|τx2|q(o)=Sτx1|τx2|τ|q(o):=;state(o):=正常態;將δo2τα(o)中的所有主任務設置為初始態并保存到Sτx1|τx2|q(o)中;}
/*案例正在被主流程處理*/
while (state(o)等于正常態){
對主流程上的任務使用一遍規則1~6,并將相應的任務狀態信息保存在Sτx1|τx2|q(o)或者Sτx1|τx2|τ|q(o)中;
/*案例從正常態向異常態變遷*/
如果系統中存在關于案例o的異常<τα,τ,c,o>,那么{state(o):=異常態;清除Sτx1|τx2|q(o)中的所有輔助任務相關狀態信息;將輔任務δα2β(τα,τ,c)設置為初始態并保存到Sτx1|τx2|q(o)中;break;}
/*案例從正常態向意外態變遷*/
如果系統中存在關于案例o的意外,那么{state(o):=意外態,return;}
/*案例從正常態向完成態變遷*/
如果δo2τα(o)中的每個主任務都在Sτx1|τx2|q(o)中處于完成態,那么{state(o):=完成態;return;}
}
/*案例正在被輔流程處理*/
while(state(o)等于異常態)}
對輔流程上的任務使用一遍規則1~6,并將相應的任務狀態信息保存在Sτx1|τx2|q(o)和Sτx1|τx2|τ|q(o)中;
/*案例從異常態向意外態變遷*/
如果系統中存在關于案例o的意外,那么{state(o):=意外態;return;}
/*案例從異常態向正常態變遷*/
如果輔任務δα2β(τα,τ,c)在Sτx1|τx2|q(o)中處于完成態,那么{state(o):=正常態;
for each τx∈δβ2α(δα2β(τα,τ,c)){
令τα的子任務復合關系圖的頂點集和邊集分別為V和E,t(E)是E的傳遞閉包;
for each τy∈(V-δβ2α(δα2β(τα,τ,c))){
如果<τy,τx>∈t(E),那么將τy的狀態設置為完成態,并保存到Sτx1|τx2|τ|q(o)或者Sτx1|τx2|q(o)中;如果<τx,τy>∈t(E),那么將τy的狀態信息從Sτx1|τx2|τ|q(o)或者Sτx1|τx2|q(o)中刪除;}}break;}
}}end;
3過程建模例子
在本章中引入的過程建模實例是一個企業的訂單處理流程#65377;首先用EPC和WFNet這兩種目前主流的過程建模方法對該流程進行建模;然后用CPM方法對該流程進行建模;最后比較了三種建模方法,并討論了基于CPM方法的過程模型如何動態擴展從而體現柔性#65377;
3.1基于EPC和WFNet的過程建模
EPC(Eventdriven Process Chain)是目前已經被數千家企業廣泛使用的過程建模方法,并且是高端ERP產品供應商SAP公司的核心技術SAP/R3所采納的過程建模方法[1,2,4]#65377;圖1給出了基于EPC的訂單處理流程建模#65377;WFNet(Workflow Net)是Aalst先生基于傳統Petri網提出的一種過程建模方法#65377;這種建模方法繼承了Petri網的良好的形式化基礎,并且克服了直接用Petri網進行過程建模時存在的一些弊端,因此備受學術界的推寵[1,3,5]#65377;圖2給出了基于WFNet的訂單處理流程建模#65377;
3.2基于CPM的過程建模
(1)模型初始化定義
謂詞定義:p0(o)中案例o是訂單;p1(o)中訂單o是有效訂單;p2(o)中訂單o的所有訂購貨物都有庫存;p3(o)中訂單o的貨款已經付清#65377;
案例向系統發出的請求定義:
o∈Scase(p0(o)),δo2τα(o)={訂單處理}Tα
(2)主流程上復合任務設計(圖3#65380;表1#65380;2)
表1主任務的子原子任務的約束綁定關系定義
主任務原子任務前置約束集授權約束集后置約束集
訂單處理驗單p0(o)p1(o)
訂單處理取貨p2(o)
訂單處理發貨
訂單處理收款p3(o)
表2主/輔流程之間的變遷關系定義
主任務原子任務約束輔任務變遷回子任務集
訂單處理取貨p2(o)缺貨自主生產處理取貨
訂單處理收款p3(o)貨款未付清處理收款
(3)輔流程上復合任務設計(圖4#65380;5,表3)
表3輔任務的子原子任務的約束綁定關系定義
輔任務原子任務前置約束集授權約束集后置約束集
缺貨自主生產處理供料
缺貨自主生產處理排產
缺貨自主生產處理生產p2(o)
貨款未付清處理討債p3(o)
3.3三種建模方法比較
(1)在EPC和WFNet方法中,從取貨任務之后,流程出現了一個條件分支;從收款任務之后,流程出現了一個循環#65377;從此例中可以看出,條件分支和循環的本質都是一種異常#65377;前者是對訂購貨物庫存不足情況的一種解決方法;后者是對于貨款未收齊情況的一種解決方法#65377;
在CPM方法中,訂單處理流程被分解為三個復合任務,一個是主任務“訂單處理”;另外兩個是輔任務“缺貨生產處理”和“貨款未付清處理”,分別用于處理主任務中對應的兩種異常#65377;這三個復合任務的設計是相互獨立的,并且每一個復合任務的設計都非常簡單:任務之間執行先后關系是偏序的;一個復合任務是否完成僅僅取決于是不是該復合任務的所有子任務都已經完成#65377;該定義有助于案例相關過程信息的事務性處理設計#65377;對于原子任務綁定的約束而言,僅僅考慮在執行過程中約束為真的情況而無須考慮約束為假的情況,從而將正常處理情況和非正常的處理情況隔離開#65377;
(2)從理論上來說,對于給定案例,流程上任何一個任務的執行都可能失敗或者任何一個任務綁定的約束都可能會為假#65377;在CPM方法中,充分考慮到這種特點,形式化定義了異常和意外兩個概念,并通過主流程和輔流程之間的變遷函數的定義,將所有約束為假的情況和應該由哪個輔助任務處理定義出來,從理論上保證了過程建模在邏輯上是完備的,不會遺漏任何一個約束為假的情況該如何處理#65377;
WFNet盡管也是有著嚴格形式化定義的過程建模方法,但是它并沒有對給定案例的約束為假的情況進行考慮#65377;例如,當一個Token路由到一個Place中,如果Token滿足Place中定義的條件,那么該Token不繼續被路由;如果Token不滿足Place中定義的所有條件,那么Token就會停滯在該Place中#65377;這種Token停滯在Place中的情況,在CPM中給出了相應的意外定義,并且在增加了輔任務后意外就可以變為異常從而使案例可以繼續被處理#65377;在WFNet中并沒有給出該定義,更沒有給出在這種情況下流程該如何后置處理#65377;
EPC方法是沒有嚴格形式化定義的,此外它所設計的流程執行僅僅取決于是否出現相應的事件,而與邏輯上的真假無關,也無法在模型上反映出異常和意外的概念#65377;
(3)在CPM中,每個訂單案例都要觸發主任務“訂單處理”的所有子任務,但是并不是所有的訂單案例都會觸發輔任務“缺貨生產處理”或“貨款未付清處理”#65377;由此可以看出,主流程上的復合任務一般是非常穩定的,但是主流程上出現何種異常或者意外,并且該由輔流程上的哪個復合任務來處理卻是非常動態的#65377;
在現實生活中,當一個意外或異常發生后,會存在多種處理意外或異常的方法#65377;但是具體采用何種方法,會受到各種因素的制約#65377;例如,當發現一個訂單上所訂購的貨物庫存不足的情況時,可以自己生產出所需貨物,也可以外包給別人生產,還可以直接去采購成品等#65377;假設僅僅考慮到訂單的交貨時間是否大于一個月的制約因素,那么當該訂單離交貨時間大于一個月的話,就可以自己生產或者外包給別人生產,因為這樣可能會比采購成品所獲得的利潤更多;當該訂單離交貨時間小于等于一個月的話,就應該直接去采購成品,否則如果自己生產或者外包生產的話就有可能不能按期交貨#65377;
當出現一個異常或者意外時,如果考慮N個制約因素,就會產生2N個可能的異常或者意外的處理方法,對應于EPC和WFNet就會產生2N個可能的條件分支#65377;如果試圖將這么多種可能的條件分支都在一個流程中表達出來的話,流程設計會非常復雜;此外,異常或意外該如何處理是非常隨機應變的#65377;如果將主流程和輔流程不加以區分建模在一起的話,會使得主流程的版本變更過于頻繁,這與現實生活中的生產流程是穩定的事實不符#65377;用輔流程取代現有過程建模方法中的“Or”和“Loop”兩個建模元素將會簡化流程設計,同時也不降低模型的表達能力#65377;
3.4基于CPM的過程模型動態演變
新謂詞定義:p21(o)為訂單o的交貨時間大于一個月;P22(o)為訂單o的訂貨總金額大于50萬元#65377;變更前后的約束集及變遷關系如表4~6所示#65377;
表4變更前的后置約束集
主任務原子任務后置約束集
訂單處理取貨C1:p2(o)→p2(o)
表5變更后的后置約束集
主任務原子任務后置約束集
訂單處理取貨
C1:(p21(o)∧p22(o))→p2(o)
C2:(p21(o)∧p22(o))→p2(o)
C3:(p21(o)∧p22(o))→p2(o)
C4:(p21(o)∧p22(o))→p2(o)
表6約束集變更后的主/輔流程之間的變遷關系
主任務原子任務約束輔任務變遷回子任務集
訂單處理取貨C1缺貨自主生產處理取貨
訂單處理取貨C2缺貨外包生產處理取貨
訂單處理取貨C3缺貨采購處理取貨
訂單處理取貨C4缺貨采購處理取貨
在表4中,當給定案例出現p2(o)的情況時,并沒有對于約束為假的情況進行分類討論,而僅僅是籠統地采取了缺貨自主生產處理輔任務#65377;而在表5和6中,當給定案例出現p2(o)的情況時,考慮到兩個制約因素p21(o)和p22(o),分為四種情況分別討論該如何處理p2(o)#65377;
在表5中可以證明:對于任意一個案例,C1~C4這四個后置約束,要么全為真,要么僅僅有一個約束為假,每個約束都是一個蘊涵式#65377;在蘊涵式的右邊對應著在滿足何種約束時執行主流程上的相應操作;蘊涵式的左邊是對蘊涵式右邊約束為假的情況下的一種分類討論,對應于兩個制約因素的真值表#65377;
4結束語
與現有的過程建模方法相比,本文創新點在于將流程劃分為主流程和輔流程,并且論述了如何通過異常或意外的處理體現主/輔流程之間的協作關系#65377;從而在不降低模型表達能力的前提下,用輔流程取代現有過程建模方法中的“Or”和“Loop”這兩個建模元素,既簡化了流程設計又能在理論上保證過程建模在邏輯上是完備的#65377;
案例中包含的信息不僅僅只是過程相關信息,而且包含業務相關信息#65377;這些信息在每個任務的執行過程中都有可能被更改,但是在基于CPM的工作流引擎算法中,在案例的狀態從異常態向正常態變遷時,僅僅考慮到了案例相關過程信息的事務性處理,而沒有考慮到案例相關的業務信息#65377;此外,案例是資源之間信息溝通的媒介,而現實世界中最柔性的溝通媒介就是自然語言#65377;那么自然語言的本質到底是什么?如何抓住自然語言的本質對其形式化?這將是下一步基于結構化自然語言的工作流案例建模研究的重點和創新點#65377;
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。