![](/img/trans.png)
[英]Windows Workflow Foundation - get list of executed activities?
[英]Intercepting/Decorating Activities in Windows Workflow
Windows Workflow Foundation是否提供了一種攔截或裝飾活動的方法,例如記錄? 例如,為每個活動入口和出口點創建日志(理想情況下包括活動名稱),而不修改所有現有項目代碼。
例如,我有一個工作流程,其中包含一個打印“Hello world”的活動。 在不修改XAML文件的情況下,我想捕獲活動的進入和退出。 我想在進入活動之前打印“輸入Hello World活動”,在活動打印出“Hello World”之后,我想打印“已完成的Hello World活動”。
Windows Workflow是否提供了掛鈎進入和退出活動的機制?
@ Richard210363已經在評論中添加了Windows Workflow Foundation支持此功能 - 請選擇關閉此問題的用戶是否可以考慮撤銷他們的決定,因為問題顯然使用相關框架有一個非常具體的答案?
我編寫了以下代碼,可以跟蹤所有工作流程和活動。
public class ActivityTracker : TrackingParticipant
{
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
if (record != null)
{
if (record is WorkflowInstanceRecord)
{
WorkflowInstanceRecord instanceRecord = record as WorkflowInstanceRecord;
Console.WriteLine("Workflow Record: Instance: {0} - State: {1} - Definition Identity: {2}", instanceRecord.ActivityDefinitionId, instanceRecord.State, instanceRecord.WorkflowDefinitionIdentity);
}
else if (record is ActivityStateRecord)
{
ActivityStateRecord instanceRecord = record as ActivityStateRecord;
Console.WriteLine("Activity Record: Name: {0} - State: {1}", instanceRecord.Activity.Name, instanceRecord.State);
}
}
}
}
看一下工作流TrackingParticipant類。
它作用於工作流中的所有活動,類似於范圍內的AOP。
它會發出有關活動進入和退出的信息。
創建一個繼承自TrackingParticipant的類並覆蓋Track方法:
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
string CurrentActivityName = activityStateRecord.Activity.Name,
}
然后在運行之前將跟蹤類附加到工作流程。
_workflowApplication.Extensions.Add(_yourWorkFlowTrackingClass);
_workflowApplication.Run();
您還可以將TrackingRecord轉換為WorkflowInstanceRecord。 在它們之間,ActivityStateRecord和WorkflowInstanceRecord提供了有關工作流及其活動的大量信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.