坚持学习WF(22):跟踪规则

简介:

坚持学习WF文章索引

由于规则不是程序化的代码,你不能使用vs的调试器来调试,如果我们要调试有规则的工作流程序,我们可以开启规则引擎的Tracing功能。我们下面以一个例子来说明。我们需要建立一个顺序型工作流项目,在工作流设计器中放入一个PolicyActivity活动,然后设置其RuleSetReference属性,我们建立以下规则集。如下表所示:

Rule Conditon ThenAction ElseAction
RuleC this.D < 100

this.B = this.B - 12 
System.Console.WriteLine("RuleC:Then" + this.B)

 
RuleB this.B > 50

this.C = "Preferred" 
System.Console.WriteLine("RuleB:Then" + this.C)

this.C = "Normal" 
System.Console.WriteLine("RuleB:Else" + this.C)

RuleA this.A > 10

this.B = 60 
System.Console.WriteLine("RuleA:Then" + this.B)

this.B = 40 
System.Console.WriteLine("RuleA:Else" + this.B)

 

规则编辑器如下图:

tracerule1

然后我们在项目中添加App.config文件,在配置文件开始规则的跟踪功能,代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>   
    <switches>
      <add name="System.Workflow.Activities.Rules" value="ALL" />
      <add name="System.Workflow LogToFile" value="1" />
    </switches>
  </system.diagnostics>
</configuration>

 

在此示例中,第二行添加节点启用文件的日志记录。该文件使用名称 WorkflowTrace.log 在宿主应用程序目录中创建。第一行中的TraceLevel属性值ALL表示所有可以预测到log信息都会被记录,如果你想过滤到一些log,你也可以指定Information和Verbose等,该选项通过将名称参数设置为等于“System.Workflow LogToTraceListener”来启用 TraceListener 的日志记录。这样设置后,Windows Workflow Foundation 将会枚举在宿主应用程序中创建的每个 TraceListener,并向它们发送所有日志记录信息。值属性的可能值包括:

说明
All 记录接收到的所有消息
Off 不记录任何消息
Critical 仅记录关键消息
Error 记录关键消息和错误消息
Warning 记录关键、错误和警告消息
Information 记录关键、错误、警告和提示消息
Verbose 记录关键、错误、警告、提示和详细消息

 

工作流中赋响应初始值如下:

private int A = 12;
private int D = 99;
private int B = 0;
private string C = "";


下面为宿主程序代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;

namespace CaryRuleTracing
{
    class Program
    {
        static void Main(string[] args)
        {
            using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                workflowRuntime.WorkflowCompleted += delegate(object sender, 
WorkflowCompletedEventArgs e){waitHandle.Set();}; workflowRuntime.WorkflowTerminated += delegate(object sender,
WorkflowTerminatedEventArgs e) { Console.WriteLine(e.Exception.Message); waitHandle.Set(); }; WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof
(CaryRuleTracing.Workflow1)); instance.Start(); waitHandle.WaitOne(); } } } }
  
我们现在完成项目来运行程序,得到结果如下:
 
    
 
我们打开WorkflowTrace.log看看里面都记录了什么,下面只是log中部分的记录,你可以打开该文件查看详细记录:

规则“RuleA”条件 依赖项:“this/A/” 
规则“RuleA”THEN 副作用:“this/B/” 
规则“RuleA”ELSE 副作用:“this/B/” 
规则“RuleB”条件 依赖项:“this/B/” 
规则“RuleB”THEN 副作用:“this/C/” 
规则“RuleB”ELSE 副作用:“this/C/” 
规则“RuleC”条件 依赖项:“this/D/” 
规则“RuleC”THEN 副作用:“this/B/” 
规则“RuleA”THEN 操作触发规则“RuleB” 
规则“RuleA”ELSE 操作触发规则“RuleB” 
规则“RuleC”THEN 操作触发规则“RuleB” 
执行 
计算规则“RuleA”的条件。 
计算为 True 的规则“RuleA”条件。 
计算规则“RuleA”的 THEN 操作。 
计算规则“RuleB”的条件。 
计算为 True 的规则“RuleB”条件。 
计算规则“RuleB”的 THEN 操作。 
计算规则“RuleC”的条件。 
计算为 True 的规则“RuleC”条件。 
计算规则“RuleC”的 THEN 操作。 
规则“RuleC”副作用启用规则“RuleB”重新计算。 
计算规则“RuleB”的条件。 
计算为 False 的规则“RuleB”条件。 
计算规则“RuleB”的 ELSE 操作。

 

1.Log的第一部分记录了各个规则的依赖项,当某个规则修改的时候会引擎哪些规则的重算。

2.从log我们可以看出规则的执行顺序并不是规则编辑器中设置的顺序,而是在优先级一样的情况下,按字母顺序来执行。我们例子中是RuleC,RuleB,RuleA,执行的顺序就不是了。

3.通过log我们也可以证实WF规则引擎的正向链接的特性,例子中RuleC引起了RuleB的重算。

这些只是WF中跟踪的一部分功能,我们后面后专门来学习WF中的跟踪的相关知识。


本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2008/10/08/TraceRules.html,如需转载请自行联系原作者

相关文章
|
18天前
|
存储 算法 数据挖掘
详述RAG的5步流程和12个优化策略
详述RAG的5步流程和12个优化策略。
详述RAG的5步流程和12个优化策略
|
2月前
|
XML 算法 C语言
【C/C++ 静态代码检查工具 Cppcheck 】Cppcheck 检测器列表和检查规则大全一览
【C/C++ 静态代码检查工具 Cppcheck 】Cppcheck 检测器列表和检查规则大全一览
97 0
|
8月前
如何进行需求评审后续跟踪和更新?附模板
如何进行需求评审后续跟踪和更新?附模板
SAP QM初阶-执行事务代码QP02维护检验计划的时候不能为检验特性指派取样策略
SAP QM初阶-执行事务代码QP02维护检验计划的时候不能为检验特性指派取样策略
SAP QM初阶-执行事务代码QP02维护检验计划的时候不能为检验特性指派取样策略
|
XML Java Unix
不了解工作流框架 Activiti 中的流程事件?这篇工作流流程元素详解,带你详细分析工作流流程执行过程中的各种事件
本文介绍了工作流Activiti框架中BPMN结构中各种事件。主要包括定时器事件,错误事件,信号事件,消息事件,开始事件,结束事件,边界事件,中间捕获事件以及内部触发事件。通过对BPMN中各种事件的学习了解,可以帮助我们在项目中更加方便地对工作流中各种处理流程进行应用,极大提高了项目的开发效能。
936 0
不了解工作流框架 Activiti 中的流程事件?这篇工作流流程元素详解,带你详细分析工作流流程执行过程中的各种事件