Partager via


Création et utilisation de profils de suivi

Les profils de suivi permettent de filtrer les informations de suivi afin que vous ne receviez que celles qui vous intéressent. Pour cela, les services de suivi utilisent un objet TrackingProfile afin de demander des informations de suivi. Lorsqu'une nouvelle instance de workflow démarre, l'infrastructure de suivi appelle le TryGetProfile pour chaque service de suivi enregistré avec le runtime. Le type de l'instance de workflow est fourni en tant que paramètre à cet appel. Si le service de suivi souhaite recevoir des informations de suivi pour cette instance (généralement déterminée par le type d'instance en cours d'exécution), il retourne la valeur true et spécifie un objet TrackingProfile en tant que paramètre out. L'objet TrackingProfile contient des informations qui indiquent au runtime de suivi les événements et les données attendus par le service de suivi. Lorsque l'infrastructure de suivi reçoit un événement spécifié dans le profil de suivi, elle envoie les informations sur l'événement au service de suivi en utilisant un canal de suivi.

Les profils de suivi peuvent être représentés sous forme de fichiers XML qui utilisent le schéma TrackingProfile défini dans Windows Workflow Foundation. Les profils de suivi comportent également un modèle objet complexe qui affiche le résumé de leurs informations. Vous pouvez créer un profil de suivi en utilisant le modèle objet ou un formulaire XML. Toutefois, les profils de suivi représentés dans le formulaire XML doivent être désérialisés en objet TrackingProfile, car le runtime attend un objet TrackingProfile.

Caution noteAttention :

Si vous utilisez des variables autres qu'anglaises dans vos profils de suivi, le fichier de profil de suivi doit être enregistré avec un codage Unicode.

Éléments du modèle objet de profil de suivi

Un objet TrackingProfile permet de suivre les événements d'une instance de workflow, les événements d'activité individuels et les événements utilisateur personnalisés. Le modèle objet du profil de suivi utilise différents objets pour construire un profil de suivi qui offre un contrôle plus précis des informations que le moteur d'exécution envoie au service de suivi.

Trackpoints

Un TrackingProfile contient trois types différents de trackpoints. Trois types d'événements de suivi peuvent être filtrés :

  • Événements d'état d'activité

  • Événements d'état de workflow

  • Événements utilisateur

Vous pouvez ajouter des objets WorkflowTrackPoint à la propriété WorkflowTrackPoints pour établir une correspondance avec des événements d'état de workflow spécifiques, des objets ActivityTrackPoint à la propriété ActivityTrackPoints pour établir une correspondance avec des événements d'état d'activité spécifiques et des objets UserTrackPoint à la propriété UserTrackPoints pour établir une correspondance avec des événements utilisateur spécifiques.

WorkflowTrackPoint

Á chaque fois que l'état de l'instance de workflow change, celle-ci envoie à l'infrastructure de suivi de l'exécution un événement d'état de workflow basé sur l'une des valeurs TrackingWorkflowEvent. Un WorkflowTrackPoint définit un intérêt pour tous les points sur lesquels des types spécifiques d'événements d'état du workflow se produisent pendant l'exécution d'une instance de workflow. Ces événements d'état sont définis dans la propriété MatchingLocation du WorkflowTrackPoint. Pour plus d'informations sur la relation entre les emplacements de suivi et un WorkflowTrackPoint, consultez la section « Emplacement de suivi » de cette rubrique.

Un WorkflowTrackPoint peut également spécifier des informations associées supplémentaires qui doivent être envoyées par l'infrastructure de suivi de l'exécution via l'ajout d'Annotations. Les annotations sont des chaînes que vous définissez et qui contiennent des informations à associer au WorkflowTrackPoint . Par exemple, une annotation peut contenir des informations relatives au chemin d'exécution que le workflow peut suivre à partir de ce trackpoint, ou encore des informations à afficher dans une application.

ActivityTrackPoint

Á chaque fois que l'état d'une activité change, l'instance de workflow envoie à l'infrastructure de suivi de l'exécution un événement d'état d'activité basé sur l'une des valeurs ActivityExecutionStatus. Un ActivityTrackPoint définit un point d'intérêt dans le chemin d'exécution potentiel d'un workflow racine, qualifié par ce type d'événement d'état d'activité. Un ActivityTrackPoint contient des emplacements inclus dans la correspondance à l'aide de la propriété MatchingLocations , des emplacements exclus de la correspondance à l'aide de la propriété ExcludedLocations et les données qui doivent être extraites de l'instance de workflow lorsque le trackpoint est mis en correspondance à l'aide de la propriété Extracts.

