我想知道如何修改列表中的对象。我试过跟随,但它给出了一个错误。
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列表中为选定对象调用它。我究竟做错了什么 ?有人可以帮忙吗?
谢谢!
答案 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);