這是我們(東方易維)工作流產品設計過程中采取的設計:
一、流程實例的狀態
狀態分為5種:實例化、執行中、掛起、手工結束、正常結束。
狀態的變遷如下圖:

二、節點實例的狀態
狀態分為5種:實例化、執行中、掛起、手工結束、正常結束。
狀態的變遷如下圖:

三、具體節點的狀態
細分:
A、人工節點、等待節點
這兩個節點被觸發后存在一個執行等待的過程,所以可以被用戶直接掛起和手工結束。人工節點的掛起意味著所有未完成工作項的掛起,同時相應時間服務的時間計算的掛起。手工結束會使流程跳過該節點(所有工作項手工結束),繼續往后流轉。
B、開始節點、結束節點、分支節點、自動節點
這些節點的特點在于被觸發后立刻執行和流轉,所以不會存在掛起和手工結束的狀態。
C、并發節點、匯聚節點
并發節點和匯聚節點不存在掛起的狀態,同時不能被用戶直接手工結束,它們的狀態受流程實例狀態和相關節點實例狀態的影響。
并發節點和匯聚節點的情況復雜一些,分模式討論

圖1
1、同步匯聚(圖1)
根據情況觸發節點0、節點1、節點2中的一個或多個,匯聚節點等待所有實際觸發的節點完成后再執行流轉。中間匯聚節點只會產生一個實例。
1.1、正常流轉時的處理策略
當匯聚節點未被觸發時(即節點0、節點1、節點2都未執行結束),并發節點處于執行狀態,一旦匯聚節點被觸發(即節點0、節點1、節點2有一個執行結束),并發節點正常結束并且匯聚節點處于執行狀態,所有并發出的節點實例執行結束后,匯聚節點正常結束,流程繼續流轉。
1.2、用戶掛起、手工結束相關節點的處理策略
1.2.1、匯聚節點未激活時
節點0、節點1、節點2的掛起和恢復執行不會影響并發節點的狀態(依舊處于執行狀態);節點0、節點1、節點2的任一手工結束都會觸發匯聚節點,使并發節點正常結束,如果所有并發的節點實例都結束(包括手工結束和正常結束),匯聚節點正常結束,觸發流程流轉。
1.2.2、匯聚節點已激活時
節點0、節點1、節點2的掛起和恢復執行不會影響匯聚節點的狀態(依舊處于執行狀態);節點0、節點1、節點2的手工結束會影響匯聚節點的狀態,每個節點實例的手工結束會引起匯聚節點的判斷,如果所有并發的節點實例(包括正常結束和手工結束)都結束,匯聚節點正常結束,觸發流程流轉。
1.3、用戶掛起、手工結束流程的處理策略
1.3.1、匯聚節點未激活時
流程的掛起和恢復執行不會影響并發節點的狀態(依舊處于執行狀態),節點0、節點1、節點2會被全部掛起或恢復;流程的手工結束會引起所有節點的手工結束。
1.3.2、匯聚節點已激活時
流程的掛起和恢復執行不會影響匯聚節點的狀態(依舊處于執行狀態),節點0、節點1、節點2未執行結束的實例會被全部掛起或恢復;流程的手工結束會引起所有節點的手工結束。
2、nOutOfM匯聚(圖1)
根據情況觸發節點0、節點1、節點2中的一個或多個,匯聚節點等待N個實際觸發的節點完成后即執行流轉(N>0且N<M,M為實際觸發的節點個數),在N<=0和N>=M的情況下即為同步匯聚。中間匯聚節點只會產生一個實例。
2.1、正常流轉時的處理策略
當匯聚節點未被觸發時(即節點0、節點1、節點2都未執行結束),并發節點處于執行狀態,一旦匯聚節點被觸發(即節點0、節點1、節點2有一個執行結束),并發節點正常結束并且匯聚節點處于執行狀態,N個并發出的節點實例執行結束后,匯聚節點正常結束,流程繼續流轉,M-N的節點實例被手工結束。
2.2、用戶掛起、手工結束相關節點的處理策略
2.2.1、匯聚節點未激活時
節點0、節點1、節點2的掛起和恢復執行不會影響并發節點的狀態(依舊處于執行狀態);節點0、節點1、節點2的任一手工結束都會觸發匯聚節點,使并發節點正常結束,如果N個并發的節點實例都手工結束,并發節點正常結束,觸發匯聚節點,匯聚節點正常結束,觸發流程流轉,M-N的節點實例被手工結束。
2.2.2、匯聚節點已激活時
節點0、節點1、節點2的掛起和恢復執行不會影響匯聚節點的狀態(依舊處于執行狀態);節點0、節點1、節點2的手工結束會影響匯聚節點的狀態,每個節點實例的手工結束會引起匯聚節點的判斷,如果N個并發的節點實例(包括正常結束和手工結束)都結束,匯聚節點正常結束,觸發流程流轉,M-N的節點實例被手工結束。
2.3、用戶掛起、手工結束流程的處理策略
2.3.1、匯聚節點未激活時
流程的掛起和恢復執行不會影響并發節點的狀態(依舊處于執行狀態),節點0、節點1、節點2會被全部掛起或恢復;流程的手工結束會引起所有節點的手工結束。
2.3.2、匯聚節點已激活時
流程的掛起和恢復執行不會影響匯聚節點的狀態(依舊處于執行狀態),節點0、節點1、節點2未執行結束的實例會被全部掛起或恢復;流程的手工結束會引起所有節點的手工結束。
3、辨別匯聚(圖1)
是nOutOfM匯聚的特例,N=1
4、多實例匯聚(圖2)

