WF Rules的执行过程

不同于BizTalk中的基于Rete算法的引擎实现,WF仅仅利用基于 优先级的演绎过程来分析结果。而且是基于对象实例而非类型。

1) 首先把RuleSet中Rule按照优先级进行排序,若优先级相同, 则按照Rule的名称Name来进行排序。并且所有的Pending标记均设置为True(其含义是当前的Rule的Action是否执行过,可否作为重新执行的候选)。
2) 依次计算Rule的condition,每当Rule.Condition = true,执行Then Action ,若为false ,执行Else Action(若存在的话),若执行过Action(不论是ThenAction还是Else Action)则把Pending标记设置为false。
3) 评估执行Action的结论,是否影响到了优先级比自己高的某些Rule的condition,若存在,并且此Rule不满足Reevaluation==Nevel && pending==false的条件(也就是说满足待选的条件),则执行之(当然此Rule也可能对其他Rule的条件产生影响,递归之)。
4)当所有受其影响的Rule执行完毕,重新想下执行下一个Rule。
5)直到最后一个Rule(及其Affacted Rules)执行完毕。

你可能感兴趣的:(Rule)