La propriété Extracts est une ExtractCollection qui contient des objets ActivityDataTrackingExtract ou des objets WorkflowDataTrackingExtract. Lorsque vous ajoutez un objet ActivityDataTrackingExtract à la ExtractCollection, la propriété Member pointe vers un champ ou vers une propriété de l'activité, vers un membre de ce champ ou de cette propriété, ou encore vers un élément unique d'un champ ou d'une propriété (ou l'un de ses membres) qui implémente l'interface IEnumerable. La valeur du membre est placée dans la propriété Body du ActivityTrackingRecord associé lorsque le ActivityTrackPoint est mis en correspondance. L'objet WorkflowDataTrackingExtract peut être utilisé pour extraire des membres de workflow pendant cet événement d'activité particulier.

UserTrackPoint

Un concepteur d'activités ou un concepteur de workflow peut utiliser les méthodes System.Workflow.ComponentModel.Activity.TrackData(System.Object) et System.Workflow.ComponentModel.ActivityExecutionContext.TrackData(System.Object) surchargées pour que le workflow envoie des données à l'infrastructure de suivi de l'exécution sous forme d'événement utilisateur. Les données émises portent le nom de données utilisateur. Contrairement aux événements d'état d'activité et aux événements d'état de workflow, qui se produisent uniquement en cas de modification de l'état, les événements utilisateur peuvent se produire à tout emplacement instrumenté dans un workflow. Il existe de nombreuses raisons d'instrumenter un workflow de façon à émettre des événements utilisateur. Par exemple, un concepteur de workflow peut communiquer des informations d'état logique relatives à la progression d'un workflow ; un concepteur d'activités peut souhaiter fournir une opportunité aux membres de l'activité à d'autres moments que lors de la modification de l'état de l'activité.

Un UserTrackPoint définit un point d'intérêt dans le chemin d'exécution potentiel d'une instance de workflow racine associée à un événement utilisateur. Un UserTrackPoint contient des emplacements inclus dans la correspondance, des emplacements exclus de la correspondance et toutes les données supplémentaires qui doivent être extraites de l'instance de workflow lorsque le trackpoint est mis en correspondance. Vous pouvez ajouter un UserTrackPoint à System.Workflow.Runtime.Tracking.TrackingProfile.UserTrackPoints pour que l'infrastructure de suivi de l'exécution envoie un UserTrackingRecord au service de suivi lorsque le trackpoint est mis en correspondance. Les données utilisateur sont retournées dans System.Workflow.Runtime.Tracking.UserTrackingRecord.UserData. Un UserTrackPoint unique peut être mis en correspondance avec plusieurs points de l'instance de workflow.

Un UserTrackingLocation contient des conditions de correspondance pour un emplacement associé à un événement utilisateur contenu dans le chemin d'exécution potentiel d'une instance de workflow. Vous pouvez ajouter des objets UserTrackingLocation à MatchingLocations pour définir les emplacements qui doivent être inclus dans la correspondance pour le trackpoint. De même, vous pouvez ajouter des objets UserTrackingLocation à ExcludedLocations pour définir les emplacements qui doivent être exclus de la correspondance pour le trackpoint. Pour plus d'informations sur la relation entre les emplacements de suivi et un UserTrackPoint, consultez la section « Emplacement de suivi » de cette rubrique.

Vous pouvez ajouter des objets ActivityDataTrackingExtract et des objets WorkflowDataTrackingExtract à Extracts pour spécifier les données qui doivent être extraites de l'instance de workflow lorsque le trackpoint est mis en correspondance. Les données extraites sont retournées dans System.Workflow.Runtime.Tracking.UserTrackingRecord.Body.

Vous pouvez faire un ajout à Annotations pour spécifier des informations supplémentaires associées au trackpoint. Ces annotations sont retournées dans Annotations.

Emplacements de suivi

La section précédente a expliqué comment associer des trackpoints à un TrackingProfile pour spécifier le type d'événements traités par le service de suivi utilisé dans le moteur d'exécution de Windows Workflow Foundation. Ces trackpoints utilisent des emplacements de suivi pour la mise en correspondance avec des types spécifiques contenus dans la définition de workflow.

WorkflowTrackingLocation

Un WorkflowTrackingLocation est utilisé pour le suivi des événements qui se produisent à chaque modification de l'état de l'instance de workflow. La propriété Events définie dans la classe WorkflowTrackingLocation vous permet de définir la liste des événements d'état de workflow qui seront mis en correspondance. Ces événements peuvent représenter toute combinaison de valeurs définie dans l'énumération TrackingWorkflowEvent.

ActivityTrackingLocation

