<a href="http://www.cnblogs.com/carysun/archive/2008/05/29/WF.html">[置頂]堅持學習WF文章索引</a>
WF中提供了非常靈活的規則引擎,主要表現為兩種形式即活動上的條件和規則集RuleSet。本文我們來詳細說說活動上的條件。
WF本身提供的活動中有以下幾個活動可以使用條件:
IfElseBranchActivity,它包含在 IfElseActivity 活動中,在具有的條件計算結果為 True 時執行。
WhileActivity 隻要活動的條件計算結果為true,它就會連續執行所包含的任何活動。每次循環完成時重新計算該條件。
ConditionedActivityGroup 連續執行所包含的任何活動,直到其條件計算結果為 true。 ConditionedActivityGroup 中的每個單個活動都具有 When 條件。 僅當 When 條件計算結果為 true 時才執行各個活動。
ReplicatorActivity 在其 UntilCondition 屬性計算結果為 true 時完成執行。
我們可以在自己建立的自定義活動中使用條件。我們有兩種方式來設定條件,一種是聲明行規則條件,将被序列化到.rules檔案中,另一種是代碼條件,我們通過自己編寫程式來設定條件,最後使用Result 屬性傳回。如下圖所示:

表達式中支援下列關系操作符:
等号("=="或"=")
大于号(">")
大于等于号(">=")
小于号("<")
小于等于号("<=")
可以使用下列算術操作符:
加号("+")
減号("-")
乘号("*")
除号("/")
取模("MOD")
可以使用下列操作符合并/否定表達式:
與("AND"或"&&")
或("OR"或"||")
非("NOT"或"!")
按位與("&")
按位或("|")
使用代碼方式比較簡單,我們隻要在系統生成的事件處理函數中寫我們的邏輯代碼就可以,最後設定參數ConditionalEventArgs的Result屬性為傳回值。條件被編譯并成為程式集的一部分。 運作時引擎執行該方法并使用 Result 屬性作為條件計算的結果。
我們來看看當我們使用規則條件時WF為我們做了什麼?他會将規則條件序列化到.rules檔案中,然後建立新的 RuleConditionReference。将ConditionName 屬性設定為等于 .rules 檔案中RuleExpressionCondition 元素的Name 屬性值。最後在将Condition 屬性設定為剛剛建立的RuleConditionReference。生成的代碼如下:
類
用于
CodeArrayIndexerExpression
條件,操作
CodeAssignStatement
操作
CodeBinaryOperatorExpression
CodeCastExpression
CodeDirectionExpression
CodeExpressionStatement
CodeFieldReferenceExpression
CodeIndexerExpression
CodeMethodInvokeExpression
CodeMethodReferenceExpression
CodePrimitiveExpression
CodePropertyReferenceExpression
CodeThisReferenceExpression
CodeTypeReference
做為表達式的一部分
CodeTypeReferenceExpression
CodeBinaryOperatorType
支援上下文
Add
BitwiseAnd
BitwiseOr
BooleanAnd
BooleanOr
Divide
GreaterThan
GreaterThanOrEqual
IdentityEquality
IdentityInequality
LessThan
LessThanOrEqual
Modulus
Multiply
Subtract
ValueEquality
這兩種方式我們比較推薦使用規則條件,因為他是規則引擎中的一部分可以更靈活而且可以在工作流執行個體運作後動态的更新。
本文轉自生魚片部落格園部落格,原文連結:http://www.cnblogs.com/carysun/archive/2008/09/17/WFRule.html,如需轉載請自行聯系原作者