`

坚持学习WF(23):以代码的方式构造和执行RuleSet

阅读更多

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

通常情况下,我们都是使用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); } }
执行的效果如下图:
RuleSetCode1 
分享到:
评论

相关推荐

    坚持学习WF,WF学习教程

    坚持学习WF(23):以代码的方式构造和执行RuleSet WF提供了非常灵活,强大和简单易懂的规则引擎。这几篇文章介绍了WF中规则引擎的相关知识。 坚持学习WF(24):WF中的异常处理 坚持学习WF(25):取消容器...

    坚持学习WF

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

    WF从入门到精通(源码)

    WF,全称Windows Workflow Foundation,是微软.NET Framework的一部分,用于构建和执行工作流应用程序。WF提供了一种在.NET环境中表达业务流程的方式,使得开发者能够更有效地管理复杂的业务逻辑。本资源"WF从入门到...

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

    WF是微软提供的一种用于构建业务流程和规则引擎的框架,它使得开发者能够以声明式的方式定义业务逻辑,极大地简化了复杂流程的管理。 WF的核心概念包括活动(Activity)、工作流(Workflow)和服务(Service)。...

    PMD_ruleset规则配置文件

    PMD_ruleset规则文件,已经最基本的验证进行了导入。在Eclipse导入即可

    ruleset-generator

    当前将其设置为"homepage": "/ruleset-generator/"以满足zgif.org的要求。 从此目录运行: npm run build以在/ build中获取构建工件。 用法 局限性 如果XSD无效,此应用程序将中断; 例如,在中没有Account 。 ...

    RuleSet

    通过深入研究RuleSet-master中的代码,我们可以学习如何创建、管理和执行自定义的规则集,以及如何将它们应用于实际问题中。这有助于提升软件的灵活性和可维护性,使系统能够更好地适应不断变化的业务需求。

    checkstyle_ruleset_minimal.xml

    checkstyle_ruleset_minimal.xml

    Redux-Ruleset-crx插件

    此chrome扩展程序可直观显示您的数据在应用程序中的流动方式。 如果使用redux-ruleset对整个数据流进行建模,那么您不仅可以直观地看到数据为何流动,还可以看到为什么数据不流动。 这是一个早期产品,所以也许您会...

    ruleset规则包

    规则包中的javabean内容规则包中的javabean内容规则包中的javabean内容规则包中的javabean内容规则包中的javabean内容

    jboss drools5.5 规则流完整代码

    - **条件节点(RuleSet Node)**: 触发特定规则集的执行,根据规则结果影响流程走向。 - **行动节点(Action Node)**: 执行特定的Java代码,可以用来处理业务逻辑或改变流程状态。 - **事件节点(Event Node)**...

    wazuh-ruleset:Wazuh-规则集

    `wazuh-ruleset-master`可能是Wazuh规则集的一个版本仓库,包含了规则文件的源代码或配置。用户需要按照官方文档的指引,将这些规则导入到Wazuh服务器中,然后配置代理以应用这些规则。 总结起来,Wazuh规则集是...

    commons-digester.jar

    `commons-digester.jar`是Apache Commons项目中的一个组件,主要功能是解析XML文档并根据预定义的规则自动创建和填充Java对象。这个组件在Java应用程序中尤其有用,特别是那些需要从XML配置文件中构建复杂对象层次...

    Flex代码检查PMD

    Flex PMD的运作方式是通过扫描AS3源代码,并应用一系列预定义的规则来评估代码质量。这些规则涵盖了多种方面,如冗余代码、未使用的变量、复杂的条件语句、过度嵌套的循环,以及不推荐的API使用等。每个规则都会在...

    tflint-ruleset-azurerm:实验性

    用于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读取XML学习

    学习 Digester,我们需要理解它的核心概念,如Rule、RuleSet和LinkRule等,并能熟练创建和配置这些规则以满足特定需求。 【标签】:“Digester读取XML学习” 1. Digester:Apache Commons Digester库的核心,负责...

    flex PMD - flex代码检查

    Flex PMD 是一款针对Flex开发的代码质量检查工具,它主要的作用是对Flex项目中的ActionScript 3(AS3)代码进行静态分析,发现潜在的编程问题、代码异味和不规范的编码习惯。PMD(Probable Bugs, Maintainability, ...

Global site tag (gtag.js) - Google Analytics