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。生成的代码如下:
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 | 条件,操作 |
这两种方式我们比较推荐使用规则条件,因为他是规则引擎中的一部分可以更灵活而且可以在工作流实例运行后动态的更新。
发表评论
-
平淡的2007
2007-12-24 08:04 813早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1410今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 888[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 634[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 782[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1141[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 918当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 834Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 841在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 692我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1176MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 701本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 829本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 754WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1054由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 792[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 687[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 730[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1099一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 945首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
坚持学习WF(20):规则引擎中的活动条件 坚持学习WF(21):规则引擎中的RuleSet 坚持学习WF(22):跟踪规则 坚持学习WF(23):以代码的方式构造和执行RuleSet WF提供了非常灵活,强大和简单易懂的规则引擎。这几篇文章...
在标题“C# 利用 WF 实现规则引擎”中,我们可以推断出,这个项目是利用WWF的活动和工作流概念来构建一个规则引擎。规则引擎的核心在于能够定义、存储和执行一系列规则,这些规则可以影响应用程序的行为。通过使用...
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty) 坚持学习WF(5):自定义活动(CustomActivity) 4.5两篇对主要对活动(Actibity)的介绍和依赖属性(DependencyObject)和DependencyProperty事件的使用。 ...
坚持学习WF(20):规则引擎中的活动条件 坚持学习WF(21):规则引擎中的RuleSet 坚持学习WF(22):跟踪规则 坚持学习WF(23):以代码的方式构造和执行RuleSet WF提供了非常灵活,强大和简单易懂的规则引擎。这几篇文章介绍...
【基于WF的规则引擎超级简单】这一主题主要围绕着Windows Workflow Foundation (WF) 和规则引擎在C#开发中的应用展开。WF是微软提供的一种用于构建业务流程和规则引擎的框架,它使得开发者能够以声明式的方式定义...
在本篇“坚持学习WF(1):从HelloWorld开始”的源码分析中,我们将深入理解WF的基础知识和创建第一个工作流的步骤。 首先,让我们了解WF的基本概念。WF提供了一种模型化业务流程的方式,通过活动(Activities)来表示...
在Windows Workflow Foundation (WF)中,自定义活动(CustomActivity)是开发人员根据特定业务需求创建的自定义工作流组件。本篇文章将深入探讨如何利用C#编程语言创建自定义活动,并通过源码分析来理解其工作原理。...
当工作流中的某个事件触发时,规则引擎会检查所有关联的规则,并执行符合条件的规则。 4. **规则触发器**:工作流中的某些活动可以作为规则触发器,例如,当接收到新数据或者完成特定任务时,触发规则的评估。 5. ...
本教程针对WF初学者,将深入探讨WF中的各种活动及其使用实例。 ### 一、WF基础概念 1. **活动(Activity)**: 在WF中,活动是最基本的构建块,代表了工作流中的一个操作或一组操作。活动可以是内置的,如顺序执行...
WF工作流(Windows Workflow Foundation,简称WF)是微软.NET Framework的一部分,它提供了一种用于构建应用程序的模型,这种应用程序能够根据预定义的规则和步骤自动执行业务流程。WF结合了业务流程管理(BPM)和...
在给定的压缩包文件中,"data_rule.jpg"和"channel_rule.jpg"可能包含了示例的规则引擎图,而"wf.jpg"可能是工作流程图的示例。"flow"和"rule"两个文件夹可能包含了与工作流程和规则相关的代码或数据。"Adobe SVG ...
自定义容器活动是在WF4中创建自己的复合活动,可以包含其他活动,类似于在流程图中使用一个形状来封装多个子步骤。下面我们将深入探讨如何实现WF4自定义容器活动,并在自定义活动中添加其他活动。 一、理解WF4...
WF提供了多种工作流活动,如顺序流、并行流、条件分支等,开发者可以通过这些组件组合创建出灵活的业务逻辑。此外,WF还支持持久化,即工作流实例可以在任何时间点暂停,并在需要时恢复,这对于处理长时间运行或需要...
5. **规则引擎**:WF内置了规则引擎,允许在运行时更改业务规则,而无需重新部署工作流。 6. **跟踪和诊断**:WF提供了丰富的跟踪和诊断工具,便于调试和监控工作流执行情况。 7. **工作流版本管理**:WF支持版本...
此外,WF还提供了一种强大的规则引擎,使得工作流中的决策逻辑可以动态改变,适应不断变化的业务需求。 源代码下载是学习WF的重要途径,通过实际操作,你可以更深入地理解WF的内部工作机制。PCodeFlow可能包含了...
6. **规则引擎(Policy Engine)**:WF集成的规则引擎允许在工作流中添加条件和决策,这些规则可以根据业务规则动态更改。 压缩包中的书籍《[2008] - Pro WF Windows Workflow in.NET 3.5 (Pro) - [Apress] - ...
4. **规则和条件**:WF提供了强大的规则引擎,允许在工作流中动态改变行为。这部分内容可能包括如何定义和使用规则表达式,以及如何根据条件控制流程的执行。 5. **工作流服务**:WF结合WCF(Windows Communication...