Partager via


Suivi personnalisé

L’exemple CustomTracking montre comment créer un participant de suivi personnalisé et écrire le contenu des données de suivi dans la console. En outre, l’exemple montre comment émettre des CustomTrackingRecord objets remplis avec des données définies par l’utilisateur. Le participant de suivi basé sur la console filtre les TrackingRecord objets émis par le flux de travail à l’aide d’un objet de profil de suivi créé dans le code.

Exemples de détails

Windows Workflow Foundation (WF) fournit une infrastructure de suivi pour suivre l’exécution d’une instance de flux de travail. Le runtime de suivi implémente une instance de flux de travail pour émettre des événements liés au cycle de vie du flux de travail, aux événements des activités de flux de travail et aux événements de suivi personnalisés. Le tableau suivant détaille les principaux composants de l’infrastructure de suivi.

Composant Descriptif
Suivi du temps d'exécution Fournit l’infrastructure pour émettre des enregistrements de suivi.
Suivi des participants Consomme les enregistrements de suivi. .NET Framework 4 est fourni avec un participant de suivi qui écrit des enregistrements de suivi en tant qu’événements suivi pour les événements Windows (ETW).
Profil de suivi Mécanisme de filtrage qui permet à un participant de suivi de s’abonner à un sous-ensemble des enregistrements de suivi émis à partir d’une instance de workflow.

Le tableau suivant détaille les enregistrements de suivi émis par le runtime de flux de travail.

Enregistrement de suivi Descriptif
Enregistrements de suivi d'instance du workflow. Décrit le cycle de vie de l’instance de workflow. Par exemple, un enregistrement d’instance est émis lorsque le flux de travail démarre ou se termine.
Enregistrements de suivi de l’état de l’activité. Détails de l’exécution de l’activité. Ces enregistrements indiquent l'état d'une activité de workflow, par exemple lorsqu'une activité est planifiée, lorsque l'activité se termine ou lorsqu'une erreur est générée.
Enregistrement de reprise de signet. Émis chaque fois qu'un signet au sein d'une instance de workflow est repris.
Enregistrements de suivi personnalisés. Un auteur de flux de travail peut créer des enregistrements de suivi personnalisés et les émettre dans l’activité personnalisée.

Le participant de suivi s’abonne à un sous-ensemble des objets émis TrackingRecord à l’aide de profils de suivi. Un profil de suivi contient des requêtes de suivi qui autorisent l’abonnement à un type d’enregistrement de suivi particulier. Les profils de suivi peuvent être spécifiés dans le code ou dans la configuration.

Participant de suivi personnalisé

L’API participant de suivi permet l’extension du runtime de suivi avec un participant de suivi fourni par l’utilisateur qui peut inclure une logique personnalisée pour gérer les TrackingRecord objets émis par le runtime de flux de travail.

Pour écrire un participant de suivi, l’utilisateur doit implémenter TrackingParticipant. Plus précisément, la Track méthode doit être implémentée par le participant personnalisé. Cette méthode est appelée lorsqu’un TrackingRecord est émis par le runtime de flux de travail.

public abstract class TrackingParticipant
{
    protected TrackingParticipant();

    public virtual TrackingProfile TrackingProfile { get; set; }
    public abstract void Track(TrackingRecord record, TimeSpan timeout);
}

Le participant de suivi complet est implémenté dans le fichier ConsoleTrackingParticipant.cs. L’exemple de code suivant est la Track méthode pour le participant de suivi personnalisé.

protected override void Track(TrackingRecord record, TimeSpan timeout)
{
    ...
    WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;
    if (workflowInstanceRecord != null)
    {
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
            " Workflow InstanceID: {0} Workflow instance state: {1}",
            record.InstanceId, workflowInstanceRecord.State));
    }

    ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
    if (activityStateRecord != null)
    {
        IDictionary<String, object> variables = activityStateRecord.Variables;
        StringBuilder vars = new StringBuilder();

        if (variables.Count > 0)
        {
            vars.AppendLine("\n\tVariables:");
            foreach (KeyValuePair<string, object> variable in variables)
            {
                vars.AppendLine(String.Format(
                    "\t\tName: {0} Value: {1}", variable.Key, variable.Value));
            }
        }
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
            " :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
                activityStateRecord.Activity.Name, activityStateRecord.State,
            ((variables.Count > 0) ? vars.ToString() : String.Empty)));
    }

    CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;

    if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
    {
        ...
    }
    Console.WriteLine();

}

L’exemple de code suivant ajoute le participant à la console à l’appelant de flux de travail.

ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
{
    ...
    // The tracking profile is set here, refer to Program.CS
...
}

WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);

Émission d’enregistrements de suivi personnalisés

Cet exemple montre également la possibilité d’émettre des CustomTrackingRecord objets à partir d’une activité de flux de travail personnalisée :

L’exemple suivant montre comment émettre des CustomTrackingRecord objets dans une activité personnalisée.

// Create the Custom Tracking Record
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")
{
    Data =
    {
        {"OrderId", 200},
        {"OrderDate", "20 Aug 2001"}
    }
};

// Emit custom tracking record
context.Track(customRecord);

Pour utiliser cet exemple

  1. À l’aide de Visual Studio, ouvrez le fichier de solution CustomTrackingSample.sln.

  2. Pour générer la solution, appuyez sur Ctrl+Maj+B.

  3. Pour exécuter la solution, appuyez sur Ctrl+F5.

Voir aussi