有什么方法可以取回在Drools规则中更新的Integer值。我在我的规则中传递字符串。我可以看到我的规则正在运行,但我没有得到更新的全局变量的值。这是我的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中设置来传递此变量。因此,我们想确认是否有任何方法可以使用全局Integer获取更新值。请建议。
答案 0 :(得分:5)
全球变量是一个不同的物种。你可以阅读它们,你可以像普通的旧变量一样使用它们(!),但是:
全局变量的任何更新都必须通过API方法KieRuntime.setGlobal()
完成。
在您的规则中,您可以使用
drools.setGlobal( delayInSeconds, Integer.valueOf(10) );
您不能将更新与全局一起使用 - 这不是事实。此外,规则不会对全球变化作出反应。如果您需要,请使用一个事实。
答案 1 :(得分:2)
对我来说这很有用
drools.getKnowledgeRuntime().setGlobal(String, Object)
答案 2 :(得分:0)
您可以使用。
then
System.out.println("Running delay rule.....");
delayInSeconds = "whatever calculations";
drools.getKnowledgeRuntime().setGlobal("delayInSeconds", delayInSeconds);
end