天天看點

堅持學習WF(22):跟蹤規則

<a href="http://www.cnblogs.com/carysun/archive/2008/05/29/WF.html">堅持學習WF文章索引</a>

由于規則不是程式化的代碼,你不能使用vs的調試器來調試,如果我們要調試有規則的工作流程式,我們可以開啟規則引擎的Tracing功能。我們下面以一個例子來說明。我們需要建立一個順序型工作流項目,在工作流設計器中放入一個PolicyActivity活動,然後設定其RuleSetReference屬性,我們建立以下規則集。如下表所示:

Rule

Conditon

ThenAction

ElseAction

RuleC

this.D &lt; 100

this.B = this.B - 12 

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

RuleB

this.B &gt; 50

this.C = "Preferred" 

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

this.C = "Normal" 

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

RuleA

this.A &gt; 10

this.B = 60 

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

this.B = 40 

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

規則編輯器如下圖:

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

然後我們在項目中添加App.config檔案,在配置檔案開始規則的跟蹤功能,代碼如下:

在此示例中,第二行添加節點啟用檔案的日志記錄。該檔案使用名稱 WorkflowTrace.log 在宿主應用程式目錄中建立。第一行中的TraceLevel屬性值ALL表示所有可以預測到log資訊都會被記錄,如果你想過濾到一些log,你也可以指定Information和Verbose等,該選項通過将名稱參數設定為等于“System.Workflow LogToTraceListener”來啟用 TraceListener 的日志記錄。這樣設定後,Windows Workflow Foundation 将會枚舉在宿主應用程式中建立的每個 TraceListener,并向它們發送所有日志記錄資訊。值屬性的可能值包括:

說明

All

記錄接收到的所有消息

Off

不記錄任何消息

Critical

僅記錄關鍵消息

Error

記錄關鍵消息和錯誤消息

Warning

記錄關鍵、錯誤和警告消息

Information

記錄關鍵、錯誤、警告和提示消息

Verbose

記錄關鍵、錯誤、警告、提示和詳細消息

工作流中賦響應初始值如下:

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

下面為宿主程式代碼:

規則“RuleA”條件 依賴項:“this/A/” 

規則“RuleA”THEN 副作用:“this/B/” 

規則“RuleA”ELSE 副作用:“this/B/” 

規則“RuleB”條件 依賴項:“this/B/” 

規則“RuleB”THEN 副作用:“this/C/” 

規則“RuleB”ELSE 副作用:“this/C/” 

規則“RuleC”條件 依賴項:“this/D/” 

規則“RuleC”THEN 副作用:“this/B/” 

規則“RuleA”THEN 操作觸發規則“RuleB” 

規則“RuleA”ELSE 操作觸發規則“RuleB” 

規則“RuleC”THEN 操作觸發規則“RuleB” 

執行 

計算規則“RuleA”的條件。 

計算為 True 的規則“RuleA”條件。 

計算規則“RuleA”的 THEN 操作。 

計算規則“RuleB”的條件。 

計算為 True 的規則“RuleB”條件。 

計算規則“RuleB”的 THEN 操作。 

計算規則“RuleC”的條件。 

計算為 True 的規則“RuleC”條件。 

計算規則“RuleC”的 THEN 操作。 

規則“RuleC”副作用啟用規則“RuleB”重新計算。 

計算為 False 的規則“RuleB”條件。 

計算規則“RuleB”的 ELSE 操作。

1.Log的第一部分記錄了各個規則的依賴項,當某個規則修改的時候會引擎哪些規則的重算。

2.從log我們可以看出規則的執行順序并不是規則編輯器中設定的順序,而是在優先級一樣的情況下,按字母順序來執行。我們例子中是RuleC,RuleB,RuleA,執行的順序就不是了。

3.通過log我們也可以證明WF規則引擎的正向連結的特性,例子中RuleC引起了RuleB的重算。

這些隻是WF中跟蹤的一部分功能,我們後面後專門來學習WF中的跟蹤的相關知識。

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