圖2
根據情況觸發節點0、節點1中的一個或多個,節點0和節點1任意一個執行結束后都會觸發匯聚節點產生一個新的實例,匯聚節點實例緊接著觸發節點2,節點2也會產生多個實例。
4.1、正常流轉時的處理策略
當匯聚節點未被觸發時(即節點0、節點1都未執行結束),并發節點處于執行狀態,一旦匯聚節點被觸發(即節點0、節點1有一個執行結束),匯聚節點會緊接著觸發節點2,匯聚節點正常結束。所有并發出的節點實例執行結束后,并發節點正常結束。
4.2、用戶掛起、手工結束相關節點的處理策略
節點0、節點1的掛起和恢復執行不會影響并發節點的狀態(依舊處于執行狀態);節點0、節點1的手工結束會影響并發節點和匯聚節點的狀態,每個節點實例的手工結束會引起匯聚節點產生新的實例并觸發節點2,同時會引起并發節點的判斷,如果所有并發的節點實例都手工結束,并發節點正常結束。
4.3、用戶掛起、手工結束流程的處理策略
流程的掛起和恢復執行不會影響并發節點的狀態(依舊處于執行狀態),節點0、節點1、節點2會被全部掛起或恢復;流程的手工結束會引起所有未結束節點的手工結束。
5、隱式結束,沒有匯聚節點與并發節點對應(圖3)

圖3
所有節點結束時(正常結束或手工結束),并發節點正常結束。流程的手工結束會引起所有未結束節點的手工結束。
四、流程實例狀態變化對節點實例狀態造成的影響
1、流程實例的掛起
A類節點掛起,B、C類節點不受影響。同時在流程實例恢復執行之前,A類節點不允許用戶直接恢復執行。
2、流程實例的手工結束
所有節點全部手工結束。
五、節點實例狀態變化對流程實例狀態造成的影響
隱式結束的情況下,節點的手工結束或正常結束都會觸發流程的判斷,如果所有的節點都已結束則流程結束。
http://www.tkk7.com/ronghao 榮浩原創,轉載請注明出處:)
posted on 2008-05-26 19:36
ronghao 閱讀(1606)
評論(2) 編輯 收藏 所屬分類:
SOA、BPM