2017-06-11 4 views
1

Je dois écrire une règle dans Drools 6.5 qui vérifie l'existence d'un événement de type A. Il y a une deuxième classe nommée B qui a un champ date.Drools LHS vérifier contre le fait optionnel

Tout en vérifiant l'existence d'un événement A, si au moins un événement de type B existe, A doit se produire après la dernière B.date pour que la règle au feu; Dans le cas contraire, la règle doit être déclenchée quels que soient les événements B.

Les deux types d'événement A et B ont leur propre champ d'horodatage explicite.

when 
     // TODO if at least one event of type B exists, A must happen after max(b.date). Otherwise, the rule must fire regardless of any B 
     $a : A(...) 
then 
    ... 

Comment effectuer cette vérification?

EDIT: Si aucun B n'est présent dans la mémoire de travail et que A répond aux exigences, la règle doit être déclenchée indépendamment.

Répondre

0

Cela se déclenchera pour chaque A rencontrant la contrainte temporelle que cela devrait arriver après tous les Bs.

$b: B() 
not B(this after $b) 
$a : A(this after $b) 

Si vous voulez tirer qu'une seule fois, pour un certain nombre de As, utilisez exists devant A et omettre la liaison.

+0

Cela rend le déclenchement de la règle dépendant d'au moins un 'B' existant. J'ai besoin de cette règle pour savoir si des 'B' sont en mémoire de travail. – fzwd

+0

Ajouter une autre règle (vous pouvez combiner le LHS en utilisant 'ou') nécessitant l'absence de tout Bs et un motif A sans la contrainte. Je ne peux pas ajouter cela à la réponse puisque votre question ne le dit pas. – laune

+0

Merci pour votre réponse. J'ai édité et clarifié la question. – fzwd