Tracking_自定义Profile筛选(1)

 1.Tacking服务所要记录的状态是可以通过自定义Tacking Pofile进行筛选的.

 2.默认Tacking服务对 [实例的各类状态][Activity的各类状态][用户跟踪行为]的所有状态进行记录,可以自定义自定义Tacking PofileTacking服务只记录实际需要的状态.以下各类状态变化可被Tacking服务记录,也可用Tacking Pofile进行筛选:

实例的各类状态

Aborted Changed Completed Created Exception Idle 
Loaded
 Persisted Resumed Started Suspended Terminated Unloaded

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.完全可以手工操作PofileXML串,也可以手工操作Tacking数据,而不使用本文的方式

 

生成自定义Pofile对象

该方法将生成一个自定义Pofile对象,并将该对象传行成一个XML串,然后调用后面的[插入ProfileXML串到数据库]方法将其存入数据库

 private static void 建立并插入Profile()
        
{
            
//生成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字串, 自定义版本);

        }

接下篇


 

posted @ 2006-09-25 19:28  WXWinter(冬)  阅读(1591)  评论(1编辑  收藏  举报