通常情况下,我们都是使用PolicyActivity活动来执行RuleSet。除了这种方式我们还可以用代码的方式来执行。首先我们建立一个项目,借助PolicyActivity的的规则编辑器来构造一个最简单的RuleSet,该RuleSet包括一个最简单的规则为RuleTest,如下表:
Rule | Conditon | ThenAction | ElseAction |
RuleTest | True | System.Console.WriteLine("Hello World") |
以代码方式执行RuleSet
规则集建立完成后会生成对应的.Rules文件,这时候我们就可以删掉PolicyActivity,添加一个CodeActivity活动来以代码的方式执行RuleSet,代码如下:
Assembly assembly = Assembly.GetAssembly(typeof(Workflow1)); Stream stream = assembly.GetManifestResourceStream("Workflow1.rules"); using (XmlReader xmlReader = XmlReader.Create(new StreamReader(stream))) { WorkflowMarkupSerializer markupSerializer = new WorkflowMarkupSerializer(); RuleDefinitions ruleDefinitions = markupSerializer.Deserialize(xmlReader) as RuleDefinitions; if (ruleDefinitions != null) { if (ruleDefinitions.RuleSets.Contains("CaryRuleSetTest")) { RuleSet rs = ruleDefinitions.RuleSets["CaryRuleSetTest"]; RuleValidation validation = new RuleValidation(typeof(Workflow1), null); if (rs.Validate(validation)) { RuleExecution execution = new RuleExecution(validation, this); rs.Execute(execution); } else { foreach (ValidationError error in validation.Errors) { Console.WriteLine(error.ErrorText); } } } } }
以代码方式构造RuleSet
上面的例子中我们以代码的方式执行了RuleSet,这个RuleSet是利用PolicyActivity的规则编辑器生成的.Rules文件,我们也可以使用CodeDom技术来构造一个RuleSet,我们就以上面的RuleSet为例,构造一个同样的RuleSet并执行,代码如下:
RuleSet rs = new RuleSet("CaryRuleSetTest"); Rule RuleTest = new Rule("RuleTest");
//condition:true CodePrimitiveExpression condition = new CodePrimitiveExpression(true); RuleTest.Condition = new RuleExpressionCondition(condition);
//ThenActions:System.Console.WriteLine("Hello World") CodeExpressionStatement then = new CodeExpressionStatement( new CodeMethodInvokeExpression( new CodeTypeReferenceExpression("System.Console"), "WriteLine", new CodePrimitiveExpression("Hello World2!"))); RuleTest.ThenActions.Add(new RuleStatementAction(then)); rs.Rules.Add(RuleTest); RuleValidation validation= new RuleValidation(typeof(Workflow2), null); if (rs.Validate(validation)) { RuleExecution execution = new RuleExecution(validation, this); rs.Execute(execution); } else { foreach (ValidationError error in validation.Errors) { Console.WriteLine(error.ErrorText); } }
执行的效果如下图:
发表评论
-
平淡的2007
2007-12-24 08:04 816早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1414今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 891[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 639[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 783[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1147[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 928当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 835Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 844在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 695我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1187MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 704本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 837本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 760WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1060由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 799[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 691[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 735[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1106一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 950首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
坚持学习WF(23):以代码的方式构造和执行RuleSet WF提供了非常灵活,强大和简单易懂的规则引擎。这几篇文章介绍了WF中规则引擎的相关知识。 坚持学习WF(24):WF中的异常处理 坚持学习WF(25):取消容器...
坚持学习WF(20):规则引擎中的活动条件 坚持学习WF(21):规则引擎中的RuleSet 坚持学习WF(22):跟踪规则 坚持学习WF(23):以代码的方式构造和执行RuleSet WF提供了非常灵活,强大和简单易懂的规则引擎。这几篇文章介绍...
WF,全称Windows Workflow Foundation,是微软.NET Framework的一部分,用于构建和执行工作流应用程序。WF提供了一种在.NET环境中表达业务流程的方式,使得开发者能够更有效地管理复杂的业务逻辑。本资源"WF从入门到...
WF是微软提供的一种用于构建业务流程和规则引擎的框架,它使得开发者能够以声明式的方式定义业务逻辑,极大地简化了复杂流程的管理。 WF的核心概念包括活动(Activity)、工作流(Workflow)和服务(Service)。...
PMD_ruleset规则文件,已经最基本的验证进行了导入。在Eclipse导入即可
当前将其设置为"homepage": "/ruleset-generator/"以满足zgif.org的要求。 从此目录运行: npm run build以在/ build中获取构建工件。 用法 局限性 如果XSD无效,此应用程序将中断; 例如,在中没有Account 。 ...
通过深入研究RuleSet-master中的代码,我们可以学习如何创建、管理和执行自定义的规则集,以及如何将它们应用于实际问题中。这有助于提升软件的灵活性和可维护性,使系统能够更好地适应不断变化的业务需求。
checkstyle_ruleset_minimal.xml
此chrome扩展程序可直观显示您的数据在应用程序中的流动方式。 如果使用redux-ruleset对整个数据流进行建模,那么您不仅可以直观地看到数据为何流动,还可以看到为什么数据不流动。 这是一个早期产品,所以也许您会...
规则包中的javabean内容规则包中的javabean内容规则包中的javabean内容规则包中的javabean内容规则包中的javabean内容
- **条件节点(RuleSet Node)**: 触发特定规则集的执行,根据规则结果影响流程走向。 - **行动节点(Action Node)**: 执行特定的Java代码,可以用来处理业务逻辑或改变流程状态。 - **事件节点(Event Node)**...
`wazuh-ruleset-master`可能是Wazuh规则集的一个版本仓库,包含了规则文件的源代码或配置。用户需要按照官方文档的指引,将这些规则导入到Wazuh服务器中,然后配置代理以应用这些规则。 总结起来,Wazuh规则集是...
`commons-digester.jar`是Apache Commons项目中的一个组件,主要功能是解析XML文档并根据预定义的规则自动创建和填充Java对象。这个组件在Java应用程序中尤其有用,特别是那些需要从XML配置文件中构建复杂对象层次...
Flex PMD的运作方式是通过扫描AS3源代码,并应用一系列预定义的规则来评估代码质量。这些规则涵盖了多种方面,如冗余代码、未使用的变量、复杂的条件语句、过度嵌套的循环,以及不推荐的API使用等。每个规则都会在...
用于terraform-provider-azurerm的TFLint规则集 适用于Azure的Terraform Provider的TFLint规则集插件(资源管理器)要求TFLint v0.24 + 前往v1.16安装下载插件并将其放在~/.tflint.d/plugins/tflint-ruleset-azurerm...
本篇将重点介绍三个常用的静态代码检测工具:Checkstyle、PMD和FindBugs,并探讨如何快速接入这些工具以提升代码质量。 首先,Checkstyle是一个开源的Java代码规范检查工具,它可以帮助开发者遵循特定的编程标准和...
学习 Digester,我们需要理解它的核心概念,如Rule、RuleSet和LinkRule等,并能熟练创建和配置这些规则以满足特定需求。 【标签】:“Digester读取XML学习” 1. Digester:Apache Commons Digester库的核心,负责...
Flex PMD 是一款针对Flex开发的代码质量检查工具,它主要的作用是对Flex项目中的ActionScript 3(AS3)代码进行静态分析,发现潜在的编程问题、代码异味和不规范的编码习惯。PMD(Probable Bugs, Maintainability, ...