规则集中的规则计算

规则技术在 Windows Workflow Foundation 中以两种主要方式展现:

  • 作为活动的条件。

  • 作为 PolicyActivity 活动中的正向链接规则集。

本节稍后的部分将讨论正向链接,但是简而言之,它是指一种能力,这种能力使一个规则的操作可以导致其他相关规则被重新计算。

开发人员使用规则条件而不是代码条件的主要原因是,规则条件已成为模型的一部分,并且可在执行工作流实例时进行运行时动态更新。 规则条件的第二个优点是,在其成为模型的一部分之后,可在该模型的基础之上生成更多复杂的工具,以提供额外的创作体验、依赖关系管理、跨条件分析等等。

PolicyActivity 活动封装了 RuleSet 的定义和执行。 RuleSet 是具有一组执行语义的规则的集合。 而规则就是对工作流成员进行操作的 If-Then-Else 表达式。

规则计算

RuleSet 中的每条规则都有默认值为“0”的优先级值。 可以将 RuleSet 中的规则视为一个有序集合,该集合按优先级值排序。 Windows Workflow Foundation 规则计算器逐条计算规则,并根据规则条件的计算结果执行该规则的操作。

计算机制从概念上可描述为:

  1. 从活动规则的列表开始。

  2. 查找优先级最高的规则。

  3. 计算该规则,然后相应地执行其 Then/Else 操作。

  4. 如果某条规则的操作更新某个字段或属性,并且该字段或属性由列表中前面的一条或多条规则(这些规则具有更高的优先级)的条件所使用,则重新计算前面的这些规则。

    备注

    只有那些有着特定依赖关系的规则才会被重新计算。

  5. 继续执行该过程,直至 RuleSet 中的所有规则都已计算(或者执行了 Halt)。

在下面的概念性示例中,假定有下面的规则集,其中“A”、“B”等等表示工作流中的数据。

Rule 4 (Priority = 4)
IF A = 15
THEN B = 5

Rule 3 (Priority = 3)
IF C = 5
THEN B = 10

Rule 2 (Priority 2)
IF D = 2
THEN A = 15

Rule 1 (Priority 1)
IF B = 5 
THEN E = 7

假定有以下输入数据:

  • A =0

  • B = 0

  • C = 5

  • D = 2

  • E = 0

计算过程将按如下方式继续:

  1. 计算规则 4;计算结果为 false,因为它没有 Else 操作,所以不执行任何操作。

  2. 规则 3 的计算结果为 true,因此执行其操作,设置 B = 10。规则 4 不依赖于 B 的值;因此,计算过程继续执行至规则 2。

  3. 规则 2 的计算结果为 true,因此执行其操作,设置 A = 15。

  4. 规则 3 和 2 不会重新计算,因为它们的条件不依赖于 A 的值。但是,由于规则 4 在其条件中使用了 A 的值,因此它将被重新计算。 它的计算结果为 true,因此执行其操作,设置 B = 5。规则 4、3 和 2 不依赖于 B 的值,因此,计算过程继续执行至规则 1。

  5. 规则 1 的计算结果为 true,因此执行其操作,设置 E = 7。

现在,结果数据集如下所示:

  • A = 15

  • B = 5

  • C = 5

  • D = 2

  • E = 7

请参见

参考

RuleSet
PolicyActivity
RuleSet

概念

对规则条件使用工作流更改
在工作流中使用 RuleSet

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。