Flujos de trabajo del diagrama de flujo
Un diagrama de flujo es un paradigma conocido para diseñar programas. La actividad Flowchart se usa normalmente para implementar flujos de trabajo no secuenciales, aunque se puede usar para flujos de trabajo secuenciales si no se usa ningún nodo FlowDecision
.
Estructura de flujos de trabajo de los diagramas de flujo
Una actividad de diagrama de flujo es una actividad que contiene una colección de actividades que se ejecutarán. Los diagramas de flujo también contienen elementos de control de flujo como FlowDecision y FlowSwitch<T> que dirigen la ejecución entre las actividades contenidas según los valores de las variables.
Tipos de nodos de flujo
Se usan tipos diferentes de elementos en función del tipo de control de flujo necesario cuando el elemento se ejecuta. Los tipos de elemento del diagrama de flujo incluyen:
FlowStep
: modela un paso de ejecución en el diagrama de flujo.FlowDecision
: la ejecución de bifurcaciones basada en una condición booleana, similar a If.FlowSwitch
: la ejecución de bifurcaciones basada en un modificador exclusivo, similar a Switch<T>.
Cada vínculo tiene una propiedad Action
que define una clase ActivityAction que se puede usar para ejecutar actividades secundarias, además de una o más propiedades Next
que definen qué elemento o elementos ejecutar cuando el elemento actual finalice la ejecución.
Creación de un secuencia de actividad básica con un nodo FlowStep
Para modelar una secuencia básica en la que dos actividades se ejecutan sucesivamente, se usa el elemento FlowStep
. En el siguiente ejemplo, se usan dos elementos FlowStep
para ejecutar dos actividades en secuencia.
<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>
Creación de un diagrama de flujo condicional con un nodo FlowDecision
Para modelar un nodo de flujo condicional en un flujo de trabajo de diagrama de flujo (es decir, para crear un vínculo que funcione como el símbolo de la decisión de un diagrama de flujo tradicional), se usa un nodo FlowDecision. La propiedad Condition del nodo está establecida en una expresión que define la condición. Las propiedades True y False están establecidas en instancias de FlowNode para que se ejecuten si la expresión se evalúa como true
o false
. En el siguiente ejemplo se muestra cómo definir un flujo de trabajo que 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>
Creación de un modificador exclusivo con un nodo FlowSwitch
Para modelar un diagrama de flujo en el que se selecciona una ruta de acceso exclusiva según un valor coincidente, se usa el nodo FlowSwitch<T>. La propiedad Expression se establece en Activity<TResult> con un parámetro de tipo de Object que define el valor con el que se van a hacer coincidir las opciones. La propiedad Cases define un diccionario de claves y objetos FlowNode para hacer coincidir con la expresión condicional, y un conjunto de objetos FlowNode que definen cómo debe fluir la ejecución si el caso especificado coincide con la expresión condicional. FlowSwitch<T> también define una propiedad Default que define a su vez la manera en que debe fluir la ejecución si no hay casos que coincidan con la expresión de la condición. En el siguiente ejemplo se muestra cómo definir un flujo de trabajo que 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>