狀態機器工作流程

狀態機器是用來開發程式的知名範例。 StateMachine 活動以及 StateTransition 和其他活動皆可用來建置狀態機器工作流程程式。 本主題提供建立狀態機器工作流程的概觀。

狀態機器工作流程概觀

狀態機工作流提供模型樣式,可讓您以事件導向的方式建立工作流程的模型。 StateMachine 活動包含組成狀態機器邏輯的狀態和轉換,並且適用於任何能夠使用活動的地方。 狀態機器執行階段包含數種類別:

若要建立狀態機器工作流程,必須將狀態新增至 StateMachine 活動,並使用轉換來控制狀態之間的流程。 下列螢幕擷取畫面 (從使用者入門教學課程步驟操作說明:建立狀態機器工作流程) 顯示狀態機器工作流程,其中包含三種狀態與三種轉換。 初始化目標是初始狀態,表示工作流程中的第一個狀態。 這是藉由從 [開始] 節點連到該狀態的線條來指派。 工作流程中的最終狀態名為 FinalState,表示工作流程結束的點。

Illustration that shows the completed state machine workflow.

狀態機器工作流程必須且只能有一個初始狀態,以及至少有一個最終狀態。 每個不是最終狀態的狀態都至少要有一個轉換。 以下各節將說明建立和設定狀態及轉換。

建立和設定狀態

State 代表狀態機器可以具有的狀態。 若要將 State 新增至工作流程,請從 [工具箱] 的 [狀態機器] 區段中,將 [狀態] 活動設計工具拖放至 Windows 工作流程設計工具介面的 StateMachine 活動上。

Screenshot of the State Machine section of the Toolbox.

若要將狀態設定為初始狀態,請以滑鼠右鍵按一下該狀態,然後選取 [設定為初始狀態]。 此外,若沒有目前的初始狀態,則可從工作流程最上方的 [開始] 節點,將一條線拖曳至所需的狀態,即可指定初始狀態。 將 StateMachine 活動拖放至工作流程設計工具上時,會預先設定一個名為 State1 的初始狀態。 狀態機器工作流程必須且只能有一個初始狀態。

在狀態機器中代表終止狀態的狀態稱為最終狀態。 最終狀態就是其 IsFinal 屬性設為 true 的狀態,沒有任何 Exit 活動,而且沒有源自於此的轉換。 若要將最後狀態新增至工作流程,請從 [工具箱] 的 [狀態機器] 區段中,將 [FinalState] 活動設計工具拖放至 Windows 工作流程設計工具介面的 StateMachine 活動上。 狀態機器工作流程至少要有一個最終狀態。

設定進入及結束動作

狀態可以有 EntryExit 動作。 (設定為最終狀態的狀態只能有一個進入動作)。 當工作流程執行個體進入狀態時,就會執行進入動作中的任何活動。 項目動作完成時,會針對狀態的轉換排程觸發程序。 確認轉換成另一個狀態時,會執行結束狀態中的活動,即使該狀態重新轉換回相同狀態也一樣。 結束動作完成之後,會執行轉換動作中的活動,然後轉換成新狀態,並排程其項目動作。

注意

在偵錯狀態機器工作流程時,可以將中斷點放置在根狀態機器活動以及狀態機器工作流程的狀態上。 中斷點不能直接放在轉換上,但可以放在狀態及轉換中包含的任何活動上。

建立和設定轉換

所有狀態都至少要有一個轉換,但最終狀態不能有任何轉換。 可在將狀態加入到狀態機器工作流程之後再加入轉換,也可以在放置狀態時建立轉換。

若要在同一個步驟中新增 State 並建立轉換,請從 [工具箱] 的 [狀態機器] 區段拖曳 State 活動,並將該活動暫留在工作流程設計工具中的另一個狀態上。 當被拖曳的 State 位在另一個 State 上方時,另一個 State 周圍會出現四個三角形。 如果將 State 拖放到四個三角形的其中一個,就會將它加入到該狀態機器,並建立從來源 State 到所放置之目的地 State 的轉換。 如需詳細資訊,請參閱 Transition 活動設計工具

若要在加入狀態後建立轉換,有兩個選項。 第一個選項是從工作流程設計工具介面拖曳狀態,將它移到現有狀態上方,然後在其中一個放置點上將它放下。 該方法與上一節中描述的方法類似。 您也可以將滑鼠游標移到所需的來源狀態上方,然後將一條線拖曳至所需的目的地狀態。

注意

狀態機器中的單一狀態最多可以有 76 個以工作流程設計工具來建立的轉換。 針對在設計工具以外建立的工作流程,狀態的轉換數目上限僅受制於系統資源。

轉換中可能會有 TriggerConditionAction。 轉換的 Trigger 會在轉換來源狀態的 Entry 動作完成時排程。 通常 Trigger 是等候某事件類型發生的活動,但它可以是任何活動,也可以不是活動。 Trigger活動完成後,如有 Condition 存在,就會對其進行評估。 若沒有任何 Trigger 活動,就會立即評估 Condition。 若條件評估為 false,轉換就會取消,且會從該狀態中針對所有轉換重新排程 Trigger 活動。 若有其他轉換與目前轉換共用相同的來源狀態,則會取消這些 Trigger 動作並重新排程。 如果 Condition 評估為 true,或是沒有任何條件,則會執行來源狀態的 Exit 動作,然後執行轉換的 Action。 當 Action 完成時,控制權即轉移成目標狀態

共用相同觸發程序的轉換稱為共用觸發程序轉換。 共用觸發程序轉換群組中的每個轉換都有相同的觸發程序,但各自擁有唯一的 Condition 和動作。 若要將其他動作加入到轉換,並建立共用轉換,請按一下指出所要之轉換起始點的圓形,然後將它拖曳到所要的狀態。 新的轉換會與初始轉換共用相同的觸發程序,但擁有唯一的條件和動作。 共用轉換可以從轉換設計工具中建立,方法是按一下轉換設計工具底部的 [新增共用的觸發程序轉換],然後從 [要連線的可用狀態] 下拉式清單中選取所需的目標狀態。

注意

請注意,如果轉換的 Condition 值評估為 False (或所有共用觸發轉換的條件皆評估為 False),則不會發生轉換,且會重新排程該狀態之所有轉換的所有觸發。

如需建立狀態機器工作流程的詳細資訊,請參閱操作說明:建立狀態機器工作流程StateMachine 活動設計工具State 活動設計工具FinalState 活動設計工具,以及 Transition 活動設計工具

狀態機器術語

本節定義在本主題中使用的狀態機器詞彙。

州/省
組成狀態機器的基本單位。 狀態機器可在任何特定時間進入一種狀態。

進入動作
進入狀態時所執行的動作

結束動作
結束狀態時所執行的動作

轉換
兩個狀態之間的定向關係,表示狀態機器對於發生特定事件類型的完整回應。

共用轉換
與一個或多個轉換共用來源狀態及觸發程序的轉換,但每個轉換各有其唯一的條件和動作。

觸發程序
會導致轉換發生的觸發活動。

Condition
在發生觸發之後,條件約束必須評估為 true,才能完成轉換。

轉換動作
在執行特定轉換時所執行的活動。

條件轉換
有明確條件的轉換。

自行轉換
從某狀態轉換成該狀態本身的轉換。

起始狀態
表示狀態機器起點的狀態。

最終狀態
表示狀態機器完成的狀態。

另請參閱