2017-07-06 3 views
2

J'essaie d'écrire une règle pour calculer les prix d'un produit d'assurance en fonction des conditions. Dans le 'quand' j'utilise un objet appelé AdditionalDriver, qui contient les détails pour les pilotes autres que le détenteur de la politique. De là, les différents prix peuvent être calculés sur la base si le conducteur supplémentaire est un parent, un ami, conjoint, etc. Voir ci-dessous:Drools - Exécution d'une règle avec un objet vide

when 
    AdditionalDriver($relToProp : relationToProposer) 
then 
    String relToProp = $relToProp; 

    if(!relToProp.equals("P")) 
    { 
     //prices 
    } 
end 

« P » = parent.

Cette règle fonctionne lorsqu'un pilote supplémentaire a été ajouté. Toutefois, s'il n'y a pas de pilote supplémentaire, l'objet est vide et la règle ne s'exécute pas. Que dois-je faire pour que cette règle s'exécute, même lorsque l'objet est vide?

Merci d'avance.

+0

Qu'est-ce qu'un "objet vide"? Un objet existe, avec les champs tels que définis par son code de classe, constructeur et initialisation, ou il n'existe pas. – laune

+0

Merci pour votre question laune. Je suppose que ce que je veux dire, c'est que ça n'existe pas. Certaines politiques auront un pilote supplémentaire et d'autres pas, et c'est le dernier où les problèmes se produisent, car la règle ne se déclenche pas. – ASnape

Répondre

0

Vous devriez écrire une règle pour chacune des classes parent ou une connaissance:

when 
    PolicyHolder($phid: id) 
    AdditionalDriver(relationToProposer == "P", belongsTo == $phid) 
then 
    //prices 
end 

Pour aucun pilote supplémentaire demandé, rédiger une règle

when 
    PolicyHolder($phid: id) 
    not AdditionalDriver(belongsTo == $phid) 
then 
    // cheaper prices 
end 

Ne pas utiliser instruction conditionnelle dans votre conséquences pour mieux distinguer les faits. C'est une odeur de code.