ステート マシンは、プログラムを開発するためのよく知られたパラダイムです。 StateMachine アクティビティと、State、Transition、およびその他のアクティビティを使用して、ステート マシン ワークフロー プログラムを構築できます。 このトピックでは、ステート マシン ワークフローの作成の概要について説明します。
ステート マシン ワークフローの概要
ステート マシン ワークフローには、イベントドリブン方式でワークフローをモデル化できるモデリング スタイルが用意されています。 StateMachine アクティビティには、ステート マシンのロジックを構成する状態と遷移が含まれており、アクティビティを使用できる任意の場所で使用できます。 ステート マシン ランタイムには、いくつかのクラスがあります。
ステート マシン ワークフローを作成するには、状態が StateMachine アクティビティに追加され、遷移を使用して状態間のフローが制御されます。 次のスクリーンショットは、「 チュートリアルの概要 」の「 方法: ステート マシン ワークフローを作成する」の 3 つの状態と 3 つの遷移を持つステート マシン ワークフローを示しています。 Initialize Target は初期状態であり、ワークフローの最初の状態を表します。 これは、[ 開始] ノードからその行に続く行によって指定されます。 ワークフローの最終状態は FinalState という名前で、ワークフローが完了した時点を表します。
ステート マシン ワークフローには、1 つだけの初期状態と、少なくとも 1 つの最終状態が必要です。 最終的な状態ではない各状態には、少なくとも 1 つの遷移が必要です。 次のセクションでは、状態と遷移の作成と構成について説明します。
状態の作成と構成
Stateは、ステート マシンを使用できる状態を表します。 Stateをワークフローに追加するには、ツールボックスの [ステート マシン] セクションから状態アクティビティ デザイナーをドラッグし、Windows ワークフロー デザイナー画面のStateMachine アクティビティにドロップします。
状態を初期状態として構成するには、 状態を右クリックし、[ 初期状態として設定] を選択します。 さらに、現在の初期状態がない場合は、ワークフローの上部にある [開始] ノードから目的の状態に行をドラッグすることで、初期状態を指定できます。 StateMachine アクティビティがワークフロー デザイナーにドロップされると、State1 という名前の初期状態で事前に構成されます。 ステート マシン ワークフローには、初期状態が 1 つだけ必要です。
ステート マシンの終了状態を表す状態を最終状態と呼びます。 最終的な状態は、 IsFinal プロパティが true
に設定され、 Exit アクティビティがなく、遷移が発生しない状態です。 最終的な状態をワークフローに追加するには、ツールボックスの [ステート マシン] セクションから FinalState アクティビティ デザイナーをドラッグし、Windows ワークフロー デザイナー画面のStateMachine アクティビティにドロップします。 ステート マシン ワークフローには、少なくとも 1 つの最終状態が必要です。
入退出アクションの構成
状態には、 Entry と Exit アクションを含めることができます。 (最終的な状態として構成された状態には、エントリ アクションのみが含まれる場合があります)。 ワークフロー インスタンスが状態に入ると、エントリ アクション内のすべてのアクティビティが実行されます。 エントリ アクションが完了すると、状態の遷移のトリガーがスケジュールされます。 別の状態への遷移が確認されると、状態が同じ状態に戻った場合でも、終了アクションのアクティビティが実行されます。 終了アクションが完了すると、遷移のアクション内のアクティビティが実行され、新しい状態が遷移し、そのエントリ アクションがスケジュールされます。
注
ステート マシン ワークフローをデバッグするときに、ステート マシン ワークフロー内のルートステート マシンアクティビティと状態にブレークポイントを配置できます。 ブレークポイントは遷移に直接配置することはできませんが、状態と遷移に含まれるアクティビティに配置される場合があります。
画面切り替えの作成と構成
最終的な状態を除き、すべての状態に少なくとも 1 つの遷移が必要です。ただし、遷移がない可能性があります。 遷移は、状態がステート マシン ワークフローに追加された後に追加することも、状態が削除されるときに作成することもできます。
Stateを追加し、1 つのステップで遷移を作成するには、ツールボックスの [ステート マシン] セクションから State アクティビティをドラッグし、ワークフロー デザイナーの別の状態の上にマウス ポインターを置きます。 ドラッグした State が別の State上にある場合は、他の Stateの周囲に 4 つの三角形が表示されます。 Stateが 4 つの三角形のいずれかにドロップされると、ステート マシンに追加され、ソース Stateからドロップ先Stateへの遷移が作成されます。 詳細については、「 遷移アクティビティ デザイナー」を参照してください。
状態が追加された後に遷移を作成するには、2 つのオプションがあります。 1 つ目のオプションは、ワークフロー デザイナー画面から状態をドラッグし、既存の状態の上にマウス ポインターを置き、いずれかのドロップ ポイントにドロップすることです。 これは、前のセクションで説明した方法と似ています。 また、目的のソース状態の上にマウス ポインターを置き、目的の移動先の状態に線をドラッグすることもできます。
注
ステート マシン内の 1 つの状態には、ワークフロー デザイナーを使用して最大 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 アクティビティ デザイナー、 および遷移アクティビティ デザイナーを参照してください。
ステート マシンの用語
このセクションでは、このトピック全体で使用されるステート マシンのボキャブラリを定義します。
状態
ステート マシンを構成する基本ユニット。 ステート マシンは、特定の時点で 1 つの状態にすることができます。
エントリ アクション
状態に入ったときに実行されるアクティビティ
Exit アクション
状態の終了時に実行されるアクティビティ
遷移
特定の種類のイベントの発生に対するステート マシンの完全な応答を表す 2 つの状態間の直接的な関係。
共有切り替え
移行元の状態とトリガーを 1 つ以上の遷移と共有するが、一意の条件とアクションを持つ遷移。
トリガー
遷移を発生させるトリガー アクティビティ。
条件
遷移が完了するためにトリガーが発生した後に true
に評価する必要がある制約。
切り替えアクション
特定の遷移を実行するときに実行されるアクティビティ。
条件付き遷移
明示的な条件を持つ遷移。
自己移行
状態からそれ自体に遷移する遷移。
初期状態
ステート マシンの開始点を表す状態。
最終状態
ステート マシンの完了を表す状態。
こちらも参照ください
.NET