Drools - 修改列表中的特定对象?

时间:2013-08-02 06:55:33

标签: drools

我想知道如何修改列表中的对象。我试过跟随,但它给出了一个错误。

when
        Category( $bookList :  books ) 
        UserProfile( profile == UserProfile.STUDENT )
        $book : Book( student == true )
        $category : Category( books contains $group )
then
        modify( $category.books[$book] ) { setEligible(true) }
end

Book.setEligible是我需要调用的方法。但是我需要在Cagegory.books列表中为选定对象调用它。我究竟做错了什么 ?有人可以帮忙吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

第一件事:您确定要在规则中包含2种不同的类别模式吗?如果您有两个不同的类别,则最终可能会执行该规则的4次执行。

第二件事,如果你想修改这本书,你为什么不这样做:

modify($book) {
    setEligible(true)
}

希望它有所帮助,

答案 1 :(得分:0)

你还需要确保Book是一个事实..这意味着你将这个事实插入Ksession .. 你得到的错误是什么?您使用的是哪种版本的drools?

答案 2 :(得分:0)

我正在修改嵌套集合中的项目,如下所示...... [使用“来自”]

rule "4G complete" 
salience -1
when 
    $tr: TopTowerResult()
    $ptncascade: PtnCascade() from $tr.cascadeList
    Timestamp() from $ptncascade.cascadeFact.actual4g
then 
    $ptncascade.getCascadeFact().setComplete4g(true);
    $ptncascade.getCascadeFact().setEstimate4g("Completed");
end


解释 -
该行匹配$ tr.cascadeList中的每个PtnCascade实例 您可以在此处添加其他模式以限制列表中的所选项目。

$ptncascade: PtnCascade() from $tr.cascadeList

下一行对匹配的每个PtnCascade()实例进行操作。

Timestamp() from $ptncascade.cascadeFact.actual4g

结果也适用于列表中匹配的特定PtnCascade -

$ptncascade.getCascadeFact().setComplete4g(true);