Flussdiagrammworkflows

Ein Flussdiagramm ist ein bekanntes Paradigma zum Entwerfen von Programmen. Die Flowchart-Aktivität wird in der Regel dazu verwendet, nicht sequenzielle Workflows zu implementieren. Sie kann jedoch auch für sequenzielle Workflows verwendet werden, falls es keine FlowDecision-Knoten gibt.

Workflowstruktur von Flussdiagrammen

Eine Flowchart-Aktivität ist eine Aktivität, die eine Auflistung von Aktivitäten enthält, die ausgeführt werden sollen. Flussdiagramme enthalten auch Flusssteuerungselemente wie FlowDecision und FlowSwitch<T>, die die Ausführung zwischen enthaltenen Aktivitäten auf der Grundlage der Variablenwerte steuern.

Flussknotentypen

Andere Elementtypen werden abhängig vom erforderlichen Typ der Flusssteuerung verwendet, wenn das Element ausgeführt wird. Es gibt folgende Typen von Flussdiagrammelementen:

  • FlowStep – modelliert einen Ausführungsschritt im Flussdiagramm.

  • FlowDecision – verzweigt die Ausführung auf Grundlage einer booleschen Bedingung, wie dies auch bei If der Fall ist.

  • FlowSwitch – verzweigt die Ausführung auf Grundlage eines exklusiven Schalters, wie dies auch bei Switch<T> der Fall ist.

Jeder Link verfügt über eine Action-Eigenschaft, die eine ActivityAction definiert, mit der untergeordnete Aktivitäten ausgeführt werden können, und über mindestens eine Next-Eigenschaft, die definiert, welche Elemente ausgeführt werden sollen, wenn das aktuelle Element die Ausführung beendet.

Erstellen einer grundlegenden Aktivitätssequenz mit einem FlowStep-Knoten

Um eine grundlegende Sequenz zu modellieren, in der zwei Aktivitäten abwechselnd ausgeführt werden, wird das FlowStep-Element verwendet. Im folgenden Beispiel werden mithilfe des FlowStep-Elements zwei Aktivitäten abwechselnd ausgeführt.

<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>

Erstellen eines bedingten Flussdiagramms mit einem FlowDecision-Knoten

Um einen bedingten Flussknoten in einem Flussdiagramm-Workflow zu modellieren (d. h., einen Link zu erstellen, der als normales Entscheidungssymbol eines Flussdiagramms fungiert), wird ein FlowDecision-Knoten verwendet. Die Condition-Eigenschaft des Knotens wird auf einen Ausdruck festgelegt, der die Bedingung definiert, und die True-Eigenschaft und die False-Eigenschaft werden auf FlowNode-Instanzen festgelegt, die ausgeführt werden sollen, wenn der Ausdruck true oder false ergibt. Im folgenden Beispiel wird gezeigt, wie ein Workflow definiert wird, der einen FlowDecision-Knoten verwendet.

<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>

Erstellen eines exklusiven Schalters mit einem FlowSwitch-Knoten

Um ein Flussdiagramm zu modellieren, in dem ein exklusiver Pfad auf Grundlage eines übereinstimmenden Werts ausgewählt wird, wird der FlowSwitch<T>-Knoten verwendet. Die Expression-Eigenschaft wird auf Activity<TResult> mit dem Typparameter Object festgelegt, der den Wert definiert, mit dem die Auswahlen verglichen werden sollen. Die Cases-Eigenschaft definiert ein Wörterbuch von Schlüsseln sowie FlowNode-Objekte, mit denen der bedingte Ausdruck verglichen werden soll, und einen Satz von FlowNode-Objekten, die definieren, wie der Ausführungsfluss erfolgen soll, wenn der angegebene Fall eine Entsprechung für den bedingten Ausdruck findet. Der FlowSwitch<T> definiert außerdem eine Default-Eigenschaft, die den Ausführungsfluss für den Fall definiert, dass keine Übereinstimmung mit dem bedingten Ausdruck gefunden wird. Das folgende Beispiel zeigt die Definition eines Workflows, der ein FlowSwitch<T>-Element verwendet.

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