2016-12-04 7 views
1

Je dois déclencher une règle si une collection n'a pas d'objet spécifique.drools n'existe pas dans la collection

AuditAssignment est disponible sous forme de problème.

AuditAssignment possède une propriété "requiredSkill"

mission d'audit a une propriété "vérificateur"

objet Commissaire aux comptes a une liste de "qualifications", qui est une collection de "requiredSkill"

Maintenant, J'ai besoin de vérifier, si les qualifications de l'auditeur dans l'objet auditassignment a le requisSkill

Ci-dessous est l'exemple de règle que j'ai essayé mais ne fonctionne pas.

rule "checkIfAuditSkillIsMatching" 
    when 
     $auditAssignment : AuditAssignment($neededSkill : requiredSkill.getSkillCode()) 

     $auditor : Auditor($auditorSkills : qualifications) 
     not exists (Skill (skillCode == $neededSkill) from $auditorSkills ) 

    then 
     System.out.println(" **** " + $neededSkill); 
     scoreHolder.addHardConstraintMatch(kcontext, -1); 
end 

J'ai essayé le ci-dessous un aussi

rule "checkIfAuditSkillIsMatching" 
    when 

     $validAuditorCount : Number (intValue < 1 ) from accumulate (
      $auditor : Auditor($auditorSkills: qualifications) 
      and exists AuditAssignment(auditor == $auditor , 
        $auditorSkills.contains(requiredSkill)) , 
      count($auditor) 

     ) 

    then 
     scoreHolder.addHardConstraintMatch(kcontext, -1); 
end 

Répondre

0

La configuration ci-dessous travaillé

rule "checkIfAuditSkillIsMatching" 
    when 
     $auditAssignment : AuditAssignment($neededSkill : requiredSkill , 
        $assignedAuditor : auditor) 

     $auditor : Auditor(this == $assignedAuditor , !qualifications.contains($neededSkill)) 

    then 
     scoreHolder.addHardConstraintMatch(kcontext, -1); 
end 
2

Ici, il est conseillé d'utiliser une méthode de propriété de la collection pour obtenir la valeur logique dont vous avez besoin.

rule "checkIfAuditSkillIsMatching" 
when 
    $auditAssignment: AuditAssignment($neededSkill: requiredSkill.getSkillCode()) 
    $auditor: Auditor($auditorSkills: qualifications, 
         ! $auditorSkills.contains($neededSkill)) 
then 
    //...no suitably qualified auditor 
end 
+0

Merci. va essayer cela. – lives

+0

Désolé - Je pense que je n'ai pas indiqué le problème correctement. J'ai reformulé le problème – lives