Tracking Using User Track Points, 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 qui peut être interrogée.

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 et données qui vous intéressent.

Écriture de trackpoints personnalisés

Vous souhaiterez peut-être suivre des données à un point particulier de l'exécution du workflow qui ne font pas l'objet d'un suivi par les événements de suivi. Dans ce cas, vous pouvez utiliser des trackpoints personnalisés. Pour créer un trackpoint personnalisé, servez-vous de la méthode TrackData fournie avec la classe de contexte des données. La méthode TrackData considère un argument d'un objet. Cela signifie que vous pouvez émettre tout type des données que vous souhaitez suivre. Dans le workflow d'exemple, un trackpoint personnalisé est créé dans le gestionnaire de code de l'activité de code.

Création du profil de suivi personnalisé

L'exemple indique comment créer un profil de suivi personnalisé pour suivre le trackpoint utilisateur. 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, des points de suivi d'activité et des trackpoints utilisateur. Chaque point de suivi contient également un jeu d'emplacements correspondants. 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 pour suivre le trackpoint utilisateur :

TrackingProfile profile = new TrackingProfile();

ActivityTrackPoint trackPoint = new ActivityTrackPoint();
ActivityTrackingLocation location = new ActivityTrackingLocation(typeof(Activity));
location.MatchDerivedTypes = true;
foreach (ActivityExecutionStatus s in Enum.GetValues(typeof(ActivityExecutionStatus)))
{
    location.ExecutionStatusEvents.Add(s);
}

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


// Adding a user track point to the tracking profile.
UserTrackPoint utp = new UserTrackPoint();

// Adding a user location to the track point. 
UserTrackingLocation ul = new UserTrackingLocation(typeof(string), typeof(CodeActivity));
ul.MatchDerivedActivityTypes = true;
utp.MatchingLocations.Add(ul);
profile.UserTrackPoints.Add(utp);


// Serialize the profile.
TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder());
serializer.Serialize(writer, profile);
string trackingprofile = writer.ToString();
InsertTrackingProfile(trackingprofile);

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 et stocké dans la base de données de suivi. 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> <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>

<UserTrackPoint>

<MatchingLocations>

<UserTrackingLocation>

<Activity>

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

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<Argument>

<Type>System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>

<MatchDerivedTypes>false</MatchDerivedTypes>

</Argument>

</UserTrackingLocation>

</MatchingLocations>

</UserTrackPoint>

</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 workflowRuntime = new WorkflowRuntime();
workflowRuntime.AddService(new SqlTrackingService(connectionstring));
workflowRuntime.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.

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 UserTrackPoints\bin\debug (ou le dossier UserTrackPoints\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
EventArgs Tracking, exemple
ConsoleTrackingService, exemple
Query Using SQLTrackingService, exemple
RuleActionTrackingEvent, exemple
File Tracking Service and Query, exemple
Using the Tracking Profile Object Model, exemple
SQL Data Maintenance, exemple
Windows Workflow Tracking Services

Footer image

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