Workflows d'organigramme

Un organigramme est un paradigme connu pour la conception de programmes. L'activité Organigramme est généralement utilisée pour implémenter des workflows non séquentiels, mais elle peut être utilisée pour les workflows séquentiels en l'absence de nœud FlowDecision.

Structure du workflow Flowchart

Une activité Flowchart est une activité qui contient une collection d'activités à exécuter. Les organigrammes contiennent également des éléments de contrôle de flux tels que FlowDecision et FlowSwitch<T> qui dirigent l'exécution entre les activités contenues en fonction des valeurs des variables.

Types de nœuds de flux

Les types d'éléments utilisés varient en fonction du type de contrôle de flux requis lors de l'exécution d'un élément. Les types d'éléments d'organigramme sont les suivants :

  • FlowStep- Modélise une seule étape d'exécution dans l'organigramme.

  • FlowDecision- Lie l'exécution à une condition booléenne, semblable à If.

  • FlowSwitch – Lie l'exécution à un commutateur exclusif, semblable à Switch<T>.

Chaque lien a une propriété Action qui définit un ActivityAction à utiliser pour exécuter des activités enfants, et une ou plusieurs propriétés Next qui définissent l'élément ou les éléments à exécuter à la fin de l'exécution de l'élément actuel.

Création d’une séquence d’activités de base avec un nœud FlowStep

Pour modéliser une séquence de base dans laquelle deux activités s'exécutent l'une après l'autre, l'élément FlowStep est utilisé. Dans l'exemple suivant, deux éléments FlowStep sont utilisés pour exécuter deux activités dans l'ordre indiqué.

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

Création d’un organigramme conditionnel avec un nœud FlowDecision

Pour modéliser un nœud de flux conditionnel dans un workflow d'organigramme (autrement dit, créer un lien qui fonctionne comme le symbole de décision d'un organigramme classique), un nœud FlowDecision est utilisé. La propriété Condition du nœud est définie sur une expression qui détermine la condition, et les propriétés True et False sont définies sur les instances FlowNode à exécuter si l'expression a la valeur true ou false. L'exemple suivant indique comment définir un workflow qui utilise un nœud 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>

Création d’un commutateur exclusif avec un nœud FlowSwitch

Pour modéliser un organigramme dans lequel un chemin d’accès exclusif est sélectionné selon une valeur correspondante, le nœud FlowSwitch<T> est utilisé. La propriété Expression est définie sur un élément Activity<TResult> avec un paramètre de type Object qui détermine la valeur de correspondance. La propriété Cases définit un dictionnaire de clés et d'objets FlowNode à mettre en correspondance avec l'expression conditionnelle, ainsi qu'un jeu d'objets FlowNode qui détermine le flux de l'exécution si une correspondance est établie avec l'expression conditionnelle. FlowSwitch<T> définit également une propriété Default qui détermine le flux de l'exécution si aucune correspondance n'est établie avec l'expression conditionnelle. L'exemple suivant montre comment définir un workflow qui utilise un élément FlowSwitch<T>.

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