Flussi di lavoro del diagramma di flusso
Un diagramma di flusso è un paradigma noto per la progettazione di programmi. L'attività Flowchart viene generalmente usata per implementare i flussi di lavoro non sequenziali, tuttavia può essere sfruttata anche per i flussi di lavoro sequenziali se non viene usato alcun nodo FlowDecision
.
Struttura del flusso di lavoro del diagramma di flusso
Un'attività diagramma di flusso contiene una raccolta di attività da eseguire. I diagrammi di flusso contengono gli elementi di controllo del flusso, come FlowDecision e FlowSwitch<T>, che dirigono l'esecuzione tra le attività contenute in base ai valori delle variabili.
Tipi di nodi di flusso
Vengono usati tipi diversi di elementi a seconda del tipo di controllo del flusso richiesto quando l'elemento viene eseguito. I tipi di elementi del diagramma di flusso includono:
FlowStep
: modella un passaggio di esecuzione nel diagramma di flusso.FlowDecision
: crea un ramo dell'esecuzione in base a una condizione Boolean, simile all'oggetto If.FlowSwitch
: crea un ramo dell'esecuzione in base a un'opzione esclusiva, simile all'oggetto Switch<T>.
Ogni collegamento dispone di una proprietà Action
che definisce un oggetto ActivityAction che può essere usato per eseguire le attività figlio e una o più proprietà Next
che definiscono quali elementi eseguire al termine dell'esecuzione dell'elemento corrente.
Creazione di una sequenza di attività di base con un nodo FlowStep
Per modellare una sequenza di base in cui vengono eseguite a loro volta due attività, viene usato l'elemento FlowStep
. Nell'esempio seguente vengono usati due elementi FlowStep
per eseguire due attività in sequenza.
<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>
Creazione di un diagramma di flusso condizionale con un nodo FlowDecision
Per modellare un nodo del flusso condizionale in un flusso di lavoro del diagramma di flusso (ovvero per creare un collegamento che funziona come simbolo di decisione di un diagramma di flusso tradizionale), viene usato un nodo FlowDecision. La proprietà Condition del nodo è impostata su un'espressione che definisce la condizione e le proprietà True e False sono impostate sulle istanze di FlowNode da eseguire se l'espressione restituisce true
o false
. Nell'esempio seguente viene illustrato come definire un flusso di lavoro che usa un nodo 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>
Creazione di un'opzione esclusiva con un nodo FlowSwitch
Per modellare un diagramma di flusso in cui un percorso esclusivo viene selezionato in base a un valore corrispondente viene usato il nodo FlowSwitch<T>. La proprietà Expression è impostata su Activity<TResult> con un parametro di tipo di Object che definisce il valore con cui confrontare le scelte. La proprietà Cases definisce un dizionario di chiavi e oggetti FlowNode da confrontare con l'espressione condizionale e un set di oggetti FlowNode che definiscono come l'esecuzione deve proseguire se il dato caso corrisponde all'espressione condizionale. L'oggetto FlowSwitch<T> definisce anche una proprietà Default che definisce il flusso dell'esecuzione se nessun caso corrisponde all'espressione della condizione. Nell'esempio seguente viene illustrato come definire un flusso di lavoro che usa un elemento FlowSwitch<T>.
<Flowchart>
<FlowSwitch>
<FlowStep x:Key="Red">
<WriteRed/>
</FlowStep>
<FlowStep x:Key="Blue">
<WriteBlue/>
</FlowStep>
<FlowStep x:Key="Green">
<WriteGreen/>
</FlowStep>
</FlowSwitch>
</Flowchart>