狀態機器是開發程式的已知範例。 活動 StateMachine 以及 State、 Transition和其他活動可用來建置狀態機器工作流程程式。 本主題提供建立狀態機器工作流程的概觀。
狀態機器工作流程概觀
狀態機器工作流程提供模型樣式,您可以透過事件驅動方式建立工作流程的模型化。 活動 StateMachine 包含組成狀態機邏輯的狀態和轉換,並且可以在任何可以使用活動的位置使用。 狀態機器執行時間中有數個類別:
若要建立狀態機器工作流程,狀態會新增至 StateMachine 活動,並使用轉換來控制狀態之間的流程。 下列螢幕擷取畫面,摘自 開始使用教學 課程步驟 如何:建立狀態機器工作流程,顯示一個具有三個狀態和三個轉換的狀態機器工作流程。 初始化目標 是初始狀態,代表工作流程中的第一個狀態。 這會由從 [ 開始 ] 節點指向它的行指定。 工作流程中的最終狀態會命名為 FinalState,並代表工作流程完成的時間點。
狀態機器工作流程必須有一個且只有一個初始狀態,以及至少一個最終狀態。 不是最終狀態的每個狀態都必須至少有一個轉換。 下列各節涵蓋建立和設定狀態和轉換。
建立和設定狀態
State代表狀態機器所處的一種狀態。 若要將 新增State至工作流程,請從 [工具箱] 的 [狀態機器] 區段拖曳 [狀態] 活動設計工具,然後將它StateMachine放入 Windows 工作流程設計工具介面上的活動。
若要將狀態設定為 初始狀態,請以滑鼠右鍵按兩下狀態,然後選取 [設定為初始狀態]。 此外,如果沒有目前的初始狀態,則可以將工作流程頂端的 [ 開始 ] 節點中的一行拖曳至所需的狀態,以指定初始狀態。 當將 StateMachine 活動放入工作流程設計工具時,它會預先配置為具有名為 State1 的初始狀態。 狀態機器工作流程必須有一個且只有一個初始狀態。
表示狀態機器中終止狀態的狀態稱為最終狀態。 最終狀態是一種狀態,其 IsFinal 屬性設定為 true
、沒有 Exit 活動,也沒有源自它的轉換。 若要將最終狀態新增至工作流程,請從 [工具箱] 的 [狀態機器] 區段拖曳 FinalState 活動設計工具,然後將它StateMachine放入 Windows 工作流程設計工具介面上的活動。 狀態機器工作流程必須至少有一個最終狀態。
設定進入和結束動作
狀態可以有 Entry 和 Exit 動作。 (設定為最終狀態的狀態可能只有進入動作)。 當工作流程實例進入狀態時,項目動作中的任何活動就會執行。 當入狀態的動作完成時,將安排狀態轉換的觸發條件。 確認轉換至另一個狀態時,即使狀態轉換回相同的狀態,也會執行結束動作中的活動。 當結束動作完成後,轉換過程中的活動就會執行,接著會轉換到新的狀態,並安排其進入動作的執行。
備註
在偵錯狀態機器工作流程時,斷點可以設置在根狀態機器活動以及狀態機器工作流程內的各個狀態。 中斷點無法直接放在轉換上,但可以放在狀態和轉換中包含的任何活動上。
建立及設定過場效果
除了可能沒有任何轉換的最終狀態之外,所有狀態都必須至少有一個轉換。 在狀態新增至狀態機器工作流程之後,可能會新增轉換,或可在卸除狀態時建立轉換。
若要在一步驟中新增 State 並創建轉換,請從 工具箱 的 狀態機器 區段拖曳 狀態 活動,並將它懸停在工作流程設計工具的另一個狀態上。 當拖曳的 State 位於另一個 State 上方時,四個三角形會出現在另一個 State 的周圍。 如果State被放置到四個三角形的其中一個,它會被新增到狀態機,並從來源State建立到放置的目的地State。 如需詳細資訊,請參閱 轉換活動設計工具。
若要在新增狀態之後建立轉換,有兩個選項。 第一個選項是從工作流程設計工具介面拖曳狀態,並將它暫留在現有狀態上,並將它放在其中一個置放點上。 這類似於上一節中所述的方法。 您也可以將滑鼠停留在所需的來源狀態上,並將一行拖曳至所需的目的地狀態。
備註
狀態機器中的單一狀態最多可以使用工作流程設計工具建立76個轉換。 在設計工具外部建立之工作流程的狀態轉換限制僅限於系統資源。
轉換可能有 Trigger、、 Condition和 Action。 當轉換的來源狀態動作完成時,會排程轉換 Trigger 的 Entry 。 通常情況下,Trigger 是一個等候某類型事件發生的活動,但它可以是任何活動,或者完全沒有活動。 完成Trigger活動後,如果Condition存在,就會進行評估。 如果沒有Trigger活動,則會立即評估Condition。 如果條件評估為 false
,則取消該轉換,而且會對來自該狀態的所有轉換活動 Trigger 重新排程。 如果有與目前轉換共用相同來源狀態的其他轉換,這些 Trigger 動作也會取消並重新排程。
Condition如果評估為 true
,或沒有任何條件,則會執行Exit的來源狀態動作,然後執行Action的過渡動作。 當 Action 完成時,控制會轉至 目標 狀態
共用相同觸發條件的轉換稱為共用觸發條件轉換。 共用觸發條件的過渡群組中的每個過渡都有相同的觸發條件,但具有唯一的 Condition 和動作。 若要將其他動作新增至轉換並建立共用轉換,請按兩下表示所需轉換開始的圓形,並將它拖曳至所需的狀態。 新的轉換會與初始轉換共用相同的觸發程式,但會有唯一的條件和動作。 您也可以從轉換設計工具內建立共用轉換,方法是按一下轉換設計工具底部的 [新增共用觸發程式轉換],然後從 [可用的狀態] 下拉式清單中選取所需的目標狀態。
備註
請注意,如果某個遞移的 Condition 評估結果為 False
(或共用觸發條件的所有遞移的所有條件評估結果為 False
),則該遞移不會發生,並且會重新安排所有從狀態開始的所有遞移的觸發條件。
如需建立狀態機器工作流程的詳細資訊,請參閱 如何:建立狀態機器工作流程、 StateMachine 活動設計工具、 狀態活動設計工具、 FinalState 活動設計工具,以及 轉換活動設計工具。
狀態機器術語
本節會定義本主題中所使用的狀態機器詞彙。
州
組成狀態機器的基本單位。 狀態機器在任何特定時間都可以處於一種狀態。
項目動作
進入狀態時執行的活動
結束動作
結束狀態時執行的活動
過渡
兩種狀態之間的導向關聯性,表示狀態機器對特定類型之事件的完整回應。
共用過渡
與一或多個轉換共用來源狀態和觸發的轉換,但具有唯一的條件和動作。
觸發程序
觸發活動,導致轉換發生。
狀況
在觸發事件發生後,約束條件必須評估為 true
,才能完成轉換。
過渡動作
執行特定轉換時所執行的活動。
條件式轉換
具有明確條件的轉換。
自我轉變
從一個狀態轉移回到自身的轉換。
初始狀態
表示狀態機器起點的狀態。
最終狀態
表示狀態機完成的狀態。