- L’objectif de ce tutoriel est d’utiliser le workflow de machine d’états dans le but de simuler une opération d’embauche
- Chaque candidat passe un examen technique où il a une note de 1 à 5
- S’il a une note inférieure à 3, sa candidature est rejetée
- S’il a une note supérieure ou égale à 3 il passe un entretien où il a une évaluation de 1 à 5
- Une note supérieure à 3 conduit à l’acceptation de sa demande
- Une note inférieure à 3 rejette sa candidature
- Une note égale à 3 le pousse à faire un deuxième examen technique où il est évalué une deuxième fois
- Dans le deuxième examen, s’il a une note supérieure à 3, sa candidature est acceptée sinon sa candidature est rejetée
Nous utiliserons une application WPF pour héberger et exécuter le workflow
Etape 1 – Création de la solution
- Lancez VS 2013
- Créez une application WPF appelée « Tutoriel32UI »
- Fermez les fenêtres « MainWindow » que nous modifierons ultérieurement
- A la solution ajoutez un nouveau projet de type « Bibliothèque d’Activite »
- Donnez le nom « EmbaucheLibrary » à ce projet
- A partir de l’explorateur de solution, supprimez l’activité « Activity1.xaml »
Etape 2 : Création de l’activité « AttendreReponse »
L’objectif de cette étape est de créer une activité qui utilise les signets pour attendre une action de l’extérieur. Nous nous inspirerons de l’activité « AttendreReponse » que nous avons créée lors du tutoriel 3.1.
- Créez dans la bibliothèque une activité de code appelée « AttendreReponse »
- Faites un copier-coller à partir du code de la classe « AttendreReponse » du tutoriel précédent.
- Le code doit être comme ceci
public sealed class AttendreReponse<T> : NativeActivity<T>
{
public string Destinataire { get; set; }
public string NomSignet { get; set; }
protected override void Execute(NativeActivityContext context)
{
Console.WriteLine("Création du signet {0} - destinataire : {1}", NomSignet, Destinataire);
context.CreateBookmark(NomSignet, new BookmarkCallback(SignetCallback));
}
private void SignetCallback(NativeActivityContext context, Bookmark bk, object valeur)
{
if (valeur != null)
Result.Set(context, valeur);
}
protected override bool CanInduceIdle
{
get
{
return true;
}
}
}
- Compilez pour vérifier qu’il n’y a pas d’erreur.
Etape 3: Création du workflow
L’objectif de cette étape est de créer le workflow d’état machine dans le but de modéliser le processus d’embauche.
- Dans le projet « EmbaucheLibrary » ajoutez une activité appelée « EmbaucheWorkflow »
- Faites glisser une machine d’état sur la nouvelle activité
- Remarquez que le workflow contient un état appelé « State1 ». Renommez-le en « Initial »
- Faites glisser deux états (State) et nommez-les « Evaluation Technique » et « Entretien Oral »
- Ajoutez deux états finaux appelés « Accepté » et « Rejeté »
- Double-cliquez sur l’état « Inital »
- Remarquez qu’il y a une zone « Entry » et une zone « Exit ». C’est le activité à exécuter lorsqu’on entre ou on sort de l’état.
- Glissez une activité « WriteLine » dans chacune des deux zones
- Entrez « entré en état initial » et « sorti de l’état initial »
- Répétez ça avec chaque état (pas les états finaux) du workflow en utilisant le nom de l’état.
- Double-cliquez sur l’état final « Accepté »
- Remarquez qu’il y a uniquement la zone d’entrée, pas la zone de sortie.
- Glissez une activité « WriteLine » sur l’état
- Entrez « Candidature acceptée » dans la propriété « Text »
De la même façon, insérez un WriteLine avec « candidature rejetée » pour l’état « Rejeté »
- Ajoutez au workflow deux variables : « eval » de type « Int32 » qui donne l’évaluation en cours et « oral » de type « Boolean » avec une valeur par défaut « false » qui indique si l’évaluation orale a eu lieu ou pas.
- Faites glissez une transition de l’état « Initial » vers l’état « Evaluation Technique »
- Remarquez que le designer donne automatiquement le label « T1 » à la transition
- Cliquez sur la transition
- Changez son nom de « T1 » vers « Passage auto »
- Faites glisser une transition de « Evaluation Technique » vers « Entretien Oral » et nommez-la « PT-Oral »
- Double-cliquez sur la transition
- La zone déclencheur attend un évènement de l’extérieur et peut utiliser les signets
- La zone action définit les activités à exécuter lors de la transtion
- La zone condition spécifie la condition qui doit être satisfaite pour que la transition s’exécute
- Faites glissez une activité « AttendreReponse » et choisissez le type « Int32 »
- Dans la propriété « Destinataire » entrez « Comité Technique »
- Dans la zone « NomSignet », entrez « signetTechnique »
- Dans la zone « Result » entrez « eval »
- Pour qu’on passe de l’évaluation technque à l’entretien oral, il faut que ça soit le premier exame avec une évaluation d’au moins 3. Entrez l’expression suivante dans la condition :
(oral == false) && (eval >= 3)
- Cependant, à partir de l’état « Evaluation Technique », on ne va pas forcément à l’état « Entretien Oral ». On peut aller vers l’état « Rejeté » si l’évaluation est inférieure à 3 sinon à « Accepté » si c’est la deuxième évaluation et que la note est supérieure ou égal à 3.
- Cliquez sur « Ajoutez une Transition Partagée »
- Sélectionnez l’état « Rejeté »
- Dans la nouvelle transition créée (par défaut T1), entrez la condition suivante :
- Ajoutez une autre transition partagée qui va vers l’état « Accepté »
- Entrez la condition suivante :
(oral == true) && (eval >=3)
- Renommez la transition de « Evaluation Technique » vers rejeté « PT-Rejeté »
- Renommez la transition de « Evaluation Technique » vers rejeté « PT-Accepté»
- Le workflow devrait ressembler à ceci :
- Ajoutez une transition allant de « Entretien Oral » vers « Evaluation Technique »
- Appelez-la « PO-Technique »
- Dans la zone déclencheur, ajoutez « AttendreReponse » avec le type « Int32 »
- Dans la propriété « Destinataire », entrez « Commission orale »
- Dans la propriété « NomSignet », entrez « signetOral »
- Dans la propriété « Result », entrez « eval »
- A partir de l’entretien oral, on va vers l’entretien technique si on une note de 3
- Entrez l’expression suivante dans la condition
- Glissez une activité « Assign » dans la zone « Action »
- Affectez « true » à la variable « oral »
- Pour aller vers l’état « Accepté », il faut une évaluation supérieure à 3
- Ajoutez une transition partagée vers l’état « Accepté » avec la condition suivante :
- Ajoutez une transition partagée vers l’état « Rejet » avec la condition « eval < 3 »
- Ouvrez le workflow parent
- Renommez la transition de « Entretien Oral » vers « Accepté » en « PO-Accepté »
- Renommez la transition de « Entretien Oral » vers « Rejeté » en « PO-Rejeté»
- Le workflow global devrait être comme ceci :
Cliquez ici pour accéder à la deuxième partie du tutoriel.