posts - 193,  comments - 520,  trackbacks - 0

          這是我們(東方易維)工作流產(chǎn)品設(shè)計過程中采取的設(shè)計:

          一、流程實例的狀態(tài)

             狀態(tài)分為5種:實例化、執(zhí)行中、掛起、手工結(jié)束、正常結(jié)束。

             狀態(tài)的變遷如下圖:


          二、節(jié)點實例的狀態(tài)

          狀態(tài)分為5種:實例化、執(zhí)行中、掛起、手工結(jié)束、正常結(jié)束。

          狀態(tài)的變遷如下圖:


          三、具體節(jié)點的狀態(tài)

             細(xì)分:

          A、人工節(jié)點、等待節(jié)點

          這兩個節(jié)點被觸發(fā)后存在一個執(zhí)行等待的過程,所以可以被用戶直接掛起和手工結(jié)束。人工節(jié)點的掛起意味著所有未完成工作項的掛起,同時相應(yīng)時間服務(wù)的時間計算的掛起。手工結(jié)束會使流程跳過該節(jié)點(所有工作項手工結(jié)束),繼續(xù)往后流轉(zhuǎn)。

          B、開始節(jié)點、結(jié)束節(jié)點、分支節(jié)點、自動節(jié)點

          這些節(jié)點的特點在于被觸發(fā)后立刻執(zhí)行和流轉(zhuǎn),所以不會存在掛起和手工結(jié)束的狀態(tài)。

          C、并發(fā)節(jié)點、匯聚節(jié)點

          并發(fā)節(jié)點和匯聚節(jié)點不存在掛起的狀態(tài),同時不能被用戶直接手工結(jié)束,它們的狀態(tài)受流程實例狀態(tài)和相關(guān)節(jié)點實例狀態(tài)的影響。

          并發(fā)節(jié)點和匯聚節(jié)點的情況復(fù)雜一些,分模式討論


          1

          1、同步匯聚(圖1

          根據(jù)情況觸發(fā)節(jié)點0、節(jié)點1、節(jié)點2中的一個或多個,匯聚節(jié)點等待所有實際觸發(fā)的節(jié)點完成后再執(zhí)行流轉(zhuǎn)。中間匯聚節(jié)點只會產(chǎn)生一個實例。

          1.1、正常流轉(zhuǎn)時的處理策略

          當(dāng)匯聚節(jié)點未被觸發(fā)時(即節(jié)點0、節(jié)點1、節(jié)點2都未執(zhí)行結(jié)束),并發(fā)節(jié)點處于執(zhí)行狀態(tài),一旦匯聚節(jié)點被觸發(fā)(即節(jié)點0、節(jié)點1、節(jié)點2有一個執(zhí)行結(jié)束),并發(fā)節(jié)點正常結(jié)束并且匯聚節(jié)點處于執(zhí)行狀態(tài),所有并發(fā)出的節(jié)點實例執(zhí)行結(jié)束后,匯聚節(jié)點正常結(jié)束,流程繼續(xù)流轉(zhuǎn)。

          1.2、用戶掛起、手工結(jié)束相關(guān)節(jié)點的處理策略

          1.2.1、匯聚節(jié)點未激活時

          節(jié)點0、節(jié)點1、節(jié)點2的掛起和恢復(fù)執(zhí)行不會影響并發(fā)節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài));節(jié)點0、節(jié)點1、節(jié)點2的任一手工結(jié)束都會觸發(fā)匯聚節(jié)點,使并發(fā)節(jié)點正常結(jié)束,如果所有并發(fā)的節(jié)點實例都結(jié)束(包括手工結(jié)束和正常結(jié)束),匯聚節(jié)點正常結(jié)束,觸發(fā)流程流轉(zhuǎn)。

          1.2.2、匯聚節(jié)點已激活時

          節(jié)點0、節(jié)點1、節(jié)點2的掛起和恢復(fù)執(zhí)行不會影響匯聚節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài));節(jié)點0、節(jié)點1、節(jié)點2的手工結(jié)束會影響匯聚節(jié)點的狀態(tài),每個節(jié)點實例的手工結(jié)束會引起匯聚節(jié)點的判斷,如果所有并發(fā)的節(jié)點實例(包括正常結(jié)束和手工結(jié)束)都結(jié)束,匯聚節(jié)點正常結(jié)束,觸發(fā)流程流轉(zhuǎn)。

          1.3、用戶掛起、手工結(jié)束流程的處理策略

          1.3.1、匯聚節(jié)點未激活時

          流程的掛起和恢復(fù)執(zhí)行不會影響并發(fā)節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài)),節(jié)點0、節(jié)點1、節(jié)點2會被全部掛起或恢復(fù);流程的手工結(jié)束會引起所有節(jié)點的手工結(jié)束。

          1.3.2、匯聚節(jié)點已激活時

          流程的掛起和恢復(fù)執(zhí)行不會影響匯聚節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài)),節(jié)點0、節(jié)點1、節(jié)點2未執(zhí)行結(jié)束的實例會被全部掛起或恢復(fù);流程的手工結(jié)束會引起所有節(jié)點的手工結(jié)束。

          2、nOutOfM匯聚(圖1

          根據(jù)情況觸發(fā)節(jié)點0、節(jié)點1、節(jié)點2中的一個或多個,匯聚節(jié)點等待N個實際觸發(fā)的節(jié)點完成后即執(zhí)行流轉(zhuǎn)(N>0N<MM為實際觸發(fā)的節(jié)點個數(shù)),在N<=0N>=M的情況下即為同步匯聚。中間匯聚節(jié)點只會產(chǎn)生一個實例。

          2.1、正常流轉(zhuǎn)時的處理策略

          當(dāng)匯聚節(jié)點未被觸發(fā)時(即節(jié)點0、節(jié)點1、節(jié)點2都未執(zhí)行結(jié)束),并發(fā)節(jié)點處于執(zhí)行狀態(tài),一旦匯聚節(jié)點被觸發(fā)(即節(jié)點0、節(jié)點1、節(jié)點2有一個執(zhí)行結(jié)束),并發(fā)節(jié)點正常結(jié)束并且匯聚節(jié)點處于執(zhí)行狀態(tài),N個并發(fā)出的節(jié)點實例執(zhí)行結(jié)束后,匯聚節(jié)點正常結(jié)束,流程繼續(xù)流轉(zhuǎn),M-N的節(jié)點實例被手工結(jié)束。

          2.2、用戶掛起、手工結(jié)束相關(guān)節(jié)點的處理策略

          2.2.1、匯聚節(jié)點未激活時

          節(jié)點0、節(jié)點1、節(jié)點2的掛起和恢復(fù)執(zhí)行不會影響并發(fā)節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài));節(jié)點0、節(jié)點1、節(jié)點2的任一手工結(jié)束都會觸發(fā)匯聚節(jié)點,使并發(fā)節(jié)點正常結(jié)束,如果N個并發(fā)的節(jié)點實例都手工結(jié)束,并發(fā)節(jié)點正常結(jié)束,觸發(fā)匯聚節(jié)點,匯聚節(jié)點正常結(jié)束,觸發(fā)流程流轉(zhuǎn),M-N的節(jié)點實例被手工結(jié)束。

          2.2.2、匯聚節(jié)點已激活時

          節(jié)點0、節(jié)點1、節(jié)點2的掛起和恢復(fù)執(zhí)行不會影響匯聚節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài));節(jié)點0、節(jié)點1、節(jié)點2的手工結(jié)束會影響匯聚節(jié)點的狀態(tài),每個節(jié)點實例的手工結(jié)束會引起匯聚節(jié)點的判斷,如果N個并發(fā)的節(jié)點實例(包括正常結(jié)束和手工結(jié)束)都結(jié)束,匯聚節(jié)點正常結(jié)束,觸發(fā)流程流轉(zhuǎn),M-N的節(jié)點實例被手工結(jié)束。

          2.3、用戶掛起、手工結(jié)束流程的處理策略

          2.3.1、匯聚節(jié)點未激活時

          流程的掛起和恢復(fù)執(zhí)行不會影響并發(fā)節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài)),節(jié)點0、節(jié)點1、節(jié)點2會被全部掛起或恢復(fù);流程的手工結(jié)束會引起所有節(jié)點的手工結(jié)束。

          2.3.2、匯聚節(jié)點已激活時

          流程的掛起和恢復(fù)執(zhí)行不會影響匯聚節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài)),節(jié)點0、節(jié)點1、節(jié)點2未執(zhí)行結(jié)束的實例會被全部掛起或恢復(fù);流程的手工結(jié)束會引起所有節(jié)點的手工結(jié)束。

          3、辨別匯聚(圖1

          nOutOfM匯聚的特例,N=1

          4、多實例匯聚(圖2


          2

          根據(jù)情況觸發(fā)節(jié)點0、節(jié)點1中的一個或多個,節(jié)點0和節(jié)點1任意一個執(zhí)行結(jié)束后都會觸發(fā)匯聚節(jié)點產(chǎn)生一個新的實例,匯聚節(jié)點實例緊接著觸發(fā)節(jié)點2,節(jié)點2也會產(chǎn)生多個實例。

          4.1、正常流轉(zhuǎn)時的處理策略

          當(dāng)匯聚節(jié)點未被觸發(fā)時(即節(jié)點0、節(jié)點1都未執(zhí)行結(jié)束),并發(fā)節(jié)點處于執(zhí)行狀態(tài),一旦匯聚節(jié)點被觸發(fā)(即節(jié)點0、節(jié)點1有一個執(zhí)行結(jié)束),匯聚節(jié)點會緊接著觸發(fā)節(jié)點2,匯聚節(jié)點正常結(jié)束。所有并發(fā)出的節(jié)點實例執(zhí)行結(jié)束后,并發(fā)節(jié)點正常結(jié)束。

          4.2、用戶掛起、手工結(jié)束相關(guān)節(jié)點的處理策略

          節(jié)點0、節(jié)點1的掛起和恢復(fù)執(zhí)行不會影響并發(fā)節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài));節(jié)點0、節(jié)點1的手工結(jié)束會影響并發(fā)節(jié)點和匯聚節(jié)點的狀態(tài),每個節(jié)點實例的手工結(jié)束會引起匯聚節(jié)點產(chǎn)生新的實例并觸發(fā)節(jié)點2,同時會引起并發(fā)節(jié)點的判斷,如果所有并發(fā)的節(jié)點實例都手工結(jié)束,并發(fā)節(jié)點正常結(jié)束。

          4.3、用戶掛起、手工結(jié)束流程的處理策略

          流程的掛起和恢復(fù)執(zhí)行不會影響并發(fā)節(jié)點的狀態(tài)(依舊處于執(zhí)行狀態(tài)),節(jié)點0、節(jié)點1、節(jié)點2會被全部掛起或恢復(fù);流程的手工結(jié)束會引起所有未結(jié)束節(jié)點的手工結(jié)束。

          5、隱式結(jié)束,沒有匯聚節(jié)點與并發(fā)節(jié)點對應(yīng)(圖3


          3

          所有節(jié)點結(jié)束時(正常結(jié)束或手工結(jié)束),并發(fā)節(jié)點正常結(jié)束。流程的手工結(jié)束會引起所有未結(jié)束節(jié)點的手工結(jié)束。

          四、流程實例狀態(tài)變化對節(jié)點實例狀態(tài)造成的影響

          1、流程實例的掛起

             A類節(jié)點掛起,BC類節(jié)點不受影響。同時在流程實例恢復(fù)執(zhí)行之前,A類節(jié)點不允許用戶直接恢復(fù)執(zhí)行。

          2、流程實例的手工結(jié)束

             所有節(jié)點全部手工結(jié)束。

          五、節(jié)點實例狀態(tài)變化對流程實例狀態(tài)造成的影響

          隱式結(jié)束的情況下,節(jié)點的手工結(jié)束或正常結(jié)束都會觸發(fā)流程的判斷,如果所有的節(jié)點都已結(jié)束則流程結(jié)束。



          http://www.aygfsteel.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請注明出處:)
          posted on 2008-05-26 19:36 ronghao 閱讀(1609) 評論(2)  編輯  收藏 所屬分類: SOA、BPM

          FeedBack:
          # re: 工作流流程狀態(tài)管理及變遷
          2008-05-27 09:57 | dennis
          這樣的分類其實將資源與節(jié)點混合了,例如自動節(jié)點、人工節(jié)點以及如匯聚節(jié)點這樣的說法,其實是由它們的觸發(fā)者來稱呼的,自動節(jié)點和and-join,and-split節(jié)點都是由自動資源觸發(fā),人工節(jié)點就是由人力資源觸發(fā);將節(jié)點(或者說工作項)與資源分離清楚,顯然更利于實現(xiàn)和分析。  回復(fù)  更多評論
            
          # re: 工作流流程狀態(tài)管理及變遷[未登錄]
          2008-05-27 10:01 | ronghao
          @dennis
          是這樣的,我的理解是只有人工節(jié)點需要人員參與(即產(chǎn)生工作項),其他節(jié)點都是自動完成的或系統(tǒng)觸發(fā)的。  回復(fù)  更多評論
            
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          關(guān)注工作流和企業(yè)業(yè)務(wù)流程改進(jìn)。現(xiàn)就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

          常用鏈接

          留言簿(38)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          常去的網(wǎng)站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 洛浦县| 茂名市| 福鼎市| 谢通门县| 凌云县| 泰顺县| 乳源| 山阳县| 庐江县| 平安县| 宜章县| 内江市| 当雄县| 鄯善县| 定边县| 定州市| 永和县| 灵丘县| 梁河县| 徐闻县| 沂源县| 招远市| 微山县| 临江市| 邯郸县| 田阳县| 济阳县| 望江县| 宁陕县| 玉环县| 宜兰县| 开封县| 祁连县| 诏安县| 西充县| 景谷| 河曲县| 尉氏县| 铜梁县| 民勤县| 秀山|