天天看點

WF中的跟蹤服務(3):使用SqlTrackingService跟蹤規則

Rule

Conditon

ThenAction

ElseAction

RuleC

this.D < 100

this.B = this.B - 12 

System.Console.WriteLine("RuleC:Then" + this.B)

RuleB

this.B > 50

this.C = "Preferred" 

System.Console.WriteLine("RuleB:Then" + this.C)

this.C = "Normal" 

System.Console.WriteLine("RuleB:Else" + this.C)

RuleA

this.A > 10

this.B = 60 

System.Console.WriteLine("RuleA:Then" + this.B)

this.B = 40 

System.Console.WriteLine("RuleA:Else" + this.B)

工作流代碼中添加相關變量如下: 

private intA = 12; 

private intD = 99; 

private intB = 0; 

private stringC = "";

<a href="http://11011.net/software/vspaste"></a>

宿主程式中我們加載SqlTrackingService服務,代碼如下:

TrackingConsoleWriter類來将跟蹤資訊顯示出來,代碼如下: 

TrackingConsoleWriter trackingWriter= new TrackingConsoleWriter(strConn); 

trackingWriter.DisplayTrackingData(instance.InstanceId);

我們使用SqlTrackingQuery查詢的時候。SqlTrackingWorkflowInstance有一個UserEvents屬性,該屬性包括UserTrackingRecord集合,每一個UserTrackingRecord都有一個UserData屬性。如果這個UserTrackingRecord包含Rule資料的話,該UserData屬性是一個RuleActionTrackingEvent對象的執行個體,該對象裡包含RuleName和ConditionResult屬性。當規則執行時,将發送 RuleActionTrackingEvent 對象作為使用者跟蹤點。在我們自己開發的TrackingConsoleWriter類中,下面的代碼是處理這個的: 

UserTrackingRecorduserRecord = record asUserTrackingRecord; 

if(userRecord.UserData isRuleActionTrackingEvent) 

        WriteRuleData(userRecord); 

}

執行工作流結果如下:

<a href="http://www.cnblogs.com/images/cnblogs_com/carysun/WindowsLiveWriter/WF2_60A7/clip_image002_2.jpg"></a>

上面的結果中包含RuleSet中各個規則的計算情況,下一篇文章中我們使用自定義跟蹤配置檔案來跟蹤Rule中具體的變量的變化情況。

本文轉自生魚片部落格園部落格,原文連結:http://www.cnblogs.com/carysun/archive/2008/11/22/RuleSqlTracking.html,如需轉載請自行聯系原作者