Un ActivityTrackingLocation est utilisé pour le suivi des événements qui se produisent à chaque modification de l'état d'une activité au sein d'une instance de workflow. Le ActivityTrackingLocation correspond aux événements déclenchés à partir des activités spécifiées dans les propriétés ActivityTypeName ou dans les propriétés ActivityType. La propriété ActivityType est utilisée lorsque vous spécifiez un objet Type. Toutefois, la propriété ActivityTypeName peut être utilisée pour spécifier un nom non qualifié du type d'activité de référence. Par exemple, pour spécifier le nom non qualifié d'une activité CodeActivity, affectez à la propriété ActivityTypeName la valeur « CodeActivity ».

La propriété ExecutionStatusEvents définie dans la classe ActivityTrackingLocation permet de filtrer le type d'événements de niveau d'activité traité par le service de suivi. Au minimum une des valeurs ActivityExecutionStatus contenues dans la collection ExecutionStatusEvents doit être mise en correspondance, et chaque TrackingCondition de la propriété Conditions doit porter la valeur true pour que le ActivityTrackingLocation soit mis en correspondance. Une liste vide spécifie qu'aucun événement ne sera mis en correspondance.

Un ActivityTrackingCondition permet d'exercer un contrôle supplémentaire sur la granularité de l'activité à suivre. La propriété Member de la classe ActivityTrackingCondition spécifie une propriété ou un champ, un membre d'une propriété d'activité ou de champ, ou encore un élément unique d'une propriété d'activité ou de champ (ou l'un de ses membres) qui implémente l'interface IEnumerable définie dans l'activité à suivre. La propriété Value indique la valeur avec laquelle vous souhaitez comparer la propriété Member en utilisant le Operatorspécifié. En utilisant ces trois propriétés dans la classe ActivityTrackingCondition avec un ActivityTrackingLocation, vous pouvez, par exemple, spécifier que vous souhaitez suivre uniquement des activités CodeActivity dont la propriété Name est égale à « CodeActivity1 ».

UserTrackingLocation

Un concepteur d'activités ou un concepteur de workflow peut utiliser les méthodes System.Workflow.ComponentModel.Activity.TrackData(System.Object) et System.Workflow.ComponentModel.ActivityExecutionContext.TrackData(System.Object) surchargées pour que le workflow envoie des données à l'infrastructure de suivi de l'exécution sous forme d'événement utilisateur. Les données émises portent le nom de données utilisateur. Contrairement aux événements d‘état d'activité et aux événements d'état de workflow, qui se produisent uniquement en cas de modification de l'état de workflow ou d'activité, les événements utilisateur peuvent se produire à tout emplacement instrumenté dans un workflow. Un UserTrackingLocation définit les paramètres correspondants pour un tel emplacement en spécifiant le type de données utilisateur, le type de l'activité à partir de laquelle il doit être émis, une collection de conditions qui peuvent qualifier plus précisément une ou plusieurs instances de cette activité, un nom de clé facultatif avec lequel les données utilisateur doivent être associées, si les types dérivés des données utilisateur doivent être mis en correspondance et si les données utilisateur émises à partir d'activités dérivées du type de l'activité spécifiée doivent être mises en correspondance.

NoteRemarque :

Un UserTrackingLocation unique peut faire référence à plusieurs emplacements réels dans le chemin d'exécution potentiel d'une instance de workflow.

Vous pouvez ajouter un UserTrackingLocation aux propriétés System.Workflow.Runtime.Tracking.UserTrackPoint.MatchingLocations ou System.Workflow.Runtime.Tracking.UserTrackPoint.ExcludedLocations pour définir les paramètres de correspondance pour un UserTrackPoint contenu dans un TrackingProfile.

Conditions

Il existe trois conditions générales qui doivent être remplies dans l'ordre suivant pour que le UserTrackingLocation soit mis en correspondance par l'infrastructure de suivi de l'exécution :

L'infrastructure de suivi de l'exécution ne considère le UserTrackingLocation comme mis en correspondance que lorsque ces trois conditions sont satisfaites.

Pour configurer un UserTrackingLocation, vous devez définir la propriété ArgumentTypeName ou la propriété ArgumentType de façon à spécifier le type de données utilisateur à mettre en correspondance. Vous devez également définir la propriété ActivityTypeName ou la propriété ActivityType de façon à spécifier le type d'activité à partir de laquelle les données utilisateur doivent être émises pour être mises en correspondance. Vous pouvez ajouter des objets ActivityTrackingCondition à Conditions pour qualifier plus complètement l'activité à partir de laquelle les données utilisateur doivent être émises. Vous pouvez définir MatchDerivedArgumentTypes pour spécifier que les données utilisateur dérivées du type de données utilisateur spécifié par ArgumentTypeName ou ArgumentType doivent être mises en correspondance, et vous pouvez définir MatchDerivedActivityTypes pour spécifier que les données utilisateur émises à partir d'activités dérivées du type d'activité spécifié par ActivityTypeName ou ActivityType doivent être mises en correspondance.

Vous pouvez définir KeyName pour spécifier que seules les données utilisateur associées au nom de clé spécifié doivent être mises en correspondance pour ce UserTrackingLocation. Si la propriété KeyName est une référence null (Nothing en Visual Basic), la structure de suivi de l'exécution n'essaie pas de mettre en correspondance la clé associée aux données utilisateur.

Utilisation du modèle objet du profil de suivi

Comme indiqué précédemment, vous pouvez utiliser l'API Windows Workflow Foundation pour créer un objet TrackingProfile en vue d'une utilisation dans votre service de suivi. Le modèle objet de profil de suivi utilise les classes décrites dans la section précédente pour créer un objet TrackingProfile. L'objet TrackingProfile contient des points de suivi relatifs à des trackpoints de workflow, d'activité et utilisateur. Chaque point de suivi possède également un jeu d'emplacements correspondants. Un emplacement correspondant décrit l'événement qui sera suivi et l'activité à suivre. Vous pouvez également définir des emplacements exclus en plus des emplacements correspondants.

Les propriétés d'activité utilisées dans le profil de suivi doivent être mappés avec les noms contenus dans le modèle objet d'activité.

Caution noteAttention :

Le service de suivi accède aux propriétés publiques configurées pour effectuer un suivi dans un profil de suivi. Cela peut provoquer des résultats inattendus dans un workflow.

Par exemple, vous créez un workflow qui possède une propriété de compteur incrémentiel publique, incrémentée lors de chaque accès à cette propriété. Si vous créez un profil de suivi qui suit la propriété de compteur, le service de suivi accède à la propriété de compteur et le compteur est incrémenté. Dans ce scénario, la propriété est incrémentée de façon inattendue par le service de suivi hors de la logique métier du workflow.

L'exemple de code suivant montre comment créer un profil de suivi qui effectue le suivi d'une activité CodeActivity et trois événements : Initialized, Executinget Closed. Le profil possède un ActivityTrackPoint unique avec un emplacement correspondant.

static void CreateSimpleTrackingProfile()
{

    TrackingProfile myProfile = new TrackingProfile();
    ActivityTrackPoint myTrackPoint = new ActivityTrackPoint();
    ActivityTrackingLocation myLocation = new ActivityTrackingLocation(typeof(CodeActivity));
    myLocation.MatchDerivedTypes = false;
    myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Initialized);
    myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Executing);
    myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Closed);
    myTrackPoint.MatchingLocations.Add(myLocation);
    myProfile.ActivityTrackPoints.Add(myTrackPoint);
    myProfile.Version = new Version("1.0.0.0");
    TrackingProfileSerializer trackingProfileSerializer = new TrackingProfileSerializer();
    StringBuilder trackingProfileString = new StringBuilder();
    using (StringWriter writer = new StringWriter(trackingProfileString, CultureInfo.InvariantCulture))
    {
        trackingProfileSerializer.Serialize(writer, myProfile);
        Console.WriteLine(writer.ToString());
    }
}

