Tracking_自定义Profile筛选(1)
2.默认Tacking服务对 [实例的各类状态]、[Activity的各类状态]、[用户跟踪行为]的所有状态进行记录,可以自定义自定义Tacking Pofile让Tacking服务只记录实际需要的状态.以下各类状态变化可被Tacking服务记录,也可用Tacking Pofile进行筛选:
实例的各类状态 |
Aborted、 Changed、 Completed、 Created、 Exception、 Idle、 |
Activity的各类状态 |
一个工作流是由多个Activity组成的,每一个Activity都会有一个生命周期,在此期间,Activity会经历多种状态:Canceling、 Closed、 Compensating、 Executing、 Faulting、 Initialized |
用户跟踪行为 |
可以在Activity代码中用TrackData方法向Tacking服务提交自定义状态点 |
3.自定义Tacking Pofile将生成一个XML串,存入TrackingProfile表的TrackingProfileXml字段中
4.默认的Tacking Pofile以一个XML串的形式存于DefaultTrackingProfile表的TrackingProfileXml字段中
5.自定义Tacking Pofile只对指定的工作流有效,默认的Tacking Pofile对所有没有自定义Tacking Pofile的工作流有效。
6.如果所有工作流要使用同样的筛选,可以直接修改默认的Tacking Pofile,
7.如果同一对象已添加自定义的Tacking Pofile,使用默认方式再添加时,将出产生异常,该异常由UpdateTrackingProfile存储过程产生.
8.完全可以手工操作Pofile的XML串,也可以手工操作Tacking数据,而不使用本文的方式生成自定义Pofile对象
该方法将生成一个自定义Pofile对象,并将该对象传行成一个XML串,然后调用后面的[插入Profile的XML串到数据库]方法将其存入数据库
{
//生成Profile的XML字串,然后专给插入Profile方法
Version 自定义版本 = new Version("4.3.2.1");
//版本信息同时存在"TrackingProfile表Version字段"与"Profile的XML字串"中
///////////////////////////<TrackingProfile>////////////////////////////////////////////////////
TrackingProfile profile = new TrackingProfile();
//-----------<TrackingProfile> 节-------------
profile.Version = 自定义版本;//此处用来写XML文件中的version="3.0.0.0"
//效果如下
//<TrackingProfile xmlns="http://schemas.microsoft.com/winfx/2006/workflow/trackingprofile" version="3.0.0.0">
///////////////////////////<ActivityTrackPoint>////////////////////////////////////////////////////
//------------------------------------------------------------------//
// 此段生成profile文件中,筛选Activity跟踪点的设置 //
//------------------------------------------------------------------//
//---------<ActivityTrackingLocation>节---------
ActivityTrackingLocation ActivityTrackingLocation节 = new ActivityTrackingLocation(typeof(Activity));
Console.WriteLine();
Console.WriteLine("已设置要监视的ActivityExecutionStatus :");
foreach (ActivityExecutionStatus status in Enum.GetValues(typeof(ActivityExecutionStatus)))
{
Console.WriteLine(status.ToString()); //一个屏幕输出
ActivityTrackingLocation节.ExecutionStatusEvents.Add(status);
}
//----------<MatchingLocations>节---------------
ActivityTrackingLocation节.MatchDerivedTypes = true;
//----------<ActivityTrackPoint>节--------------
ActivityTrackPoint ActivityTrackPoint节 = new ActivityTrackPoint();
ActivityTrackPoint节.MatchingLocations.Add(ActivityTrackingLocation节); //节入节
profile.ActivityTrackPoints.Add(ActivityTrackPoint节); //节入节
///////////////////<WorkflowTrackPoint>//////////////////////////////////////////////////////////
//------------------------------------------------------------------//
// 此段生成profile文件中,筛选实例跟踪点的设置 //
//------------------------------------------------------------------//
//-----------<WorkflowTrackingLocation>节---------
WorkflowTrackingLocation WorkflowTrackingLocation节 = new WorkflowTrackingLocation();
Console.WriteLine();
Console.WriteLine("已设置要监视的WorkflowEvent :");
foreach (TrackingWorkflowEvent wEvent in Enum.GetValues(typeof(TrackingWorkflowEvent)))
{
Console.WriteLine( wEvent.ToString());//一个屏幕输出
WorkflowTrackingLocation节.Events.Add(wEvent);
}
Console.WriteLine();
//-----------<WorkflowTrackPoint>节------------------
WorkflowTrackPoint WorkflowTrackPoint节 = new WorkflowTrackPoint();
//-----------<MatchingLocation>节------------------
WorkflowTrackPoint节.MatchingLocation = WorkflowTrackingLocation节; //节入节
profile.WorkflowTrackPoints.Add(WorkflowTrackPoint节); //节入节
/////////////////////////<UserTrackPoint>///////////////////////////////////////////////////////
//------------------------------------------------------------------//
// 此段生成profile文件中,筛选用户跟踪点的设置 //
//------------------------------------------------------------------//
//------------<UserTrackPoint>节---------------
UserTrackPoint UserTrackPoint节 = new UserTrackPoint();
//-----------<UserTrackingLocation>节-----------
UserTrackingLocation UserTrackingLocation节;
Console.WriteLine();
Console.WriteLine("设置要监视的用户监视点:已设置");
UserTrackingLocation节 = new UserTrackingLocation(typeof(string), typeof(CodeActivity));
//-----------<MatchingLocation>节------------------
UserTrackingLocation节.MatchDerivedActivityTypes = true;
UserTrackPoint节.MatchingLocations.Add(UserTrackingLocation节);
//节入节
profile.UserTrackPoints.Add(UserTrackPoint节);
////////////////////////////////////////////////////////////////////////////////////////////
// //
////////////////////////////////////////////////////////////////////////////////////////////
//---------------生成XML串-----------------------------
TrackingProfileSerializer 串行化对象 = new TrackingProfileSerializer();
StringWriter StringWriter接收器 = new StringWriter(new StringBuilder(), CultureInfo.InvariantCulture);
串行化对象.Serialize(StringWriter接收器, profile);
String XML字串 = StringWriter接收器.ToString();
Console.WriteLine();
Console.WriteLine("生成完成,准备插入数据库");
Console.WriteLine();
//---------------插入数据库------------------------
插入Profile的XML串到数据库(XML字串, 自定义版本);
}
接下篇