这应该很简单,但我仍然迷失方向。 这里有一个非常相似的帖子:How to share data between Drools rules in a map? 但它并没有解决我的问题:
我有一套规则,在启动它们之前,我插入一个Map< String,Object>作为一个事实。 在这些规则中,我使用地图写出一些结论,如:
when
$map : Map();
something ocurrs;
then
$map.put("conclusion1", 100);
现在我想在其他规则中使用这些中间结论,例如:
when
$map : Map(this["conclusion1"] > 50)
then
do something cool;
问题在于,当我执行规则时,它就像第二条规则没有看到第一条规则的结论,而且它不会触发。 我试过设置一个断点并分析工作记忆,实际上,Map会在第一个规则被触发后包含结论1,100。 我还尝试在结论中进行更新($ map),但这会触发无限循环。
知道为什么这不起作用,或者我的问题的任何替代解决方案?
谢谢!
答案 0 :(得分:0)
当您修改事实时,您需要通知引擎您正在这样做。其中一种方法是使用modify()。 E.g:
when
$map : Map();
something ocurrs;
then
modify( $map ) {
put("conclusion1", 100)
}
end