`

坚持学习WF(20):规则引擎中的活动条件

阅读更多

[置顶]坚持学习WF文章索引

WF中提供了非常灵活的规则引擎,主要表现为两种形式即活动上的条件和规则集RuleSet。本文我们来详细说说活动上的条件。

WF本身提供的活动中有以下几个活动可以使用条件:

  • IfElseBranchActivity,它包含在 IfElseActivity 活动中,在具有的条件计算结果为 True 时执行。

  • WhileActivity 只要活动的条件计算结果为true,它就会连续执行所包含的任何活动。每次循环完成时重新计算该条件。

  • ConditionedActivityGroup 连续执行所包含的任何活动,直到其条件计算结果为 true。 ConditionedActivityGroup 中的每个单个活动都具有 When 条件。 仅当 When 条件计算结果为 true 时才执行各个活动。

  • ReplicatorActivity 在其 UntilCondition 属性计算结果为 true 时完成执行。

我们可以在自己创建的自定义活动中使用条件。我们有两种方式来设置条件,一种是声明行规则条件,将被序列化到.rules文件中,另一种是代码条件,我们通过自己编写程序来设置条件,最后使用Result 属性返回。如下图所示:

WFRule1

表达式中支持下列关系操作符:

等号("=="或"=")

大于号(">")

大于等于号(">=")

小于号("<")

小于等于号("<=")

可以使用下列算术操作符:

加号("+")

减号("-")

乘号("*")

除号("/")

取模("MOD")

可以使用下列操作符合并/否定表达式:

与("AND"或"&&")

或("OR"或"||")

非("NOT"或"!")

按位与("&")

按位或("|")

使用代码方式比较简单,我们只要在系统生成的事件处理函数中写我们的逻辑代码就可以,最后设置参数ConditionalEventArgs的Result属性为返回值。条件被编译并成为程序集的一部分。 运行时引擎执行该方法并使用 Result 属性作为条件计算的结果。

我们来看看当我们使用规则条件时WF为我们做了什么?他会将规则条件序列化到.rules文件中,然后创建新的 RuleConditionReference。将ConditionName 属性设置为等于 .rules 文件中RuleExpressionCondition 元素的Name 属性值。最后在将Condition 属性设置为刚刚创建的RuleConditionReference。生成的代码如下:

    System.Workflow.Activities.Rules.RuleConditionReference ruleconditionreference1 = new 
System.Workflow.Activities.Rules.RuleConditionReference(); this.ifElseBranchActivity1 = new System.Workflow.Activities.IfElseBranchActivity(); ruleconditionreference1.ConditionName = "rule1"; this.ifElseBranchActivity1.Condition = ruleconditionreference1; this.ifElseBranchActivity1.Name = "ifElseBranchActivity1";
   
了解了这个过程我们来看看.Rules文件中的内容,我们上面简单为IfElseActivity设置了一个简单的规则条件生成的
.rules如下:
   
<RuleDefinitions xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
    <RuleDefinitions.Conditions>
        <RuleExpressionCondition Name="rule1">
            <RuleExpressionCondition.Expression>
                <ns0:CodeBinaryOperatorExpression Operator="ValueEquality" xmlns:ns0="clr-
namespace:System.CodeDom;Assembly=System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089
"> <ns0:CodeBinaryOperatorExpression.Left> <ns0:CodePropertyReferenceExpression PropertyName="Test"> <ns0:CodePropertyReferenceExpression.TargetObject> <ns0:CodeThisReferenceExpression /> </ns0:CodePropertyReferenceExpression.TargetObject> </ns0:CodePropertyReferenceExpression> </ns0:CodeBinaryOperatorExpression.Left> <ns0:CodeBinaryOperatorExpression.Right> <ns0:CodePrimitiveExpression> <ns0:CodePrimitiveExpression.Value> <ns1:String xmlns:ns1="clr-namespace:System;Assembly=mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
"></ns1:String> </ns0:CodePrimitiveExpression.Value> </ns0:CodePrimitiveExpression> </ns0:CodeBinaryOperatorExpression.Right> </ns0:CodeBinaryOperatorExpression> </RuleExpressionCondition.Expression> </RuleExpressionCondition> </RuleDefinitions.Conditions> </RuleDefinitions>
    
我们可以清晰的看到,生成的.rules文件中规则以代码 DOM 语句的形式表示。WF使用.NET Framework 中的 System.CodeDom 
提供的类型。可以使用这些类型来创作您的条件。 一些类型在条件中受支持,一些类型在规则操作中受支持,一些类型在两者中都
受支持。
   
下列各表显示支持的 System.CodeDom 类型。

类     用于
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 条件,操作

 

这两种方式我们比较推荐使用规则条件,因为他是规则引擎中的一部分可以更灵活而且可以在工作流实例运行后动态的更新。

分享到:
评论

相关推荐

    坚持学习WF,WF学习教程

    坚持学习WF(20):规则引擎中的活动条件 坚持学习WF(21):规则引擎中的RuleSet 坚持学习WF(22):跟踪规则 坚持学习WF(23):以代码的方式构造和执行RuleSet WF提供了非常灵活,强大和简单易懂的规则引擎。这几篇文章...

    C# 利用 WF 实现规则引擎

    在标题“C# 利用 WF 实现规则引擎”中,我们可以推断出,这个项目是利用WWF的活动和工作流概念来构建一个规则引擎。规则引擎的核心在于能够定义、存储和执行一系列规则,这些规则可以影响应用程序的行为。通过使用...

    WF教程_坚持学习WF

    坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty) 坚持学习WF(5):自定义活动(CustomActivity) 4.5两篇对主要对活动(Actibity)的介绍和依赖属性(DependencyObject)和DependencyProperty事件的使用。 ...

    坚持学习WF

    坚持学习WF(20):规则引擎中的活动条件 坚持学习WF(21):规则引擎中的RuleSet 坚持学习WF(22):跟踪规则 坚持学习WF(23):以代码的方式构造和执行RuleSet WF提供了非常灵活,强大和简单易懂的规则引擎。这几篇文章介绍...

    基于 WF 的规则引擎 超级简单

    【基于WF的规则引擎超级简单】这一主题主要围绕着Windows Workflow Foundation (WF) 和规则引擎在C#开发中的应用展开。WF是微软提供的一种用于构建业务流程和规则引擎的框架,它使得开发者能够以声明式的方式定义...

    坚持学习WF(1):从HelloWorld开始 源码

    在本篇“坚持学习WF(1):从HelloWorld开始”的源码分析中,我们将深入理解WF的基础知识和创建第一个工作流的步骤。 首先,让我们了解WF的基本概念。WF提供了一种模型化业务流程的方式,通过活动(Activities)来表示...

    坚持学习WF(5):自定义活动(CustomActivity) 源码

    在Windows Workflow Foundation (WF)中,自定义活动(CustomActivity)是开发人员根据特定业务需求创建的自定义工作流组件。本篇文章将深入探讨如何利用C#编程语言创建自定义活动,并通过源码分析来理解其工作原理。...

    WF从入门到精通(第十二章):策略和规则源码

    当工作流中的某个事件触发时,规则引擎会检查所有关联的规则,并执行符合条件的规则。 4. **规则触发器**:工作流中的某些活动可以作为规则触发器,例如,当接收到新数据或者完成特定任务时,触发规则的评估。 5. ...

    Microsoft WF 活动实例

    本教程针对WF初学者,将深入探讨WF中的各种活动及其使用实例。 ### 一、WF基础概念 1. **活动(Activity)**: 在WF中,活动是最基本的构建块,代表了工作流中的一个操作或一组操作。活动可以是内置的,如顺序执行...

    WF工作流学习资料

    WF工作流(Windows Workflow Foundation,简称WF)是微软.NET Framework的一部分,它提供了一种用于构建应用程序的模型,这种应用程序能够根据预定义的规则和步骤自动执行业务流程。WF结合了业务流程管理(BPM)和...

    工作流程图-规则引擎图(javascript)

    在给定的压缩包文件中,"data_rule.jpg"和"channel_rule.jpg"可能包含了示例的规则引擎图,而"wf.jpg"可能是工作流程图的示例。"flow"和"rule"两个文件夹可能包含了与工作流程和规则相关的代码或数据。"Adobe SVG ...

    WF4 自定义容器活动

    自定义容器活动是在WF4中创建自己的复合活动,可以包含其他活动,类似于在流程图中使用一个形状来封装多个子步骤。下面我们将深入探讨如何实现WF4自定义容器活动,并在自定义活动中添加其他活动。 一、理解WF4...

    基于WF工作流引擎的 高效OA 源码

    WF提供了多种工作流活动,如顺序流、并行流、条件分支等,开发者可以通过这些组件组合创建出灵活的业务逻辑。此外,WF还支持持久化,即工作流实例可以在任何时间点暂停,并在需要时恢复,这对于处理长时间运行或需要...

    WF从入门到精通的源码.

    5. **规则引擎**:WF内置了规则引擎,允许在运行时更改业务规则,而无需重新部署工作流。 6. **跟踪和诊断**:WF提供了丰富的跟踪和诊断工具,便于调试和监控工作流执行情况。 7. **工作流版本管理**:WF支持版本...

    【翻译】WF从入门到精通(第一章):WF简介源代码下载

    此外,WF还提供了一种强大的规则引擎,使得工作流中的决策逻辑可以动态改变,适应不断变化的业务需求。 源代码下载是学习WF的重要途径,通过实际操作,你可以更深入地理解WF的内部工作机制。PCodeFlow可能包含了...

    Windows工作流(WF .NET 3.5)

    6. **规则引擎(Policy Engine)**:WF集成的规则引擎允许在工作流中添加条件和决策,这些规则可以根据业务规则动态更改。 压缩包中的书籍《[2008] - Pro WF Windows Workflow in.NET 3.5 (Pro) - [Apress] - ...

    WF从入门到精通源码和中文版pdf

    4. **规则和条件**:WF提供了强大的规则引擎,允许在工作流中动态改变行为。这部分内容可能包括如何定义和使用规则表达式,以及如何根据条件控制流程的执行。 5. **工作流服务**:WF结合WCF(Windows Communication...

Global site tag (gtag.js) - Google Analytics