Partager via


Query Using SQLTrackingService, exemple

Download sample

Cet exemple illustre l'utilisation du service de suivi SQL fourni par Windows Workflow Foundation afin de suivre l'exécution d'un workflow.

L'exécution d'un workflow déclenche certains événements. Le service de suivi peut intercepter ces événements et stocker des informations les concernant dans une base de données SQL Server.

L'exécution de workflow déclenche les types suivants d'événements :

  • Événements au niveau de l'instance de workflow. Ces événements sont déclenchés lorsqu'une instance de workflow passe dans un état particulier. Par exemple, un événement est déclenché lorsque l'instance de workflow est initialisée ou exécutée.

  • Événements au niveau de l'activité. Un workflow se compose d'activités, et chaque activité suit un cycle de vie. Pendant son cycle de vie, l'activité passe par plusieurs états. Un événement est déclenché lorsqu'une activité atteint un état particulier.

  • Événements suivis par un utilisateur. Un auteur de workflow peut créer des événements de suivi personnalisés et les ajouter au code-beside du workflow.

Les données du contexte des données du workflow peuvent être émises et transmises au service de suivi avec les événements.

Lorsque vous suivez un workflow, vous n'êtes pas forcément intéressé par tous les événements pour tous les états et activités. Vous pouvez créer un profil de suivi pour spécifier les événements qui vous intéressent.

NoteRemarque :

La valeur horaire dans les données de suivi est exprimée en temps universel coordonné (GMT).

Création du profil de suivi personnalisé

L'exemple illustre la création d'un profil de suivi personnalisé. Ce profil est inséré dans la base de données de suivi SQL pour suivre les événements spécifiés. Le profil de suivi est créé à l'aide du modèle objet de profil de suivi.

Le modèle objet de profil de suivi fournit un jeu de classes qui facilite la création du point de suivi d'instance (WorkflowTrackPoint), des points de suivi d'activité (ActivityTrackPoint) et des trackpoints utilisateur (UserTrackPoint). Chaque point de suivi contient également un jeu d'emplacements correspondants (WorkflowTrackingLocation, ActivityTrackingLocation et UserTrackingLocation). Un emplacement correspondant décrit l'événement à suivre (lequel est différent selon qu'il s'agit d'un trackpoint d'instance ou d'un trackpoint d'activité) et l'activité (ou le workflow dans le cas d'un trackpoint d'instance) à suivre.

Les données à extraire peuvent également être spécifiées dans le trackpoint. Dans cet exemple, aucun extrait de données n'a été spécifié.

Utilisez le code suivant pour créer le profil de suivi :

TrackingProfile profile = new TrackingProfile();
ActivityTrackPoint trackPoint = new ActivityTrackPoint();
ActivityTrackingLocation trackingLocation = new ActivityTrackingLocation(typeof(Activity));
trackingLocation.MatchDerivedTypes = true;

foreach (ActivityExecutionStatus status in Enum.GetValues(typeof(ActivityExecutionStatus)))
{
    trackingLocation.ExecutionStatusEvents.Add(status);
}

trackPoint.MatchingLocations.Add(trackingLocation);
profile.ActivityTrackPoints.Add(trackPoint);
profile.Version = new Version("3.0.0.0");

WorkflowTrackPoint wTrackPoint = new WorkflowTrackPoint();
WorkflowTrackingLocation wLocation = new WorkflowTrackingLocation();

foreach (TrackingWorkflowEvent wEvent in Enum.GetValues(typeof(TrackingWorkflowEvent)))
{
    wLocation.Events.Add(wEvent);
}

wTrackPoint.MatchingLocation = wLocation;
profile.WorkflowTrackPoints.Add(wTrackPoint);

TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder(),CultureInfo.InvariantCulture);
serializer.Serialize(writer, profile);
String trackingprofile = writer.ToString();

Dans l'exemple de code précédent, les quatre dernières lignes indiquent comment le profil de suivi peut être sérialisé au format XML ; le profil de suivi est ensuite ajouté à la base de données à l'aide de la procédure stockée UpdateTrackingProfile.

Une fois le profil de suivi sérialisé, il se présente comme suit :

<?xml version="1.0" encoding="utf-16" standalone="yes"?>

<TrackingProfile xmlns="https://schemas.microsoft.com/winfx/2006/workflow/trackingprofile" version="3.0.0.0">

<TrackPoints>

<WorkflowTrackPoint>

<MatchingLocation>

<WorkflowTrackingLocation>

<TrackingWorkflowEvents>

<TrackingWorkflowEvent>Created</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Completed</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Idle</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Suspended</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Resumed</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Persisted</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Unloaded</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Loaded</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Exception</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Terminated</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Aborted</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Changed</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Started</TrackingWorkflowEvent>

</TrackingWorkflowEvents>

</WorkflowTrackingLocation>

</MatchingLocation>

</WorkflowTrackPoint>

<ActivityTrackPoint>

<MatchingLocations>

<ActivityTrackingLocation>

