流程設計-流程模式
工作流基本包含如下多種模式用於工作流過程建模和分析:
(1)、基本模式 5種
● 順序模式---- 按照順序執行各項活動
● 並行分支模式----同時運行兩個活動
● 同步模式----同步兩個並行的執行線程
● 單選模式----從多條路徑中選擇一個執行
● 簡單合並模式----合並兩個二選一路徑
(2)、高級分支與同步模式 5種
● 多選模式----從多條執行路徑中選出幾條
● 同步合並模式----合並多條路徑,如果有多條路徑被選擇,則進行同步;如果只有一條路徑被選擇,則進行簡單合並
● 多合並模式----合並多條路徑
● 鑒別器模式----合並多條路徑而不進行同步,只執行一次後續活動
● M中的N模式-----合並多條路徑,進行部分同步,只執行一次後續活動
(3)、結構模式 2種
● 任意循環模式----沒有任何限制的執行工作流
● 隱含終斷模式----如果沒有事情可做,就結束
(4)、多實例模式
● 設計期多實例---流程設計時已知實例數目
● 運行時前置多實例---實例數目在運行時才能確定
● 運行時非前置多實例---實例數目無法確定
● 同一任務多實例並要求同步運行
(5)、基於狀態模式
● 延期選擇---執行兩個可選進程之一,選擇執行進程是隱含的
● 交叉並行路由---隨機執行一個任務但不並行
● 裏程碑---直到達到某個裏程碑方激活一個任務
(6)、取消模式
● 取消活動---取消或禁止一個活動
● 取消過程---取消或禁止一個過程
(7)、其它模式
● 結構化循環
● 遞歸
● 臨時觸發器
● 持續觸發器
● 取消範圍
● 多實例的取消
● 多實例的手工完成
● 鑒別阻塞
● 鑒別取消
● 結構化N選M
● N選M阻塞
● N選M取消
● AND合並
● 多實例的N選M
● 多實例的N選M取消
● 動態多實例的N選M
● 循環的同步合並
● 同步合並
● 區域互斥
● 交叉路由
● 線程合並
● 線程分支
● 顯式終止
3.2.1 基本模式
(1)、順序模式(Sequence)
最基本的過程模型:按照順序執行各項活動,前驅活動的完成是後續活動開始的必要條件,每一個工作流系統都直接實現了這種模式,這個模式是工作流能運行的一個重要基石。
這個理論模型十分簡單,只是一個工作單元完成了,緊接著無條件執行下一個工作單元。
(2)、並行分支模式(Parallel Split)
在流程執行過程中,需要將單進程的某個控制點分成可以並行執行的多進程控制,於是允許任務同時執行或者以任何順序執行。此一模式,實際就是我們常接觸到的 AND 模型。
值得註意的是這個定義來說一般B、C、D之間是並發的,實現上一般是幾個不同的線程/進程。
(3)、同步模式(Synchronization)
AND分支以後,一個最為普遍的合並方式就是AND合並。當多個並行任務都完成後才能開始執行下一任務。
需要註意的細節是"同步"這個問題,很多時候存在現實業務的考慮,即使是同一個動作,也不一定是非要合並不可。
一般情況下,並行分支和合並是組合使用,組合執行模型如下:
(4)、單選模式(Exclusive Choice)
單選模式其實就是“排它選擇”模式,在流程的某一節點,依據一個結果或流程控制數據, 從多個分支路徑中選定一個路徑執行。
需要註意的是這個"排他"性,只能選擇其中一個分支,另外多個分支將不會走下去。一般來說,這個模式的實現一般為在運行時的條件選擇,就是條件判斷的代碼放到XOR 這個結點,然後去根據這些代碼去判斷下一步的走向。
(5)、簡單合並模式(Simple Merge)
在流程中某點,需將兩個或更多可選分支聚合而不同步;換言之,“合並”在任一入口連接觸發時被觸發。
這個模式主要是為了應付前軀只有一個分支的流程,這個模式也是一個很常用的模式。在許多的流程圖中,沒有顯式說明的一般都可以看作是 XOR-join,就是任意一個前軀完成,就觸發下一個工作單元。
一般情況下,單選模式和簡單合並模式是組合使用的,組合模式如下:
通過對基本模式的分析和了解後,在實際的應用中,經常將五種模式進行組合使用,組合使用的模型如下:
3.2.2 高級分支與同步模式
(1)、多選模式(Multiple Choice)
在工作流過程的某點,依據判定或工作流控制數據,選擇一個或多個分支來進行執行。通常意義上來講就是我們所說的OR_Split
(2)、同步合並模式(Synchronising Join)
流程中某點多條路徑聚合成一個線程,若多於一條路徑觸發,則活動線程需同步;若僅有一條路徑觸發,則可選分支應再收斂,無需同步。
工作流程中的多個路徑在一個點被匯合成一個單一的進程。如果多於一個的路徑到達了,活動線程就需要進行同步。如果只有一個路徑到達,那麽其它的路徑應該異步的重新會聚。
這一個模式是為了應付多選模式(Multiple Choice)或者通常意義所說的 OR-Split 所產生的分支。
說明:這個分支的合並,需要了解上下文的關系。如果前面只產生了A分支,那麽到達同步-JOIN節點就可以觸發後續活動D。如果前面產生的分支A、B、C都被激活觸發,並且A、B、C分支是並發的,那麽當A、B都已到達同步-JOIN節點,但是C分支還沒有到達,那麽就需要進行等待,等到C分支也到達本節點後,才能觸發執行下一節點D活動。
(3)、多合並模式(Multiple Merge)
多合並模式即多路合並,在流程中某節點,兩條或更多分支無同步再收斂。若多於一個分支被激活或多個分支被同時激活,流程需要對每個被激活分支進行響應一次,則需要采用多合並模式。其實多路合並並不是真正意義的合並,而是到達多路_JOIN節點時繼續相同的後續分支。
說明:如圖所示,B\C\D三個活動,當B先到達“多路_JOIN”節點時,則觸發E1,C到達時候,觸發E2,D到達時候,觸發E3,觸發完成全部分支後,E觸發完成結束。其實每次觸發的都是相同的E,但是產生的任務為E1,E2,E3,他們是對每一個流入的分支都進行響應一次功效。當全部觸發完成後,流程繼續進入E後續的流程活動。
(4)、鑒別器模式(Discriminator)
路徑鑒別器是指在流程的某點,激活後續任務之前等待許多流入分支的完成。從它開始之時起,等待所有剩余分支的完成並“忽略”它們。一旦所有的流入分支都被觸發,它使自己復位,以便可被再次觸發。
鑒別器模式只只對And_Split同時執行的情況;此種模式有三種情況:
(1)、B、C同時到達鑒別器Discriminator節點,則執行D
一般這種情況不會發生,因為計算機執行的時候,總是有先後執行順序的,總有一個為先執行。
(2)、B先到達鑒別器Discriminator節點,那麽就不必等待C的執行結果,直接執行D,當C到完成後到達鑒別器Discriminator節點時,流程將自動忽略C的結果,將鑒別器Discriminator恢復原位,繼續等待被觸發。
(3)、C先到達鑒別器Discriminator節點,那麽就不必等待B的執行結果,直接執行D,當B到完成後到達鑒別器Discriminator節點時,流程將自動忽略B的結果,將鑒別器Discriminator恢復原位,繼續等待被觸發。
(5)、M中的N模式(N-out-of-M Join)
M中選N合並是指流程的某點M 條並行路徑聚合到一點,只要其中N條路徑完成則激活後續任務,所有其它剩余路徑的完成應被忽略。類似於路由鑒別,只要所有流入分支被觸發,則該合並使自己復位,以便可被再次觸發。M中選N其實就是合並多條路徑,進行部分同步,只執行一次後續活動。
說明:上圖所示 M 為3,N我們設定為2 ,則,如果B\C 都完成到達N-out-of-M Join節點,則滿足N-out-of-M 規則,則不必等待D的執行結果,直接轉向執行E;當D完成後到達N-out-of-M Join節點,流程則忽略D的執行結果,將N-out-of-M Join節點復位等待再次被觸發。
3.2.3 結構模式
(1)、任意循環模式(Arbitrary Cycles)
在工作流過程的執行過程中,一個或多個任務可被重復執行。
(2)、隱含終斷模式(Implicit Termination)
這個模式叫隱式結束,或者自然結束。就是當所有正在運行結點都沒有後繼結點,流程就視為結束了。也就是不需要指明結束的結點,只要跑完所有的結點(或者沒有找到後繼結點),就視為流程結束。
3.2.4 多實例模式
(1)、設計期多實例(Multiple Instances with a Priori Design-Time Knowledge)
流程中的某個任務可能需要創建多個實例,其數目在設計模型時已知。即在某種情形下,一個任務被激活多次,其指定任務在給定情況下實例的個數在設計時已知。這一模式是用於確立多實例的入口方式。入口主要處理的問題就是確定所需要生成的實例個數 N 。而這個 N 在設計流程的時候就確定了。
(2)、運行時前置多實例(Multiple Instances with a Priori Run-Time Knowledge)
一個任務的實例個數是動態的,亦即在設計時未知,而在運行期間所有實例需被執行前的某點可獲知其數目。可以將本模式看作一初始化該任務的For循環。在某種情況下,任務可被激活多次,給定任務的實例數在指定情形下是一變量,取決於情況特征或資源的可用性, 但在運行期的某些階段才已知, 即該任務的實例在運行時候才確定。
入口方式也可以動態確定,這一模式是表示在流程運行的過程中,B 中第一個實例產生以前就確定 N 。當然了,確定這個N 的時機可以是前面 A,也可以是 A 前的工作任務。總之是在第一個實例產生前就確定下來的,也可以視作該模式的應用。
(3)、運行時非前置多實例(Multiple Instances without a Priori Run-Time Knowledge)
實例的數目是動態的,亦即實例數設計時不知,在運行期間,所有這些實例需要被激活前的任何階段都無法知道。可將本模式看作是任務實例化的WHILE循環。
(4)、同步多實例(Multiple Instances without a Priori Run-Time Knowledge)
實例數在設計時未知,任務的所有實例完成後另一任務才能啟動(或開始)。
3.2.5 基於狀態模式
(1)、延期選擇(Deferred Choice)
一個線程激活任務A, 另一線程激活任務 B,而兩個任務都在任務列表中),只要一個線程啟動, 另一線程應消失(亦即若任務 A 啟動,則任務B 應從工作列表中消失)。
工作流中的一個節點,有一個或多個分支已經被選擇。與XOR拆分相比,並沒有明確的選擇,但是,選擇是取決於環境的。與AND拆分相比,兩者中只有一個被執行。這意味著一旦環境啟動了其中的一個,另一個就被取消。要註意,選擇是被延遲到兩個分支中的一個真正開始執行時,也就是說,選擇是可以盡可能的推後的。例子:在收到貨物之後,有兩種方法可以將其送到。選擇取決於相關資源的可用性。因此,選擇會被推遲到直到其中一個資源可用為止。
(2)、交叉並行路由(Interleaved Parallel Routing)
一組活動以任意的順序執行,每個活動都被執行,他們的順序是在運行時決定的,並且在任意一個時刻都不會有兩個活動在執行。
(3)、裏程碑(Milestone)
一個活動能否執行取決於一個指定的狀態。也就是說,只有在到達一個特定的未過期的裏程碑時,活動才被執行。
3.2.6 取消模式
(1)、取消活動(Cancel Activity)
一個可執行的活動被強制失效了,也就是說,一個正在等待執行的活動所在線程被移除了。
例子:如果顧客取消了一個請求,那麽與之相關的活動也被取消了。
(2)、取消過程(Cancel Case)
一個過程實例, 被完全取消。
3.2.7 其它模式
(1)、結構化循環(Cancel Activity)
(2)、遞歸(Recursion)
(3)、臨時觸發器(Transient Trigger)
(4)、持續觸發器(Persistent Trigger)
(5)、取消範圍(Cancel Region)
(6)、多實例的取消(Cancel Multiple Instance Activity)
(7)、多實例的手工完成(Complete Multiple Instance Activity)
(8)、鑒別阻塞(Blocking Discriminator)
(9)、鑒別取消(Cancelling Discriminator)
(10)、結構化N選M(Structured Partial Join)
(11)、N選M阻塞(Blocking Partial Join)
(12)、N選M取消(Cancelling Partial Join)
(13)、AND合並(Generalised AND-Join)
(14)、多實例的N選M(Static Partial Join for Multiple Instances)
(15)、多實例的N選M取消(Cancelling Partial Join for Multiple Instances)(16)、動態多實例的N選M(Dynamic Partial Join for Multiple Instances)
(17)、循環的同步合並(Acyclic Synchronizing Merge)
(18)、同步合並(General Synchronizing Merge)
(19)、區域互斥(Critical Section)
(20)、交叉路由(Interleaved Routing)
(21)、線程合並(Thread Merge)
(22)、線程分支(Thread Split)
(23)、顯式終止(Explicit Termination)
3.3 過程推進
過程推進是針對工作流系統正常流轉的一個整體的引擎調度流程,它是工作流系統完整流轉的整體過程描述。
(1)、業務創建
用戶在WEB端創建單據
業務流程創建業務單據、公文流程編制文稿數據,此時業務單據的狀態為草稿狀態,同時產生一條狀態為【初始】的過程實例。如果用戶刪除業務單據,則同時刪除產生的過程實例。
(2)、流程啟動
第一步完成後,啟動工作流程。流程的啟動方式分多種,手工啟動、自動啟動、事件啟動、郵件啟動、外部啟動等。
<A>、將流程定義模型導入到運行庫(工作流流程的執行情況表)中;運行庫包含如下內容:
● 過程執行情況:生成過程記錄,狀態為【初始】
● 活動執行情況:
● 任務執行情況
<B>、將過程實例狀態變遷為【運行】
<C>、生成所有活動的活動實例。
<D>、將第一開始活動的活動實例狀態變遷為完成。
<E>、生成開始活動的工作任務,將狀態變遷為完成。
<F>、更新運行庫記錄。將過程記錄狀態變更為【運行】,生成一條第一開始活動的執行情況記錄,狀態為【完成】,生成第一活動的任務執行情況記錄,狀態修改為【完成】。
(3)、過程執行
流程啟動後,SDP工作流流程的設計模式是已經完成了第一開始活動的所有任務,直接進行第二活動的執行,此時整個過程開始真正的執行,那麽我們就需要開始分析活動實例,在許可狀態(Running)下,分析活動類型:
<A>、普通
普通類型是指在工作流過程中,各個活動(人工活動或自動活動)相互之間路徑沒有分支,只有單一的流向,此種類型屬於普通活動。如圖所示:
此種情況下直接讀取活動變遷表的後續活動的字段信息。
<B>、路由
路由類型是指在工作流過程中,活動相互之間的路徑變遷有多種(大於1)分支,此種情況屬於路由類型。路由分幾種情況:分裂、匯聚、循環
第一開始活動執行完成後,根據遷移條件是否開始激活運行下一步活動實例,活動實例在過程實例創建時候已經全部創建完成,此處只要執行激活運行活動實例,激活運行活動實例的條件是必須至少一個工作任務被創建並且滿足啟動運行的條件,那麽此時就需要先創建工作任務項,並且啟動運行工作任務,即工作任務的狀態變遷為運行,變更完成後,將活動實例狀態變遷運行。
(4)、業務結束
業務單據及工作流流程的結束。結束方式分:完成(正常流轉完成),終止(非正常的結束),中斷(因工作流在掛起狀態下被發現過程實例超過了它的生存周期,有工作流引擎自動執行過程中斷。)
業務和流程的結束,工作流引擎將自動清除過程實例、活動實例、工作任務記錄。運行庫中,將過程執行情況、活動執行情況、任務執行情況的記錄狀態變更為相應的結束狀態(註意:當非正常結束時,需要清除未完 成的活動和任務記錄)。
過程推進是由工作流系統的調度引擎來執行,它是工作流系統完整流轉的整體過程描述。
流程設計-流程模式