Drools决策表规则不使用更新的值
我使用Drools规则服务器作为服务。我们使用的是决策表Drools决策表规则不使用更新的值,drools,rule-engine,drools-flow,Drools,Rule Engine,Drools Flow,我使用Drools规则服务器作为服务。我们使用的是决策表 Pre Rules Movie Object: actor: "unknown" movie: "Ghostbusters" rating: 9 我在Drools决策表中有两条简单规则。第一条规则检查值(movie==“Ghostbusters”),然后设置调用对象setActor(“Bill Murray”) 第二条规则检查演员是什么。在第二条规则中,我有两行如果Actor==“billmurray”它调用一个setRat
Pre Rules Movie Object:
actor: "unknown"
movie: "Ghostbusters"
rating: 9
我在Drools决策表中有两条简单规则。第一条规则检查值(movie==“Ghostbusters”
),然后设置调用对象setActor(“Bill Murray”)
第二条规则检查演员是什么。在第二条规则中,我有两行<代码>如果Actor==“billmurray”它调用一个setRating(10)
操作。如果actor==“未知”
setRating(8)
第一条规则按预期启动,我可以在getActor
中打印以显示它是“Bill Murray”,但在第二条规则中,actor==“unknown”
操作总是启动。即使在那一行我打印getActor
它打印“billmurray”,但它使用的是“unknown”规则
当对象从规则中返回时,它具有Actor=Bill Murray
和规则中设置的所有值“correct”,但在评估规则时,规则似乎总是使用我在规则之外创建的原始对象
我是否需要向决策表中添加一些内容,或者调用drools规则服务器来“更新”规则表之间的对象?您应该使用drools文档(4.8.4.1、4.8.4.2)中描述的
update
或modify
方法:
这将告诉引擎对象已更改,将重新应用规则。您应使用Drools文档(4.8.4.1、4.8.4.2)中所述的
更新
或修改
方法:
这将告诉引擎对象已更改,并且将重新应用规则。我知道自您提出该问题以来已过了太多时间,但对于其他具有相同问题的用户: 如上所述,您应该修改对象,而不是设置它。要在决策表中执行此操作,请在规则表中添加一个操作列,并在第二行中添加:
modify($className){setActor(“Bill Murray”)}代码>
将“操作”下的第一行保留为空。我知道,自从您提出该问题以来,已经过了太多时间,但对于其他有相同问题的人:
如上所述,您应该修改对象,而不是设置它。要在决策表中执行此操作,请在规则表中添加一个操作列,并在第二行中添加:
modify($className){setActor(“Bill Murray”)}代码>
将“操作”下的第一行留空。您是如何构建决策表的?你能把它贴在这里吗?你是如何构建你的决策表的?你能把它贴在这里吗?
rule "modify stilton"
when
$stilton : Cheese(type == "stilton")
then
modify( $stilton ){
setPrice( 20 ),
setAge( "overripe" )
}
end