<Activity>

<Type>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<ExecutionStatusEvents>

<ExecutionStatus>Initialized</ExecutionStatus>

<ExecutionStatus>Executing</ExecutionStatus>

<ExecutionStatus>Canceling</ExecutionStatus>

<ExecutionStatus>Closed</ExecutionStatus>

<ExecutionStatus>Compensating</ExecutionStatus>

<ExecutionStatus>Faulting</ExecutionStatus>

</ExecutionStatusEvents>

</ActivityTrackingLocation>

</MatchingLocations>

</ActivityTrackPoint>

</TrackPoints>

</TrackingProfile>

Le profil de suivi est créé à l'aide du schéma de profil de suivi.

Insertion du profil de suivi dans la base de données de suivi SQL

Le profil de suivi est inséré dans la base de données de profils de suivi à l'aide de la procédure stockée UpdateTrackingProfile. La procédure stockée stocke le profil pour un type de workflow particulier. Lorsque l'exécution demande au service de suivi un profil pour le type, le service de suivi retourne ce profil personnalisé à la place du profil par défaut.

Inscription du service de suivi avec l'hôte de workflow

Utilisez le code suivant pour inscrire un service de suivi avec l'exécution de workflow :

WorkflowRuntime wRuntime = new WorkflowRuntime();
wRuntime.AddService(new SqlTrackingService(connectionString));
wRuntime.StartRuntime();

La deuxième ligne inscrit le service de suivi SQL avec l'exécution de workflow. La chaîne de connexion est celle de la base de données de suivi.

Récupération des informations de suivi

Une fois que les informations de suivi ont été enregistrées dans la base de données, elles peuvent être récupérées à l'aide d'un objet SqlTrackingQuery, avec la méthode TryGetWorkflow.

Création de la base de données de suivi

Les services SQL installés par Windows Workflow Foundation utilisent Microsoft SQL Server pour stocker des informations. Vous pouvez utiliser Microsoft SQL Server 2005 Express, SQL Server 2000 et versions ultérieures ou SQL Server 2000 Desktop Engine (MSDE) pour ces tâches.

Windows Workflow Foundation Setup n'installe pas les bases de données requises par ces services ; toutefois, il installe les scripts SQL pour créer et configurer les bases de données pour ces services.

Pour créer la base de données de suivi SQL

  1. À l'aide de Microsoft SQL Server 2005 Express, SQL Server 2000 et versions ultérieures ou SQL Server 2000 Desktop Engine (MSDE), créez une base de données nommée Tracking avec l'instruction de requête SQL :

    CREATE DATABASE Tracking

    Remarque   lors de l'utilisation simultanée de SqlTrackingService et de SqlWorkflowPersistenceService dans une application de workflow, il est recommandé d'utiliser une base de données unique à la fois pour la persistance et le suivi.

  2. Dans l'espace de travail de l'Analyseur de requêtes SQL, sélectionnez la base de données que vous avez créée à l'étape 1 dans la liste des bases de données disponibles.

  3. Dans le menu Fichier, cliquez sur Ouvrir et ouvrez le script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<langue>\Tracking_Schema.sql.

  4. Exécutez la requête en cliquant sur Exécuter ou en appuyant sur la touche F5 pour créer les tables de service de suivi SQL.

  5. Dans le menu Fichier, cliquez sur Ouvrir et ouvrez le script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<langue>\Tracking_Logic.sql.

  6. Exécutez la requête en cliquant sur Exécuter ou en appuyant sur la touche F5 pour créer les procédures stockées de service de suivi SQL.

Pour générer l'exemple

  1. Téléchargez l'exemple en cliquant sur Télécharger l'exemple.

    L'exemple de projet est alors extrait sur votre disque dur local.

  2. Cliquez sur Démarrer, pointez sur Programmes, puis sur Microsoft Windows SDK et cliquez sur Environnement de commande.

  3. Accédez au répertoire source de l'exemple.

  4. À l'invite de commandes, tapez MSBUILD <Nom du fichier solution>.

Pour exécuter l'exemple

  • Dans la fenêtre Invite de commandes du Kit de développement SDK, exécutez le fichier .exe dans le dossier QueryUsingSqlTrackingService\bin\debug (ou le dossier QueryUsingSqlTrackingService\bin pour la version VB de l'exemple), situé sous le dossier principal de l'exemple.

Voir aussi

Référence

SqlTrackingService
SqlTrackingQuery
SqlTrackingWorkflowInstance
ActivityEvents
ActivityTrackingRecord
WorkflowEvents
WorkflowTrackingRecord

Autres ressources

Exemples de suivi
Simple Tracking, exemple
Query Using SQLTrackingService, exemple
Tracking Using User Track Points, exemple
EventArgs Tracking, exemple
ConsoleTrackingService, exemple
RuleActionTrackingEvent, exemple
File Tracking Service and Query, exemple
Using the Tracking Profile Object Model, exemple
Windows Workflow Tracking Services

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.