2016-12-01 132 views
1

有沒有什麼方法可以取回Drools規則中更新的整數值。我在我的規則中傳遞字符串。我可以看到我的規則正在運行,但我沒有得到更新的全局變量的值。這是我的Drools規則文件:Drools規則中的全局變量

import com.MessageType; 

global java.lang.Integer delayInSeconds; 

rule "Delay for Update" 
when 
String(this == MessageType.UPDATE.getType()) 
then 
System.out.println("Running delay rule....."); 
delayInSeconds = 10; 
update(delayInSeconds); // This gives me runtime error. If I remove it I dont get error but dont get updated value. 
end 

我也試過這樣: kcontext.getKieRuntime()setGlobal( 「delayInSeconds」,10);但沒有運氣:(

我知道我可以通過在POJO通過設置這個變量,所以只是想確認是否有任何方式,我們可以使用全局整數得到更新值。請提出。

回答

2

全局變量有不同的種類,您可以閱讀它們,您幾乎可以使用它們像普通老式變量,但是(!)。

一個全局變量的任何更新必須通過API方法KieRuntime.setGlobal()

在你規則,你可以使用

drools.setGlobal(delayInSeconds, Integer.valueOf(10)); 

您無法使用全局更新 - 這不是事實。此外,規則不會對全球變化做出反應。如果你需要這個,請使用一個事實。

+0

感謝您的回答。我只是用這個 kcontext.getKnowledgeRuntime()。setGlobal(「delay,10」); 我正在直接訪問變量。我不得不使用kSession.getGlobal(「延遲」)。 – rishi