Declare-Expression 与Forward-Chaining /Backward-Chaining
先举一个例子:Declare-Expression 中表达式是C = A+B。
当A和B的值确定的时候,C的值会自动计算出来,大家都会说这个是Forward-Chaining。
然而Backward-Chaining是怎么样的运算规则呢?
有一种理解是:如果A和C的值确定了,B的值能自动计算出来,这样就是Backward-Chaining。对于这种理解,我去做过试验,因为C是target property,不能对C直接进行赋值,那这种说法也就不成立了。
对于这2个概念,我的理解是:
Forward-Chaining的运算规则是:当改变A和B的值的时候,立刻就能计算出C的值,并且Declare-Expression的Calculate Value应该选择“Whenever inputs change”,这种即时运算规则就叫Forward-Chaining 。
Backward-Chaining的目的其实也是对结果C进行重新计算,而不是我们以前所理解的反向运算A或B。只是对表达式进行有条件的,延后的运算,也就是说当我们需要用到C的时候,系统才运算表达式得出C的值。Pega的解释是这样能够节省系统资源,只有Calculate Value选以下几个选项的时候才是Backward-Chaining:
1) When used, if no value present
2) When used, if property is missing
3) Whenever used
下面是我结合Declare-Expression的Calculate Value选项所做的几个试验:
运算表达式:testC = testA + testB
Activity:
1) 修改Declare-Expression的配置如图:
这种配置下运行测试Activity,需要满足以下2个条件,Target property才会有结果值:
① testC要被使用到(比如Show-property)
②testC不能存在于Clipborad中
也就是说,这种条件下,Target Property只能被执行一次。除非你把testC从Page中Remove掉。
2) 修改Declare-expression的配置如图:
这种配置下运行测试Activity,需要满足以下2个条件,Target property才会有结果值:
①testC要被使用到(比如Show-property)
②testC在运算前要是空,并且计算出的结果值不能为空。
比如两个空字符串””+”” = testC, 这样是无法得出testC的值的。
3) 修改Declare-expression的配置如图:
这种情况下,如果想要表达式能被触发,要求Target property至少被使用一次。
如果Target Property 没有在任何地方(包括UI显示)使用过,这个表达式永远不会被触发。
也就是说一旦Clipborad中有testC这个property之后,这个表达式就会进行即时Forward-Chaning运算。