Mostefai Mohammed Amine

Software and Cloud Architect

Amine
  • Contact
Previous Post
Next Post
Mar 20, 2015 Worfklow Foundation

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.

Workflowworkflow foundationstate machineTutorial
Share This Post

Related posts

  • WF Cours 4–Services Avancés. Tutoriel 4.1 Persistance–Partie 2 Ce tutoriel est la suite de la première partie qui consiste à mettre en place un workflow utilisant ...
  • Tutoriel 3.2 : Workflow Machine d’états–Partie 2 Les étapes contenues dans ce post sans la suite du tutoriel précédent consistant à implémenter un wo
  • Tutoriel 1.1 : Découverte de Workflow Foundation 4.5 L’objectif de ce tutoriel, relatif au premier cours, est de découvrir la structure d’une application...
Saving the comment

Cancel reply to comment

The captcha value you provided is incorrect.