Tutoriel 3.2 : Workflow Machine d’états–Partie 1

 

  • 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

image

 

  • 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é »
image

 

  • 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 »
image

 

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

image

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 »

image

  • Faites glisser une transition de « Evaluation Technique » vers « Entretien Oral » et nommez-la « PT-Oral »
  • Double-cliquez sur la transition

image

 

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

image

  • 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 :
eval < 3

image

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

image

  • 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
eval == 3
  • 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 :
eval > 3
  • Ajoutez une transition partagée vers l’état « Rejet » avec la condition « eval < 3 »

image

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

image

Cliquez ici pour accéder à la deuxième partie du tutoriel.

Add comment

Loading