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運算。