如何在 drools 规则中检查集合的大小
How to check the size of a set in drools rules
我在 drool 中有以下规则
rule klFor2001 salience 30
when
exists( Vgdokfag( Fagkode() == "FOR2001", ( Merknadkode() != "FAM13" ||
Merknadparameter() in ("FO1010", "FO1030", "FO1040"))))
vgs: HashSet() from collect(Vgdokfag( Fagkode() contains "UPF",
(Merknadkode() == "FAM13" ||
Merknadparameter() in ("FO1010","FO1030", "FO1040"))) )
then
insert(getKlIdr20xx("KL_IDR2001",true));
end
所以我想做的是
- 检查是否有 Vgdokfag For2001 作为 Fagkode 并且 Merknadkode 不等于 "FAM13" 或 Merknadparameter 是以下字符串之一("FO1010","FO1030", "FO1040")。
- 检查是否存在至少两个 VgdokFag 事实在其“Fagkode”中具有“UPF”并且 Merknadkode 等于“FAM13”或 Merknadparameter 是以下字符串之一(“FO1010”、“FO1030”、“FO1040”)。
我不知道第二个怎么做。我试图在给定条件下获取所有事实,然后检查集合的大小是否大于 2,但由于某种原因我不能写这样的东西
eval(vgs.size() > 2)
我确定我在这里做错了什么,有人可以帮助我吗?
干杯,
es
你们真的很亲密。您可以将 size
约束直接添加到 HashSet
:
vgs: HashSet(size >= 2) from collect(...)
我在 drool 中有以下规则
rule klFor2001 salience 30
when
exists( Vgdokfag( Fagkode() == "FOR2001", ( Merknadkode() != "FAM13" ||
Merknadparameter() in ("FO1010", "FO1030", "FO1040"))))
vgs: HashSet() from collect(Vgdokfag( Fagkode() contains "UPF",
(Merknadkode() == "FAM13" ||
Merknadparameter() in ("FO1010","FO1030", "FO1040"))) )
then
insert(getKlIdr20xx("KL_IDR2001",true));
end
所以我想做的是
- 检查是否有 Vgdokfag For2001 作为 Fagkode 并且 Merknadkode 不等于 "FAM13" 或 Merknadparameter 是以下字符串之一("FO1010","FO1030", "FO1040")。
- 检查是否存在至少两个 VgdokFag 事实在其“Fagkode”中具有“UPF”并且 Merknadkode 等于“FAM13”或 Merknadparameter 是以下字符串之一(“FO1010”、“FO1030”、“FO1040”)。
我不知道第二个怎么做。我试图在给定条件下获取所有事实,然后检查集合的大小是否大于 2,但由于某种原因我不能写这样的东西
eval(vgs.size() > 2)
我确定我在这里做错了什么,有人可以帮助我吗?
干杯,
es
你们真的很亲密。您可以将 size
约束直接添加到 HashSet
:
vgs: HashSet(size >= 2) from collect(...)