Les activités conditionnelles sous WF

N'hésitez pas à commenter cet article ! Commentez Donner une note à l'article (5)

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

0. Introduction

WF est livré avec 4 types d'activité, qui vont vous permettre d'emprunter des chemins différents (et donc de modifier en conséquence la sortie de votre workflow) en fonction de l'évaluation d'une condition, il s'agit des activités :

  • IfElse
  • While
  • CAG
  • Replicator

I. L'activité IfElse

L'activité IfElse, qui par défaut va contenir 2 branches ; une branche Then et une branche Else. On pourra très facilement rajouter de nouvelle branche et donc de cette façon imbriquer les tests. Retenons cependant qu'une seule branche sera empruntée par notre chemin d'exécution, il s'agit de la 1ere branche évaluée à true.

De même, toutes les branches, à l'exception de la dernière, doivent contenir une condition, la dernière étant exécutée si toutes les autres évaluations de condition ont échoués.

image

Pour positionner la condition, nous avons le choix dans le concepteur entre une condition de code, et une règle

image

Si nous utilisons une condition de code, nous devons ensuite renseigner le nom de la méthode à appeler pour gérer l'évaluation de la condition et le résultat de l'évaluation devra être positionné sur la propriété Result comme ci-dessous.

 
Sélectionnez
private void EvaluateConditon(object sender, ConditionalEventArgs e) {
  //Code d'évaluation Result à true si la conditon est vrai, sinon false.
  e.Result = true;
}

En ce qui concerne la méthode utilisant les règles, vous avez à votre disposition un éditeur implémentant l'IntelliSense ; il ne vous reste plus qu'à définir une propriété/un champ booléen dans votre code et de l'évaluer dans la règle.

image

II. L'activité While

L'activité While quant à elle va nous permettre d'exécuter une boucle tant qu'une condition sera vraie.

Cette activité ne peut contenir qu'une seule activité enfant ; cependant, si vous souhaitez exécuter plusieurs activités, vous pouvez toujours utiliser soit une activité Sequence et vous en servir comme conteneur, soit une activité Parallele qui vous permettra d'exécuter plusieurs taches en parallèle.

image
image


La condition se négocie de la même façon avec une activité IfElse.

III. L'activité CAG

Pour modéliser une activité CAG (Condition Activity Group), on pourrait prendre une condition While, dans laquelle on insère une activité Parallele, et dans chacune des branches de l'activité Parallele, on insère une activité IfElse.

image

En effet, une activité CAG va contenir une ou plusieurs activités parallèles qui pourront s'exécuter en parallèle.

image

Chacune de ces activités enfant pourra s'exécuter à condition que la condition « When » (d'où l'activité IfElse dans chacune des activités enfant de l'activité Parallele) positionné à leur niveau soit évaluée à « true »

image

De même, l'activité CAG s'exécutera indéfiniment tant que au moins l'une de ses activités enfant aura sa condition When positionné à true, ou alors si vous positionnez explicitement la condition « Until » à true au niveau du CAG lui-même (d'où l'activité While.).

image

IV. L'activité Replicator

Passons maintenant à l'activité Replicator. Cette dernière va accepter une activité enfant, se baser sur une collection IList et exécuter son activité enfant autant de fois que la collection contient d'élément, puis s'arrêter, à moins que vous ne fassiez jouer la condition Until comme avec l'activité CAG.

Prenons un exemple simple et partons du workflow ci-dessous, un Replicator contenant une activité Code.

image

Pour configurer notre Replicator, nous avons donc besoin d'une collection IList ; créons-la, puis initialisons-la dans le constructeur de notre classe.

 
Sélectionnez
public List<int> Numbers;
public Workflow1() {
  InitializeComponent();
  Numbers = new List<int>();
  for (int i = 0; i < 10; i++) Numbers.Add(i);
}

Maintenant, il nous faut lier notre Replicator et notre List ; pour cela, il suffit de positionner la propriété InitialChildData. De même, toutes nos instances enfants peuvent être exécutées soit séquentiellement, soit en parallèle en fonction de ce que nous souhaitons réaliser, à nous de le définir en positionnant la propriété ExecutionType.

image

A partir de maintenant, notre workflow est fonctionnel !

Cependant, il pourrait également être intéressant de faire communiquer notre Replicator et sa CodeActivity enfant, qu'en pensez-vous ?

Pour cela, nous allons utiliser les propriétés :

  • Initialized, qui s'exécute juste après l'initialisation du Replicator
  • ChildInitialized, qui s'exécute juste après l'initialisation de l'activité enfant
  • ChildCompleted, qui s'exécute juste après l'activité enfant
  • Completed, qui s'exécute juste après la fin d'un loop.

Toujours avec notre exemple simpliste, nous allons par exemple récupérer la valeur de l'objet courant de notre collection depuis notre CodeActivity.

Pour cela, nous allons utiliser la propriété ChildInitialized, en lui affectant une valeur ChildInitialize

Et ensuite dans notre code, nous allons rajouter le code suivant :

 
Sélectionnez
int step = -1;
private void ChildInitialize(object sender, ReplicatorChildEventArgs e) {
  step = (int)e.InstanceData;
}
private void ExecuteCode(object sender, EventArgs e) {
  Console.WriteLine("Activité Code exécutée. Etape {0}", step);
}

Voici la sortie que nous obtenons.

image

V. Conclusion

Nous avons pu voir au travers de cet article que WF permettait de construire des scénarios riches et variés en nous fournissant diverses implémentations de nos conditions.

J'espère que cet article vous aidera à choisir celle qui correspond le plus à vos besoins.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2008 Dieudonné N'Tamack. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.