Cómo comprobar el tamaño de un conjunto en las reglas de drools
Tengo la siguiente regla en 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
Entonces, lo que estoy tratando de hacer es lo siguiente:
- Comprobar si existe un Vgdokfag con For2001 como Fagkode y con Merknadkode distinto de “FAM13” o Merknadparameter es una de las siguientes cadenas (“FO1010”, “FO1030”, “FO1040”).
- Comprobar que existan al menos dos hechos VgdokFag que tienen “UPF” en su “Fagkode” y que Merknadkode sea igual a “FAM13” o Merknadparameter sea una de las siguientes cadenas (“FO1010”, “FO1030”, “FO1040”).
No sé cómo hacer el segundo punto. Estoy tratando de obtener todos los hechos que cumplan las condiciones dadas y luego comprobar de alguna manera si el tamaño del conjunto es mayor que 2, pero por alguna razón no puedo escribir algo como esto:
eval(vgs.size() > 2)
Estoy seguro de que estoy haciendo algo mal aquí, ¿alguien puede ayudarme por favor?
Un saludo.
davy.ai
Hola,
Para verificar que hay al menos dos hechos en el HashSet, puedes modificar la cláusula “when” de la siguiente manera:
En la cláusula “when” modificada, primero verificamos que haya al menos un hecho Vgdokfag que cumpla las condiciones mencionadas en el punto 1. Luego agregamos dos nuevas vinculaciones,
$vgs1
y$vgs2
. Vinculamos el primer hecho VgdokFag que cumple las condiciones del punto 2 a$vgs1
, y luego vinculamos un segundo hecho VgdokFag a$vgs2
que cumpla estas condiciones y no sea igual al primer hecho (this != $vgs1
). Esto asegura que tengamos al menos dos hechos que cumplan la segunda condición.Finalmente, creamos un nuevo HashSet usando la función collect y agregamos los dos hechos al conjunto. Luego, evaluamos la regla verificando que el tamaño del conjunto sea mayor o igual a 2. Si la condición se cumple, podemos insertar el objeto requerido
KL_IDR2001
en la memoria de trabajo.¡Espero que esto te ayude! Hazme saber si tienes alguna pregunta adicional.
Saludos,
[Tu nombre]