代码改变世界

《WF编程》系列之32 - 基本活动:条件与规则

2007-09-29 11:24  Windie Chai  阅读(2899)  评论(5编辑  收藏  举报

4.5 条件与规则

WF中关于条件和规则的活动有两个: ConditionedActivityGroup(CAG) 活动和Policy活动.虽然我们也把CAG视作控制流的活动,但事实上CAG更加侧重于对条件和规则的控制.

4.5.1 ConditionedActivityGroup

CAG是一个强大的活动,它可以结合规则和代码来达到目的.CAG的每一步执行都会检查条件是否允许.我们可以在CAG内部添加许多活动来执行.CAG为它的每一个子活动都关联了WhenCondition并且只执行的WhenCondition为真的活动.CAG会一直重复执行它的子活动直到其UntilCondition为真.

WhenCondition和UntilCondition属性可以使用声明性规则或代码条件.如果我们没有为子活动指定WhenCondition,这个子活动将只执行一次.如果没有指定CAG的UntilCondition,CAG会一直执行到它的所有子活动的WhenCondition都为false.
我们可以点击CAG的子活动来设置它的WhenCondition,也可以预览或者编辑子活动.有一个小按钮( )可以切换预览和编辑状态.编辑模式中,我们可以为活动设置属性,如果子活动是一个复合活动,我们还可以为其添加子活动.
每当一个子活动完成后,CAG都会检查UntilCondition的值.只要这个值返回true,CAG就会取消当前所有正在执行的子活动并关闭.
CAG的子活动是并行执行的,我们也可以将CAG活动可以看作是对活动本身和它的子活动都附加了条件的Parallel活动.

4.5.2 PolicyActivity

Policy活动是一个规则引擎,它允许我们将业务逻辑从工作流并中分离并且声明性的定义业务策略.规则集(Rule Set)是等待Policy活动执行的规则的集合,其中每个规则都包含条件和动作.我们可以使用WF规则集编辑器(Rule Set Editor)来编辑规则.


需要注意的是每个规则都必须指定一个优先级.高优先级的规则将优先执行,而优先级相同的规则会按字母顺序执行.
每个规则都包含条件和动作,而动作又被拆分为Then和Else.我们可以为Then和Else指定相应的动作.在规则的动作中,我们不仅可以修改工作流及其内部对象的属性和域,还可以调用方法.
Policy活动默认会以完全正向链 (Full Forward Chaining)的方式执行规则集中的规则.如果一个规则改变了前边某规则依赖的域值,Policy活动就会重新检查前边的规则.Policy活动支持不同的正向链策略,而且每个规则都有控制是否总是重新检查依赖值的选项.关于Policy活动更详细的讲解请期待以后的章节.