Création et utilisation de XML pour un TrackingProfile

Vous pouvez également écrire des profils de suivi à l'aide de XML. Pour cela, vous devez désérialiser XML dans un TrackingProfile. La représentation XML correspondante pour le TrackingProfile créé dans la section précédente se présente sous la forme suivante :

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<TrackingProfile xmlns="https://schemas.microsoft.com/winfx/2006/workflow/trackin
gprofile" version="1.0.0.0">
    <TrackPoints>
        <ActivityTrackPoint>
            <MatchingLocations>
                <ActivityTrackingLocation>
                    <Activity>
                        <Type>System.Workflow.Activities.CodeActivity, System.Wo
rkflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad36
4e35</Type>
                        <MatchDerivedTypes>false</MatchDerivedTypes>
                    </Activity>
                    <ExecutionStatusEvents>
                        <ExecutionStatus>Initialized</ExecutionStatus>
                        <ExecutionStatus>Executing</ExecutionStatus>
                        <ExecutionStatus>Closed</ExecutionStatus>
                    </ExecutionStatusEvents>
                </ActivityTrackingLocation>
            </MatchingLocations>
        </ActivityTrackPoint>
    </TrackPoints>
</TrackingProfile>

La représentation XML d'un TrackingProfile peut également être construite à l'aide du modèle objet de profil de suivi et de la classe TrackingProfileSerializer comprise dans Windows Workflow Foundation.

L'exemple suivant montre comment sérialiser un objet TrackingProfile en données XML.

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

Voir aussi

Référence

TrackingProfile

Concepts

Création de services de suivi personnalisés

Footer image

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