2016-12-04 6 views
1

コレクションに特定のオブジェクトがない場合、ルールを起動する必要があります。コレクションにdroolsが存在しません

AuditAssignmentは問題の事実として利用可能です。

AuditAssignmentは、プロパティ「requiredSkill」

監査の割り当ては、

監査対象は「requiredSkill」の集まりである「資格」今

のリストを持っているプロパティ「監査人」を持っています私は、監査アサインオブジェクトの監査人の資格に必要なスキルがあるかどうかを確認する必要があります

以下は試したが動作しないサンプルルールです。

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 

私は以下の一つとしてもここで

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 

答えて

0

以下の構成が

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

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

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

あなたが必要とする論理値を得るために、コレクションのプロパティメソッドを使用することをお勧めしますを試してみました。

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

感謝を働きました。これを試してみる。 – lives

+0

申し訳ありません - 私は問題を正しく述べていないと感じています。私は問題に言い返した – lives

関連する問題