WF4.0 Beta1 自定义跟踪

WF4.0 Beta1 自定义跟踪

public class myTracking : TrackingParticipant

{

public override void Track(TrackingRecord record, TimeSpan timeout)

{

 

Console.WriteLine("*");

Console.WriteLine("RecordNumber:[{2}], Track:[{0}],Level:[{1}]", record.GetType().FullName, record.Level, record.RecordNumber);

Console.WriteLine("------------------------ content ----------------------------");

//-------------------WorkflowInstanceRecord---------------------------

WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;

if (workflowInstanceRecord != null)

{

Console.WriteLine("[workflowInstanceRecord]");

Console.WriteLine("InstanceID: {0} , instance state: {1}", record.InstanceId, workflowInstanceRecord.State);

 

}

 

//-------------ActivityTrackingRecord-----------------------

ActivityTrackingRecord activityTrackingRecord = record as ActivityTrackingRecord;

if (activityTrackingRecord != null)

{

Console.WriteLine("[ActivityTrackingRecord]");

Console.WriteLine("ActivityDisplayName: {0} :ActivityInstanceState: {1} ", activityTrackingRecord.Name, activityTrackingRecord.State);

 

IDictionary<String, object> variables = activityTrackingRecord.Variables;

if (variables.Count > 0)

{

Console.WriteLine("Variables:");

foreach (KeyValuePair<string, object> variable in variables)

{

Console.WriteLine("key: {0} , Value: {1}", variable.Key, variable.Value);

}

}

 

}

 

//----------------UserTrackingRecord----------------------

UserTrackingRecord userTrackingRecord = record as UserTrackingRecord;

if ((userTrackingRecord != null) && (userTrackingRecord.Data.Count > 0))

{

Console.WriteLine("[UserTrackingRecord]");

 

foreach (string data in userTrackingRecord.Data.Keys)

{

Console.WriteLine( "{0} : {1}", data, userTrackingRecord.Data[data]);

}

 

}

 

//---------------End----------------------

Console.WriteLine("======================== end ===============================");

Console.WriteLine("");

 

}

}

 

一个具备UserTrackingRecord的Activity

public class myActivity : CodeActivity

{

protected override void Execute(CodeActivityContext context)

{

Console.WriteLine("myActivity Execute");

 

UserTrackingRecord userRecord = new UserTrackingRecord("myUserTrackingRecord");

 

userRecord.Data.Add("wxd", 12345);

 

userRecord.Data.Add("wxwinter", "lzm");

 

context.Track(userRecord);

}

}

 

 

一个用于测试的流程

 

使用

class Program

{

static void Main(string[] args)

{

 

System.Console.WindowWidth = 120;

 

myTracking tracking = new myTracking();

 

tracking.TrackingProfile = getTrackingProfile();

 

WorkflowInstance myInstance = new WorkflowInstance(new myTestWorkflow());

 

myInstance.Extensions.Add(tracking);

 

myInstance.Run();

 

System.Console.Read();

}

 

 

static TrackingProfile getTrackingProfile()

{

 

TrackingProfile myTrackingProfile = new TrackingProfile();

myTrackingProfile.Name = "wxwinterTrackingProfile";

 

//

UserTrackingQuery myUserTrackingQuery = new UserTrackingQuery();

myUserTrackingQuery.Name = "*";

myUserTrackingQuery.ActivityName = "*";

 

//

WorkflowInstanceQuery myWorkflowInstanceQuery = new WorkflowInstanceQuery();

myWorkflowInstanceQuery.States.Add(WorkflowInstanceRecord.AbortedEvent);

myWorkflowInstanceQuery.States.Add(WorkflowInstanceRecord.CompletedEvent);

myWorkflowInstanceQuery.States.Add(WorkflowInstanceRecord.DeletedEvent);

myWorkflowInstanceQuery.States.Add(WorkflowInstanceRecord.IdleEvent);

myWorkflowInstanceQuery.States.Add(WorkflowInstanceRecord.PersistedEvent);

myWorkflowInstanceQuery.States.Add(WorkflowInstanceRecord.ResumedEvent);

myWorkflowInstanceQuery.States.Add(WorkflowInstanceRecord.StartedEvent);

myWorkflowInstanceQuery.States.Add(WorkflowInstanceRecord.UnhandledExceptionEvent);

myWorkflowInstanceQuery.States.Add(WorkflowInstanceRecord.UnloadedEvent);

 

//

ActivityQuery myActivityQuery = new ActivityQuery();

myActivityQuery.ActivityName = "*";

myActivityQuery.States.Add("*");

myActivityQuery.EnvironmentQueries.Add("*");

myActivityQuery.VariableQueries.Add(new VariableQuery{VariableName ="*"});

 

//

myTrackingProfile.Queries.Add(myActivityQuery);

myTrackingProfile.Queries.Add(myUserTrackingQuery);

myTrackingProfile.Queries.Add(myWorkflowInstanceQuery);

 

//

return myTrackingProfile;

}

}

 

 

 

 

 

 

posted @   WXWinter(冬)  阅读(1502)  评论(3编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示