Jurgen Willis
Microsoft Corporation
2006 年 2 月
適用於:
Windows Workflow Foundation (WF) Beta 2
Visual Studio 2005
總結: 本文提供 Windows Workflow Foundation (WF) 中的規則引擎功能概觀。 它會描述如何在 WF 中使用條件和 RuleSet,並討論規則集合的行為,包括向前鏈結和追蹤和追蹤。 (18 個列印頁面)
注意 本文是使用 Beta 2 撰寫的,未來可能需要進行一些變更,才能讓此專案在更新版本的 Windows Workflow Foundation 上運作。
目錄
簡介
Windows Workflow Foundation 中的規則概觀
規則評估
正向鏈結
向前鏈結控制項
其他模型化討論區
追蹤和追蹤
結論
詳細資訊
簡介
隨著 Windows Workflow Foundation (WF) 的可用性,Microsoft 引進了 WinFX 開發人員平臺的新規則功能。 這些功能會從簡單的條件延伸,以驅動活動執行行為,一直延伸至功能完整的向前鏈結規則引擎所執行的複雜 RuleSet。
規則功能允許在整體商務程式範圍內宣告式模型化應用程式邏輯單位。 規則引擎技術的範例案例包括訂單驗證、定價計算、促銷強制執行、例外狀況程式管理,以及宣告分類和管理。
開發這項技術的主要目標是提供真正整合的工作流程和規則體驗。 在整個產業中,規則和工作流程通常都是相當不同的技術,通常是由不同的廠商提供。 協力廠商規則引擎通常內嵌或整合在工作流程和商務程式管理 (BPM) 提供者,但開發人員和管理體驗顯然不是順暢的引擎。
透過 WF,Microsoft 非常著重于在工作流程和規則模型化之間提供順暢的開發人員體驗,以便讓開發人員在工作流程中的任何時間點輕鬆納入規則。 開發人員能夠判斷是否要在工作流程模型、規則或程式碼中建立邏輯模型,而不需擔心這些決策的整合含意。 不過,這已達成,而不會犧牲在工作流程範圍之外執行規則的能力。
第二個主要目標是提供簡單的模型,讓開發人員在定義規則時使用。 規則技術在這裡經常是一種小型技術,由高度特製化的規則專業人員群組使用。 雖然工具的改善已擴大使用規則的一組個人,但模型通常需要使用者太熟悉基礎引擎的實作機制。 為了在平臺中提供規則功能,我們選擇讓廣泛的 .NET 開發人員社群能夠接近的模型,最後是非開發人員。 雖然一律會有特定層級的領域專業知識,如同任何技術一樣,我們的目標是讓所有 .NET 開發人員能夠快速提升規則模型,並輕鬆地將其納入其應用程式中。
除了提供可方法的模型之外,WF 也提供功能強大的評估引擎,以支援複雜的規則案例,要求向前鏈結評估和精確的評估控制。 這會以一些擴充點的方式傳遞,可讓開發人員在我們的平臺上建置,並提供各種案例支援的規則功能。
本檔提供 WF 中提供之規則功能的技術簡介,以及可用功能及其使用概觀。 本檔結尾是一份其他資源清單,可用來瞭解 WF 中的規則功能。
Windows Workflow Foundation 中的規則概觀
規則技術會在 WF 中以兩種主要方式公開,例如活動的條件,以及原則活動中向前鏈結 RuleSet。 檔稍後將討論向前鏈結;簡短地說,它是指某個規則的動作能夠重新評估其他相依規則。
活動條件
下列四個隨附于 WF 的活動會使用條件:
- IfElseBranch
- While
- Replicator
- ConditionedActivityGroup (CAG)
條件可用來驅動這些活動的執行行為,例如,判斷指定的 IfElseBranch 是否要執行。 條件可以指定為 CodeConditions,其將會在程式碼中設定處理常式,也可以指定為 RuleConditionReference。 RuleConditionReference會指向與工作流程專案中工作流程相關聯之 .rules 檔案中的RuleCondition定義。 Visual Studio 中的體驗如圖 1 所示。
圖 1. WF 規則條件撰寫
新增規則條件
以下是將規則條件新增至 IfElseBranch 活動中位於 IfElse 活動內的步驟:
- 選取具有條件的活動時, (如 [屬性] 方格中顯示 [ 條件 ] 屬性所顯示的 IfElseBranch 活動) 。
- Condition屬性的下拉式清單可讓使用者挑選CodeCondition或RuleConditionReference。
- 如果已選取RuleConditionReference,可以展開 Condition 屬性以查看ConditionName和Expression屬性。
- 提供條件名稱之後, 會選取 Expression 屬性中的省略號來啟動規則條件編輯器。 此編輯器可讓開發人員以文字形式輸入條件,並支援類似 intellisense。 文字會剖析成 RuleCondition的相關聯物件模型表示。
- 選取 [確定] 之後, RuleCondition 定義會序列化為 < 新增至專案的 WorkflowName.rules > 檔案。
若要參考工作流程上的欄位或屬性,您可以在編輯器中輸入此欄位。 輸入點之後,會出現類似 intellisense 的功能表,可讓您在工作流程上挑選成員, (您也可以直接在) 中輸入成員。 也可以進行巢狀呼叫;例如 ,this.order.Total。 您可以在參考型別上呼叫靜態方法,方法是輸入類別名稱,後面接著方法名稱,就像在程式碼中一樣。
下列關係運算子支援運算式:
- 等於 (「=」 或 「=」)
- 大於 (「 > 」)
- 大於或等於 (「 > =」)
- 小於 (「 < 」)
- 小於或等於 (「 < =」)
此外,您可以使用下列算術運算子:
- 新增 (「+」)
- 減去 (「-」)
- 乘 (「*」)
- 除 (「/」)
- 模數 (「MOD」)
運算式可以使用下列運算子來結合/否定:
- AND (「AND」、「 && 」)
- OR (「OR」, 「||」)
- NOT (「NOT」, 「!」)
- 位和 (「 & 」)
- 位或 (「|」)
開發人員使用規則條件而非程式碼條件的主要原因是規則條件會成為模型的一部分,而且可以在執行時間動態更新執行工作流程實例。 規則條件的次要優點是,作為模型的一部分,更複雜的工具可以建置在模型之上,以提供額外的撰寫體驗、相依性管理、跨條件分析等等。
原則活動
原則活動會封裝 RuleSet 的定義和執行。 RuleSet 是具有一組執行語意的規則集合。 規則接著是操作工作流程成員的 If-Then-Else 運算式。 此體驗會顯示在圖 2 中,類似于規則條件所見。
圖 2. WF RuleSet 撰寫
新增原則活動
若要為原則活動設定規則集,請遵循下列步驟:
- 將原則活動從工具箱拖曳至工作流程設計工具。
- 在 RuleSetReference 中,會提供 RuleSet 的名稱。
- 選取 [RuleSet 定義 ] 欄位中的省略號會啟動 [規則集編輯器]。
- 編輯器會在清單方塊中顯示規則集合。
- 選取指定的規則會顯示其 [條件]、[動作]、[Else 動作] 和一組其他屬性。
- 如同規則條件編輯器,條件、Then 動作和 Else 動作會以文字形式輸入,並剖析成相關聯的物件模型表示;規則是針對工作流程上的成員所建置。
- 選取 [確定 ] 會將 RuleSet 序列化為與工作流程相關聯的 .rules 檔案。
請注意,選取 RuleSetReference 屬性中的省略號將會啟動編輯器,讓使用者選取現有的 RuleSet 或新增/重新命名/移除 RuleSet,如圖 3 所示。
圖 3. WF RuleSet 瀏覽器
規則評估
RuleSet 中的每個規則都有預設值為 0的優先順序值。 RuleSet 中的規則可以視為依優先順序值排序的已排序集合。 WF 規則評估工具會個別評估規則,並根據規則條件評估的結果來執行規則的動作。
評估機制可以透過下列程式概念描述:
- 以作用中規則清單開始。
- 找到優先順序最高的規則。
- 評估該規則,並適當的執行其 Then/Else 動作。
- 如果規則的動作會更新清單中上一個規則所使用的欄位/屬性, (優先順序較高的規則) ,請重新評估該先前的規則,並視需要執行其動作。 請注意,只會重新評估具有特定相依性的規則。
- 繼續此程式,直到評估 RuleSet 中的所有規則為止。
讓我們來看一個簡單的範例。 假設您有下列 RuleSet,其中 A、 B等等代表工作流程上的資料。
Rule4 (Priority = 4)
IF A = 15
THEN B = 5
Rule3 (P=3)
IF C = 5
THEN B = 10
Rule2 (P=2)
IF D = 2
THEN A = 15
Rule1 (P=1)
IF B = 5
THEN E = 7
假設您有以下輸入資料:
- A = 0
- B = 0
- C = 5
- D = 2
- E = 0
評估會繼續進行,如下所示:
- 已評估 Rule4;它會評估為 false,因為它沒有 Else 動作,所以不會執行任何動作。
- Rule3 評估為 true ,並執行其動作,設定 B = 10。 Rule4 不相依于 B的值,因此評估會繼續進行 Rule2。
- Rule2 評估為 true ,並執行其動作,設定 A = 15。
- 由於 Rule4 在其條件中使用 A 的值,因此會重新評估。 它會評估為 true 並執行其動作,並設定 B = 5;Rule3 和 Rule2 不會重新評估,因為其條件不會依賴 A的值。先前的規則不取決於 B的值,因此評估會繼續進行 Rule1。
- Rule1 評估為 true ,並執行其動作,設定 E = 7。
產生的資料集現在會是:
- A = 15
- B = 5
- C = 5
- D = 2
- E = 7
正向鏈結
如先前所示,鏈結是以規則之間的已識別相依性為基礎;更具體來說,規則動作與其他規則條件之間的相依性。 這些相依性可以用下列三個方式之一來識別或宣告:
- 隱含
- 以屬性為基礎
- 明確
隱含
引擎會自動識別隱含相依性。 第一次執行 RuleSet 時,會分析每個規則,以評估其在條件中讀取的欄位/屬性,並在其動作中寫入 。 這是藉由在條件和動作中的 語句中逐步執行運算式來完成。 例如,假設下列規則。
規則 1
IF this.subtotal > 10000
THEN this.discount = .05
規則 2
IF this.discount > 0
THEN this.total = (1-this.discount) * this.subtotal
引擎會評估規則,並識別規則 1 會讀取小計欄位並寫入折扣欄位。 規則 2 會讀取折扣和小計欄位,並寫入總計欄位。 因此,規則 2 相依于規則 1;結果是引擎會在規則 1 執行其 Then 動作時,確保評估/重新評估規則 2。
請注意,相依性是在分葉節點層級識別。 採用下列 RuleSet。
規則 1
IF this.order.Subtotal > 10000
THEN this.order.Discount= .05
規則 2
IF this.order.Discount > 0
THEN this.order.Total = (1-this.order.Discount) * this.order.Subtotal
規則 3
IF this.order.CustomerType = "Residential"
THEN ...
規則 1 和 2 之間仍會識別相依性。 不過,規則 3 不會相依于規則 1 或 2,因為兩者都不會更新 CustomerType 屬性。 換句話說,相依性是在 CustomerType 屬性的層級識別,而不是 Order 物件本身。
透過隱含鏈結,WF 會為使用者執行大部分的必要鏈結,因此使用者不需要明確建立更新模型,而且事實上,在大部分情況下,都不需要知道鏈結或它的需求。 我們預期這會讓大部分使用者更直接地建立複雜 RuleSet 的模型,並讓鏈結功能的強大但大部分隱藏的引擎功能的概念更為簡單。 不過,針對更複雜的特定案例,會提供兩個其他機制來驅動鏈結、屬性型和明確。
以屬性為基礎
對於規則內的方法呼叫而言,變得更難決定性地評估發生的讀取/寫入。 為了解決此問題,WF 提供三個屬性,可套用至方法以指出其動作:
- RuleRead
- RuleWrite
- RuleInvoke
使用 RuleRead 屬性來設定方法,表示它會讀取指定的屬性。 同樣地, RuleWrite 屬性也可以用來指出方法會更新指定的欄位或屬性。 假設隱含區段下的前兩個規則已重寫為下列內容。
規則 1
IF this.subtotal > 10000
THEN this.SetDiscount(.05)
規則 2
IF this.discount > 0
THEN this.total = (1-this.discount) * this.subtotal
SetDiscount方法接著可以依照下列方式加以屬性化,這可讓引擎識別規則 2 相依于規則 1,因為使用折扣欄位。
[RuleWrite("discount")]
void SetDiscount(double requestedDiscount)
{
...//some code that updates the discount field
}
RuleInvoke屬性可用來指定相依性,因為連結的方法呼叫。 例如,假設下列規則和方法的修改。
規則 1
IF this.subtotal > 10000
THEN this.SetDiscountWrapper(.05)
規則 2
IF this.discount > 0
THEN this.total = (1-this.discount) * this.subtotal
[RuleInvoke("SetDiscount")]
void SetDiscountWrapper(double requestedDiscount)
{
...
SetDiscount(requestedDiscount);
...
}
[RuleWrite("discount")]
void SetDiscount(double requestedDiscount)
{
}
規則 2 的條件會呼叫 SetDiscountWrapper,其會呼叫 SetDiscount,這會寫入折扣欄位。 RuleInvoke屬性允許引擎宣告和偵測此間接寫入。
請務必辨識屬性路徑中參考的欄位或屬性與 方法位於相同類別上的欄位或屬性,這不一定是傳遞至 RuleSet 以供執行的根物件。 例如,您可以屬性 Order 類別,如下所示。
public class Order
{
private double discount;
public double Discount
{
get { return discount;}
set { discount = value;}
}
[RuleWrite("Discount")]
void CalculateDiscount(double requestedDiscount, double weighting)
{
...//some code that updates the discount field
}
}
接著,您可以在工作流程中使用這個類別的實例,如下所示。
public class Workflow1 : SequentialWorkflowActivity
{
private Order discount;
...
}
接著,執行規則 2 會導致重新評估規則 1。
規則 1
IF this.order.Discount > 5
THEN ...
規則 2
IF ...
THEN this.order.CalculateDiscount( 5.0, .7)
使用屬性的其他幾點:
- 屬性指向 Owner 類別上的欄位/屬性,而不是方法呼叫的參數。
- 萬用字元也可以在規則屬性中使用。 例如, RuleWrite (「order/*」) 可用來指出 「order」 欄位所參考之物件上的所有欄位都會由方法 (修改,此方法會位於工作流程本身,而不是 Order 類別) 。 不過,萬用字元只能在路徑結尾使用; RuleWrite (「*/Discount」 ) 之類的屬性無效。
- RuleWrite (「order」) 之類的屬性可以搭配參考類型使用,以指出參考已變更,例如,表示變數現在指向不同的Order實例。 除了測試實例本身的所有規則之外,也會假設變數上使用欄位/屬性的所有規則都會受到影響,例如 IF this.order == this.order2。
- 如果未指定方法屬性,則預設行為是假設方法呼叫在目標物件上讀取所有欄位/屬性, (叫用方法的物件) 但寫入其中一個。 此外,系統會假設方法會從傳遞給它的參數讀取,但會假設不會寫入其中任何參數。 Out 和 ref 參數假設在規則動作中使用時寫入。
明確
指出欄位/屬性相依性的最後一個機制是透過使用 Update 語句。 Update語句會採用其引數,代表欄位或屬性的路徑,或是代表欄位/屬性存取的運算式。 例如,下列兩個語句之一可以輸入 RuleSet 編輯器,在工作流程上Customer實例的Name屬性上建立Update語句。
Update("this/customer/Name")
OR
Update(this.customer.Name)
Update語句表示規則會寫入指定的欄位/屬性。 這與規則中的欄位/屬性直接集合相同,或是針對欄位/屬性呼叫 具有 RuleWrite 屬性的方法。
Update命令也支援使用萬用字元。 例如,您可以將下列 Update 命令新增至規則。
Update("this/customer/*")
這會導致重新評估 客戶 實例上任何屬性的任何規則。 換句話說,會重新評估下列兩個規則。
IF this.customer.ZipCode == 98052
THEN ...
IF this.customer.CreditScore < 600
THEN ...
一般而言,使用者通常不需要在大部分情況下建立明確的 Update 語句模型。 隱含鏈結應該在大部分情況下提供必要的相依性分析和鏈結行為。 方法嘗試應該支援隱含鏈結無法識別相依性的最常見案例。 一般而言,方法推斷是用來指出相依性超過 Update 語句使用方式的慣用方法,因為可以在 方法上識別相依性一次,並跨使用該方法的許多不同規則加以運用。 此外,在規則寫入器和方法實作者是不同的個人 (,或在不同時間完成工作) ,方法觸發可讓方法寫入器知道程式碼最佳,以識別方法的相依性。
不過,在某些情況下, Update 語句會是適當的解決方案,例如,當欄位/屬性傳遞至工作流程寫入器無法控制且因此無法屬性的類別上的方法時,如下列程式碼所示。
IF ...
THEN this.customer.UpdateCreditScore(this.currentCreditScore)
Update(this.currentCreditScore)
向前鏈結控制項
向前鏈結是一個非常強大的概念,可讓不可部分完成的規則組合成 RuleSet,而不需要定義規則之間的相依性,或甚至甚至知道規則的相依性。
不過,在某些情況下,規則寫入器可能會希望能夠對鏈結行為提供更多控制權,特別是限制發生的鏈結能力。 這可讓規則模型工具:
- 限制規則的重複執行,這可能造成不正確的結果。
- 提高效能。
- 防止失控迴圈。
這兩個屬性會在 WF 規則中促進此層級的控制:
- RuleSet 上的 鏈結行為 屬性。
- 每個規則上的 重新評估行為 屬性。
這些值都可在 RuleSet 編輯器中設定。
鏈結行為屬性
RuleSet 上的 Chaining Behavior 屬性有三個可能的值:
- 完整鏈結
- 明確鏈結
- 循序
[完整鏈結] 選項是預設值,並提供目前為止所述的行為。 [明確鏈結] 選項會關閉隱含和屬性型鏈結,並規定只有明確的Update語句才會發生鏈結。 這可讓規則寫入器完全控制哪些規則造成重新評估。 一般而言,這可用來避免造成過度 (或甚至無法執行) 規則的迴圈相依性,或藉由排除不需要的多餘的規則重新評估來提升效能,以提供 RuleSet 的功能完整性。
最後一個選項是 循序。 此選項會導致引擎以嚴格線性的方式評估規則。 每個規則都會依優先順序評估一次和一次。 優先順序較高的規則可能會影響優先順序較低的規則,但反向則不會發生,因為不會發生鏈結。 因此,這個選項可以與明確的優先權指派搭配使用,除非這些規則間沒有相依性。
重新評估行為屬性
規則上的重新評估行為有兩個可能的值:
- 永遠
- 永不
一律 是預設值,並提供先前討論的行為,也就是由於其他規則的動作,規則一律會根據鏈結重新評估。 永不,如名稱所示,關閉此重新評估。 如果規則先前已執行任何動作,則會評估一次,但不會重新評估規則。 換句話說,如果先前已評估規則,因而執行其 Then 或 Else 動作,則不會重新評估。 不過, 在 Then 或 Else 動作中執行空白動作集合並不會將規則標示為已執行。
一般而言,此屬性會在規則層級使用,以防止因為規則本身的動作或其他規則上具有的相依性而造成無限迴圈。 例如,下列規則會建立自己的無限迴圈,而且不需要重新評估,才能滿足規則的功能需求。
IF this.shippingCharge < 2.5 AND this.orderValue > 100
THEN this.shippingCharge = 0
或者,如果規則是要重新評估,但只有在 OrderValue 欄位變更時,使用者才能將 RuleSet 上的鏈結行為設定為只在明確的 Update 語句上 (,然後將這些 Update 語句新增至相關的規則動作) 。 當然,使用者可以將額外的述詞新增至此規則,以檢查 ShippingCost 的值尚未 為 0,但鏈結控制項會移除使用者根據評估詳細資料定義其規則的需求,而不是其商務需求。
Halt 函式
作為最後一個控制項, 您可以新增 Halt 函式作為規則動作, (只要在編輯器的 Then 或 Else 動作方塊中輸入 「Halt」) 即可。 這會立即停止 RuleSet 執行,並將控制權傳回給呼叫端程式碼。 當然,這個函式的用處不僅僅是鏈結控制項的案例。 例如,具有特定功能目標的 RuleSet 可能會在達到目標之後,使用 Halt 函式來縮短執行。
其他模型化討論區
優先順序型執行
如上一節所述,如果使用者想要 RuleSet 的特定執行順序或該 RuleSet 中的規則子集,他們可以使用規則上的優先順序欄位精確定義此序列。 這麼做通常會移除鏈結的需求,而且使用者甚至可以在這些案例中關閉鏈結。 我們發現在許多情況下,只要提供明確的執行順序,即可符合規則相依性。
不過,請務必注意,WF 中的向前執行機制可讓使用者定義執行順序,但不需要他們這麼做。 在大部分情況下,正向鏈結行為會讓指派規則優先順序不必要,以達到正確的 RuleSet 結果,因為引擎會自動管理關聯性以確保符合規則相依性。
採用下列規則。
規則 1
IF this.Weather.Temperature < 50
THEN this.Drink.Style = "Latte"
規則 2
IF this.Drink.Style == "Latte"
THEN this.Snack.Style = "Scone"
ELSE this.Snack.Style = "Muffin"
在 WF 中,您可以在規則 1 上提供較高的優先順序,以便先執行。 這可確保在評估規則 2 之前設定 了 Drink.Style 。
不過,不需要排序才能取得所需的結果。 假設第一次評估規則 2。 在此情況下, Drink.Style 可能是 Null 或可能是另一種樣式。 這會導致要設定為Muffin的要有一個。。 不過,在規則 1 執行並將 Drink.Style 設定為 Latte之後,規則 2 會重新評估,並將 [一律][樣式 ] 設定為 Scone。 基本上,使用者可以選擇聽寫排序,但在許多情況下不需要這麼做。
集合處理
在某些情況下,您可能需要針對集合中個別的所有專案評估規則。 您可以透過許多方式逐一查看集合,但其中一種方式是使用如下的規則模式:
規則 1 (優先順序 = 2)
//always execute this rule once to create the enumerator
IF 1==1
THEN this.enumerator = this.myCollection.GetEnumerator()
規則 2 (Priority = 1)
IF this.enumerator.MoveNext()
THEN this.currentInstance = this.enumerator.Current
規則 3-N (優先順序 = 0)
.... //additional rules written against this.currentInstance
規則 N+1 (Priority = -1)
// can be any condition as long as it is evaluated every time;
// this.currentInstance will be evaluated each time
//this.currentInstance changes, whereas
// "1==1" would only be evaluated once
IF this.currentInstance == this.currentInstance
THEN ...
Update("this/enumerator") //this will cause Rule 2 to be reevaluated
ELSE ...
Update("this/enumerator")
追蹤和追蹤
追蹤
當 RuleSet 執行時,追蹤事件會傳送至已在已註冊這些事件的主機上設定的追蹤服務,方法是將 UserTrackPoint 新增至其追蹤設定檔。 會傳送 RuleActionTrackingEvent,以提供已評估的規則名稱,以及條件評估結果 (true/false) 。 如需範例,請參閱 SDK 中的 RuleActionTrackingEvent 範例。
活動上的規則條件評估結果可由追蹤活動執行隱含追蹤。
追蹤
將下列內容新增至應用程式組態檔,即可將其他 RuleSet 評估資訊傳送至記錄檔。
<configuration>
<system.diagnostics>
<switches>
<add name="Rules" value="Information"/>
</switches>
</system.diagnostics>
</configuration>
下列資訊會傳送至記錄檔:
-
條件相依性資訊:
- 例子: 規則 「ReturnNumberOfStops」 條件相依性:「this/currentFlight/OutboundFlight/NumberOfStops/」
-
動作副作用資訊:
- 例子: 規則 「ReturnNumberOfStops」 THEN 副作用:「this/currentFlight/Score/」
-
鏈結關聯性:
- 例子: 規則 「ReturnNumberOfStops」 THEN 動作觸發規則 「Approved一」
-
RuleSet 執行:
- 例子: 規則:「執行 RuleSet FlightRuleSet」
-
條件評估:
- 例子: 規則:評估規則 「SetDefaultScore」 的條件
-
條件評估結果:
- 例子: 規則:條件評估為 True
-
動作執行:
- 例子: 規則:評估 rule「SetDefaultScore」 的 THEN 動作
所有追蹤訊息目前都定義在「資訊」層級,因此您應該在組態檔中指定資訊層級或詳細資訊層級,以查看規則追蹤。
結論
WF 提供彈性的規則功能,可透過許多不同的方式運用來支援各種案例。 從簡單的活動條件到複雜的轉送鏈結 RuleSet,這項技術可讓您順暢地將規則支援整合到工作流程中。 此外,規則引擎也可以在工作流程外部利用,為任何 .NET 應用程式提供規則功能。
此功能集可讓新的開發人員輕鬆地將簡單的規則併入工作流程,同時仍提供豐富性和擴充性,以支援更進階的 RuleSet 和應用程式案例。 本檔與下一節所述的資源結合,應協助 WF 規則的開發人員瞭解技術,並利用其使用快速提高生產力。
詳細資訊
-
許多檔和網路廣播和實驗室的連結。
-
- 外部 RuleSet 工具組— 提供如何從工作流程元件將規則外部化的範例。
- RuleSet 分析—一種工具,可用來分析 RuleSet,以取得規則與規則與資料之間的關聯性。
- Excel 中的規則— 提供如何在工作流程外部獨立使用規則的範例。 也示範如何以程式設計方式建立透過 Excel 中的決策表所撰寫的規則。
SDK 範例
- IfElseWithRules — 會顯示在 \Technologies\RulesAndConditions) 底下 IfElse 活動 (RuleConditions 上的 RuleCondition。
- DynamicUpdateChangingRules — 示範如何使用動態更新 API,在執行中的工作流程實例上變更 RuleCondition, (\Technologies\RulesAndConditions) 。
- SimplePolicy - 示範如何使用 API 來定義簡單的 RuleSet 和原則活動, (\Technologies\Activities\Policy) 。
- AdvancedPolicy — 定義更複雜的 RuleSet (\Technologies\Activities\Policy) 。
- RuleActionTrackingEventSample —示範如何在追蹤提供者中擷取規則評估結果, (\Technologies\Tracking) 。
-
- 如需一般 WF 規則或 WF 的相關問題,請造訪此討論論壇。
關於作者
Jurgen Willis 是 Windows Workflow Foundation 小組的專案經理,負責規則引擎技術和規則驅動活動。 在加入 Microsoft 之前,Jurgen 設計並實作了適用于愛爾蘭 500 家公司的整合與程式管理解決方案。