Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í.
| Součást | Popis |
|---|---|
| Sledování runtime | Poskytuje infrastrukturu pro generování záznamů sledování. |
| Sledování účastníků | Spotřebovává záznamy sledování. Rozhraní .NET Framework 4 je dodáváno s komponentou pro sledování, která zapisuje záznamy sledování jako události ETW (Trasování událostí pro Windows). |
| Profil sledování | Mechanismus filtrování, který umožňuje sledování účastníkem přihlásit se k odběru podmnožiny záznamů sledování vydaný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 o sledování pracovního postupu instance | 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 když je aktivita naplánována, když je aktivita dokončena nebo když dojde k chybě. |
| Záznam o 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žiny 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šířit modul runtime sledování s uživatelským účastníkem sledování, který může zahrnovat vlastní logiku pro zpracování objektů vygenerovaných modulem runtime pracovního postupu.
Chcete-li napsat sledování účastníka, musí uživatel implementovat TrackingParticipant. Konkrétně musí být metoda Track implementována vlastním účastníkem. Tato metoda je volána, když je TrackingRecord emitováno 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);
}
Účastník kompletního 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á konzolového účastníka 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:
Objekty CustomTrackingRecord jsou vytvořeny a naplněny uživatelem definovanými daty, která se mají vygenerovat záznamem.
Voláním metody CustomTrackingRecordsledování je ActivityContext generován.
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
V sadě Visual Studio otevřete soubor řešení CustomTrackingSample.sln.
Řešení sestavíte stisknutím kombinace kláves CTRL+SHIFT+B.
Řešení spustíte stisknutím kombinace kláves CTRL+F5.