Flowchart のワークフロー

フローチャートは、プログラムを診断するための既知のパラダイムです。 通常、Flowchart アクティビティはシーケンシャル以外のワークフローを実装するために使用されますが、FlowDecision ノードが使用されない場合は、シーケンシャル ワークフローにも使用できます。

フローチャート ワークフローの構造

Flowchart アクティビティは、実行されるアクティビティのコレクションを含むアクティビティです。 フローチャートには、変数の値に基づいて含まれているアクティビティ間の実行を指示する、FlowDecisionFlowSwitch<T> などのフロー制御要素も含まれています。

フロー ノードの種類

要素の実行時に必要なフロー制御の種類に応じて、さまざまな種類の要素が使用されます。 フローチャート要素には次のような種類があります。

  • FlowStep - フローチャートの実行の 1 ステップをモデル化します。

  • FlowDecision - If と同様に、ブール条件に基づいて実行を分岐します。

  • FlowSwitch - Switch<T> と同様に、排他的スイッチに基づいて実行を分岐します。

各リンクには、子アクティビティの実行に使用できる Action を定義した ActivityAction プロパティと、現在の要素の実行が完了したときに実行する 1 つ以上の要素を定義した 1 つ以上の Next プロパティがあります。

FlowStep ノードによる基本的なアクティビティ シーケンスの作成

2 つのアクティビティを連続して実行する基本的なシーケンスをモデル化するには、FlowStep 要素を使用します。 次の例では、2 つの FlowStep 要素を使用して 2 つのアクティビティを連続して実行しています。

<Flowchart>
  <FlowStep>
    <Assign DisplayName="Get Name">
      <Assign.To>
        <OutArgument x:TypeArguments="x:String">[result]</OutArgument>
      </Assign.To>
      <Assign.Value>
        <InArgument x:TypeArguments="x:String">["User"]</InArgument>
      </Assign.Value>
    </Assign>
    <FlowStep.Next>
      <FlowStep>
        <WriteLine Text="Hello, " & [result]/>
      </FlowStep>
    </FlowStep.Next>
  </FlowStep>
</Flowchart>

FlowDecision ノードによる条件付きフローチャートの作成

フローチャート ワークフローの条件付きフロー ノードをモデル化するには (つまり、従来のフローチャートの決定シンボルとして機能するリンクを作成するには)、FlowDecision ノードを使用します。 ノードの Condition プロパティは、条件を定義する式に設定されます。また、True プロパティと False プロパティは、式が FlowNode または true に評価された場合に実行される false インスタンスに設定されます。 次の例では、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<T> ノードを使用します。 Expression プロパティは、選択に対して一致する値を定義する Activity<TResult> の型パラメーターを持つ Object に設定されます。 Cases プロパティは、条件式に対して一致する、キーと FlowNode オブジェクトのディクショナリと、特定のケースが条件式に一致する場合のフローの実行方法を定義する FlowNode オブジェクトのセットを定義します。 また、FlowSwitch<T> は、条件式に一致するケースがない場合の実行フローを定義する Default プロパティも定義します。 次のコードは、FlowSwitch<T> 要素を使用するワークフローを定義する方法の例です。

<Flowchart>
  <FlowSwitch>
    <FlowStep x:Key="Red">
      <WriteRed/>
    </FlowStep>
    <FlowStep x:Key="Blue">
      <WriteBlue/>
    </FlowStep>
    <FlowStep x:Key="Green">
      <WriteGreen/>
    </FlowStep>
  </FlowSwitch>
</Flowchart>