我有这样的类层次结构:Drools的 - FORALL自蕴不工作
DomainParent{List<Details>, Boolean isCalculatedTypes(defaults false)}
Detail{List<SubDetail>}
SubDetail{TypeEnum}
这枚举:
TypeEnum{Type1, Type2, Type3}
我想创建一个检查一个Drools的规则,如果所有的SubDetails有要么Type1或Type2以及另一个规则,如果SubDetails列表包含Type的任何不同组合,则触发另一个规则。
到目前为止,我有这个规则,它获取无论什么执行,即使所有的SubDetails具有类型3:
rule "calculate sub details with types 1 and 2"
when
$parent: DomainParent(!isCalculatedTypes())
$subDetails: List() from accumulate($detail: Detail() from $parent.getDetails();
collectList($detail.getSubDetails()))
forall(SubDetail(getTypeEnum() == TypeEnum.1() || getTypeEnum() == TypeEnum.2() from $subDetails)
then
System.out.println("begin calculating types");
//DO SOMETHING
$parent.setCalculatedTypes(true);
update($parent);
System.out.println("DONE calculating types");
end
虽然你的反对意见肯定是有效的,但这并没有解决OP的问题。您可以将其作为评论。 – laune