Sdílet prostřednictvím


Vlastní sledování

Ukázka CustomTracking ukazuje, jak vytvořit vlastního účastníka sledování a zapsat obsah sledovacích dat do konzoly. Kromě toho ukázka ukazuje, jak generovat CustomTrackingRecord objekty naplněné uživatelem definovanými daty. Účastník sledování na základě konzoly filtruje TrackingRecord objekty generované pracovním postupem pomocí objektu profilu sledování vytvořeného v kódu.

Ukázkové podrobnosti

Windows Workflow Foundation (WF) poskytuje sledovací infrastrukturu pro sledování provádění instance pracovního postupu. Modul runtime sledování implementuje instanci pracovního postupu pro generování událostí souvisejících s životním cyklem pracovního postupu, událostmi z aktivit pracovního postupu a vlastními událostmi sledování. Následující tabulka obsahuje podrobnosti o primárních součástech infrastruktury sledování.

Komponenta Popis
Modul runtime sledování Poskytuje infrastrukturu pro generování záznamů sledování.
Sledování účastníků Využívá záznamy sledování. Rozhraní .NET Framework 4 se dodává s účastníkem sledování, který zapisuje záznamy sledování jako události Trasování událostí pro Windows (ETW).
Profil sledování Mechanismus filtrování, který umožňuje sledování účastníka přihlásit k odběru podmnožinu záznamů sledování vygenerovaných z instance pracovního postupu.

Následující tabulka podrobně popisuje záznamy sledování, které modul runtime pracovního postupu generuje.

Záznam sledování Popis
Záznamy sledování instancí pracovního postupu Popisuje životní cyklus instance pracovního postupu. Například záznam instance se vygeneruje při spuštění nebo dokončení pracovního postupu.
Záznamy sledování stavu aktivity Podrobnosti o provádění aktivit Tyto záznamy označují stav aktivity pracovního postupu, například při naplánování aktivity nebo dokončení aktivity nebo při vyvolání chyby.
Záznam obnovení záložky Vygeneruje se při každém obnovení záložky v instanci pracovního postupu.
Vlastní záznamy sledování Autor pracovního postupu může vytvořit vlastní záznamy sledování a vygenerovat je v rámci vlastní aktivity.

Účastník sledování se přihlásí k odběru podmnožina vygenerovaných TrackingRecord objektů pomocí profilů sledování. Profil sledování obsahuje sledovací dotazy, které umožňují přihlášení k odběru konkrétního typu záznamu sledování. Profily sledování je možné zadat v kódu nebo v konfiguraci.

Vlastní účastník sledování

Rozhraní API pro sledování umožňuje rozšíření modulu runtime sledování s uživatelem poskytnutým účastníkem sledování, který může zahrnovat vlastní logiku pro zpracování TrackingRecord objektů vygenerovaných modulem runtime pracovního postupu.

Chcete-li napsat sledování účastníka, musí uživatel implementovat TrackingParticipant. Track Konkrétně musí být metoda implementována vlastním účastníkem. Tato metoda je volána při TrackingRecord vygenerované modulem runtime pracovního postupu.

public abstract class TrackingParticipant
{
    protected TrackingParticipant();

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

Kompletní účastník sledování je implementován v souboru ConsoleTrackingParticipant.cs. Následující příklad kódu je Track metoda pro vlastního účastníka sledování.

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();

}

Následující příklad kódu přidá účastníka konzoly do vyvolání pracovního postupu.

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

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

Generování vlastních záznamů sledování

Tato ukázka také ukazuje možnost generovat CustomTrackingRecord objekty z vlastní aktivity pracovního postupu:

Následující příklad ukazuje, jak generovat CustomTrackingRecord objekty v rámci vlastní aktivity.

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

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

Použití této ukázky

  1. V sadě Visual Studio otevřete soubor řešení CustomTrackingSample.sln.

  2. Řešení sestavíte stisknutím kombinace kláves CTRL+SHIFT+B.

  3. Řešení spustíte stisknutím kombinace kláves CTRL+F5.

Viz také