Mostefai Mohammed Amine

Software and Cloud Architect

Amine
  • Contact
Previous Post
Next Post
Sep 06, 2015 Worfklow Foundation.NET Programming

Workflow Foundation Cours 4–Tutoriel 4.2 Suivi

L’objectif de ce tutoriel est de mettre en place le suivi des workflows. Pour ce, nous utiliserons l’implémentation standard « ETWTrackingParticipant » qui écrit les évènements sur le journal des évènements. Nous ajoutons aussi une implémentation personnalisée qui écrit les évènements sur la console.

Etape 1 – Ouverture de la solution.

L’objectif de dupliquer la solution créée dans le tutoriel 4.1.

  • Accédez au répertoire contenant la solution du tutoriel 4.1
  • Dupliquez le répertoire pour ne pas perdre les résultats du tutoriel précédent.
  • Renommez le nouveau répertoire « Tutoriel42 »
  • Ouvrez la solution dans Visual Studio

Etape 2 : Préparation de l’observateur d’évènements

L’objectif de cette étape est de préparer l’observateur d’évènements de façon à ce qu’il reçoive les enregistrements émis par les trackers.

  • A partir du menu démarrer, lancez l’observateur d’évènements.
  • Dans le menu « Affichage », cliquez sur « Afficher les journaux de débogage et d’analyse »
  • Ouvrez le nœud « Journaux des applications et des services » à « Microsoft » à « Windows » « Application Server-Applications »
  • Remarquez la présence du journal « Analytique »
  • Cliquez avec le bouton droit sur le journal puis cliquez sur « Activer le journal »

image

  • Dans Visual Studio, ouvrez le fichier « MainWindow.xaml.cs »
  • Modifiez la méthode « ConfigurerApplication » de façon à créer un « Tracker » qui suit les états des activités.
  • La création du tracker doit se faire comme ceci :
// créer le tracker
          var tracker = new EtwTrackingParticipant()
          {
              TrackingProfile = new TrackingProfile()
              {
                  Name = "Formation WF",
                  Queries = {
                      new ActivityStateQuery()
                      {
                          States = {"*"}
                      }
                  }
              }
          };
  • Le tracker créé avec un profil appelé « Formation WF » et une requête sur tous les états
  • L’étape suivante doit être d’ajouter le tracker aux extensions
// ajouter le tracker aux extensions
app.Extensions.Add(tracker);
  • Le listing complet de la méthode « ConfigurerApplication » doit être comme ceci :
/// <summary>
      /// configure l'application
      /// </summary>
      /// <param name="app"></param>
      /// <param name="NomCandidat"></param>
      private void ConfigurerApplication(WorkflowApplication app, string NomCandidat = null)
      {
          // affecter le store
          app.InstanceStore = _store;
          // ajouter l'extension pour pouvoir persister le dossier du candidat
          app.Extensions.Add(new CandidatParticipant() { Nom = NomCandidat });
          // créer le tracker
          var tracker = new EtwTrackingParticipant()
          {
              TrackingProfile = new TrackingProfile()
              {
                  Name = "Formation WF",
                  Queries = {
                      new ActivityStateQuery()
                      {
                          States = {"*"}
                      }
                  }
              }
          };
 
          // ajouter le tracker aux extensions
          app.Extensions.Add(tracker);
        
          // évènement à déclencher lorsque le workflow est en mode veille
          app.Idle = delegate(WorkflowApplicationIdleEventArgs args)
          {
              var signet = args.Bookmarks.FirstOrDefault();
              if (signet == null)
                  return;
              DesactiverBoutons();
              switch (signet.BookmarkName)
              {
                  case "EvaluationTechnique":
                      ActiverBouton(btnTechnique, true);
                      break;
                  case "EvaluationOrale":
                      ActiverBouton(btnOral, true);
                      break;
              }
          };
 
          // évènement se déclenchant avant la persistance
          app.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs args)
          {
              Console.WriteLine("Workflow {0} va être persisté", args.InstanceId);
              return PersistableIdleAction.Unload;
          };
 
          // affiche un message lorsque le workflow est déchargé
          app.Unloaded += delegate(WorkflowApplicationEventArgs args)
          {
              Console.WriteLine("Workflow {0} déchargé", args.InstanceId);
          };
 
          // se déclenche lorsque le workflow se termine
          app.Completed += delegate(WorkflowApplicationCompletedEventArgs args)
          {
              var extensions = args.GetInstanceExtensions<CandidatParticipant>();
              var dossier = extensions.First();
              Console.WriteLine("Workflow {0} terminé avec statut {1}", args.InstanceId, args.CompletionState);
              Console.WriteLine("L'opération d'embauche du dossier {0} a été terminée avec une moyenne de {1}", dossier.Nom, args.Outputs["moyenne"]);
              DesactiverBoutons();
              // supprimer le workflow de la liste
              cbWorkflows.Dispatcher.Invoke(new Action(() => _liste.Remove(args.InstanceId)));
 
          };
      }
  • Exécutez l’application et créez quelques candidatures
  • Revenez à l’observateur d’évènements et accédez aux évènements émis par le workflow

image

 

Etape 2 : Création d’un tracker personnalisé

L’objectif de cette étape est de créer un tracker personnalisé qui affiche les enregistrements en mode console.

  • Ajoutez un using sur « System.Activities.Tracking »
  • Ajoutez une nouvelle classe publique à la bibliothèque « EmbaucheLibrary » appelée « ConsoleTrackingParticipant » et qui hérite de la classe « TrackingParticipant »
  • Redéfinissez la méthode « Track » de façon à ce qu���elle affiche l’enregistrement sur la console :
if (record != null)
    Console.WriteLine(record);
  • Dans la méthode « ConfigurerApplication », changez le type de la variable « tracker » de « EtwTrackingParticipant » vers « ConsoleTrackingParticipant »
  • Le listing complet de la classe « ConsoleTrackingParticipant » est comme ceci :
public class ConsoleTrackingParticipant : TrackingParticipant
    {
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            if (record != null)
                Console.WriteLine(record);
        }
    }
  • Exécutez l’application pour voir les enregistrements en mode console

image

Code Source

Le code source est accessible ici.

Workflowworkflow foundation.NET FrameworkTrackingService
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 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...
  • Workflow Foundation Cours 4–Tutoriel 4.2 Suivi L’objectif de ce tutoriel est de mettre en place le suivi des workflows. Pour ce, nous utiliserons l...
Saving the comment

Cancel reply to comment

The captcha value you provided is incorrect.