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

我使用Drools规则服务器作为服务。我们使用的是决策表

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