如果集合没有特定对象,我需要触发规则。
AuditAssignment 可作为问题事实使用。
AuditAssignment 有一个属性“requiredSkill”
审计分配有一个属性“审计员”
审核员对象有一个“资格”列表,它是“requiredSkill”的集合
现在,我需要检查audittaskment对象中审核员的资格是否具有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
最佳答案
这里建议使用Collection的属性方法来获取你需要的逻辑值。
rule "checkIfAuditSkillIsMatching"
when
$auditAssignment: AuditAssignment( $neededSkill: requiredSkill.getSkillCode() )
$auditor: Auditor( $auditorSkills: qualifications,
! $auditorSkills.contains( $neededSkill ) )
then
//...no suitably qualified auditor
end
关于集合中不存在口水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958295/