Flussdiagrammworkflows
Dieses Thema gilt für Windows Workflow Foundation 4.
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 mit einer Auflistung von Flussknoten, die vom FlowNode erben. Flussknoten können untergeordnete Aktivitäten für eine Ausführung enthalten sowie eine direkte Ausführung von anderen Flussknoten.
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 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 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>
<Read Result = "[result]"/>
<FlowStep.Next>
<FlowStep>
<Write 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 ein WorkflowElement festgelegt, das 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-Knoten verwendet. Die Expression-Eigenschaft wird auf ein WorkflowElement’1 mit dem Typparameter Object festgelegt, das die Werte definiert, mit denen die Optionen 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 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-Element verwendet.
<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>