L’objectif de ce tutoriel, relatif au cours 2, est de manipuler d’autres activités prédéfinies de WF4.5 telles que les activités de contrôle de flux. Le scénario à utiliser est d’abord de créer un workflow permettant de trier une liste de nombres.
Etape 1 : Création d’un workflow de tri d’une liste de nombres
L’objectif de cette étape est de manipuler les activités de contrôle de flux telles que les « If », «While » ou « Sequence ».
- Lancer VS 2012
- Cliquez sur « Fichier à Nouveau à Projet »
- Choisissez le template « Application Console Workflow »
- Appelez la solution « Tutoriel22 »
- A partir de l’explorateur de solution, supprimez « workflow1.xaml »
- Dans l’explorateur de solutions, cliquez avec le bouton droit sur le projet puis choisissez « Ajoutez Nouvel Element »
- Dans la cataégorie, choisissez « Workflow »
- Choisissez le modèle « Activity » puis entrez « TriActivite » dans la zone « Nom »
- Cliquez sur « Ajouter »
- Remarquez un workflow vierge en mode designer
- En bas du designer, cliquez sur « Arguments »
- Ajoutez un argument appelé « liste »
- Dans la zone « Direction », choisissez « entrée / sortie »
- Dans la zone « type », cliquez sur « Parcourir »
- Sélectionnez le type générique IList<Int32>
- Cliquez sur « Ok »
- La liste des arguments devrait être comme la liste ci-dessous
- Faites glisser une activité « While » sur le designer
- Dans la propriété « DisplayName », entrez « Boucle supérieure »
- La propriété « DisplayName » permet de faciliter la gestion d’un workflow en différenciant entre les activités de même type
- Cliquez avec le bouton droit sur la boucle puis cliquz sur « Créer une variable »
- Créer une variable « i » de type « Int32 » dont la portée est « Première boucle » avec une valeur par défaut de 0
- Dans la condition de la boucle, entrez i < liste.Count
- Faites glisser une séquence à l’intérieur de la boucle
- Donnez le nom « Séquence première boucle » à cette séquence
- Cliquez une variable sur cette séquence appelée « j » et dont le type est de « In32 »
- Double-cliquez sur la séquence, remarquez comment le designer met le focus dessus pour faciliter la création du workflow. Pour revenir au parent (la boucle), il faut utiliser le menu en haut du designer
- Faites glisser une activité « Assign » à l’intérieur de la séquence
- Affectez la valeur de « i+1 » à la variable « j »
- Ajoutez une boucle « While » juste en dessous de « Assign » et donnez lui le nom de « deuxième boucle »
- Entrez « j < liste.Count » comme condition de la deuxième boucle
- Double-cliquez sur la deuxième boucle pour la mettre en évidence dans le designer
- Créez une variable sur la deuxième boucle appelée « temp » de type « Int32 »
- Faites glisser une séquence à l’intérieur de la deuxième boucle
- Faites glisser une instruction conditionnelle « If » à l’intérieur de la séquence
- Dans la condition du « If », entrez « liste[i] > liste[j] »
- Faites glisser une séquence dans la zone « Then » de l’instruction conditionnelle
- Faites glisser trois activités « Assign » à l’ intérieur de cette séquence
- Le premier « Assign » affecte « liste[i] » à « temp »
- Le deuxième « Assign » affecte « liste[j] » à « liste[i] »
- Le dernier « Assign » affecte « temp » à « liste[j] »
- Après le « If » ajoutez un assign qui incrémente le « j »
- Revenez à la séquence de la première boucle
- Ajoutez un « Assign » qui incrémente la variable « i »
Etape 2 : Exécution du tri
L’objectif de cette étape est d’invoquer le workflow à partir de la console en lui fournissant une liste en entrée. Nous allons voir comment cette liste est triée par le workflow.
- Ouvrez « Program.cs »
- Ajoutez un using sur « using System.Collections.Generic » qui nous permettra d’utiliser les listes et les dictionnaires.
using System.Collections.Generic;
- Créez une liste d’entiers et mettez-y des valeurs de votre choix
- Exécutez le workflow en passant la liste comme paramètre d’entrée
- Parcourez la liste après exécution pour voir le résultat
var liste = new List<int>();
liste.Add(25);
liste.Add(12);
liste.Add(14);
Activity w1 = new TriActivite();
Dictionary<string, object> data = new Dictionary<string, object>();
data.Add("liste", liste);
WorkflowInvoker.Invoke(w1, data);
foreach (var l in liste)
Console.WriteLine(l);
Console.ReadKey();
Vous pouvez obtenir le code en suivant le lien : http://1drv.ms/1rOtNFY.
Enjoy !