Flowchart のワークフロー
このトピックの内容は、Windows Workflow Foundation 4 に該当します。
フローチャートは、プログラムを診断するための既知のパラダイムです。通常、Flowchart アクティビティはシーケンシャル以外のワークフローを実装するために使用されますが、FlowDecision ノードが使用されない場合は、シーケンシャル ワークフローにも使用できます。
Flowchart のワークフロー構造
Flowchart アクティビティは、FlowNode から継承したフロー ノードのコレクションを含むアクティビティです。フロー ノードには、実行する子アクティビティと、他のフロー ノードに対する直接実行を含むことができます。
フロー ノードの種類
要素の実行時に必要なフロー制御の種類に応じて、さまざまな種類の要素が使用されます。フローチャート要素には次のような種類があります。
FlowStep - フローチャートの実行の 1 ステップをモデル化します。
FlowDecision - If と同様に、ブール条件に基づいて実行を分岐します。
FlowSwitch - Switch と同様に、排他的スイッチに基づいて実行を分岐します。
各リンクには、子アクティビティの実行に使用できる ActivityAction を定義した Action プロパティと、要素の実行が完了したときに実行する 1 つ以上の要素を定義した 1 つ以上の Next プロパティがあります。
FlowStep ノードによる基本的な Activity Sequence の作成
2 つのアクティビティを連続して実行する基本的なシーケンスをモデル化するには、FlowStep 要素を使用します。次の例では、2 つの FlowStep 要素を使用して 2 つのアクティビティを連続して実行しています。
<Flowchart>
<FlowStep>
<Read Result = "[result]"/>
<FlowStep.Next>
<FlowStep>
<Write Text="[Hello + result]"/>
</FlowStep>
</FlowStep.Next>
</FlowStep>
</Flowchart>
FlowDecision ノードによる条件付きフローの作成
フローチャート ワークフローの条件付きフロー ノードをモデル化するには (つまり、従来のフローチャートの決定シンボルとして機能するリンクを作成するには)、FlowDecision ノードを使用します。ノードの Condition プロパティは、条件を定義する WorkflowElement に設定されます。また、True プロパティと False プロパティは、式が true または false に評価された場合に実行される FlowNode インスタンスに設定されます。次の例では、FlowDecision ノードを使用するワークフローを定義する方法を示します。
<Flowchart>
<FlowStep>
<Read Result="[s]"/>
<FlowStep.Next>
<FlowDecision>
<IsEmpty Input="[s]" />
<FlowDecision.True>
<FlowStep>
<Write Text="Empty"/>
</FlowStep>
</FlowDecision.True>
<FlowDecision.False>
<FlowStep>
<Write Text="Non-Empty"/>
</FlowStep>
</FlowDecision.False>
</FlowDecision>
</FlowStep.Next>
</FlowStep>
</Flowchart>
FlowSwitch ノードによる排他的スイッチの作成
一致する値に基づいて 1 つの排他的パスを選択するフローチャートをモデル化するには、FlowSwitch ノードを使用します。Expression プロパティは WorkflowElement’1 に設定されます。この型パラメーターは Object で、選択に一致する値を定義します。また、Cases プロパティは、条件式に対して一致するキーと FlowNode オブジェクトのディクショナリ、および特定のケースが条件式に一致する場合の実行フローを定義する FlowNode オブジェクトのセットを定義します。また、FlowSwitch は、条件式に一致するケースがない場合の実行フローを定義する Default プロパティも定義します。次のコードは、FlowSwitch 要素を使用するワークフローを定義する方法の例です。
<Flowchart>
<FlowSwitch>
<FlowSwitch.Expression>
<ReadColor/>
</FlowSwitch.Expression>
<FlowStep x:Key="Red">
<WriteRed/>
</FlowStep>
<FlowStep x:Key="Blue">
<WriteBlue/>
</FlowStep>
<FlowStep x:Key="Green">
<WriteGreen/>
</FlowStep>
</FlowSwitch.Cases>
</FlowSwitch>
</Flowchart>