Drools 验证:不能在绑定内部使用变量

Drools validation: Variables can not be used inside bindings

在 Drools 中,我创建了一个包含以下内容的 drl 文件:

import com.myorg.model.Child;
import com.myorg.model.ExportData;
import function com.myorg.utils.getParentSalary;

rule "Classification childSpecialSchool"
when
    $exportData : ExportData(  )
    $child : Child($parentSalary: getParentSalary($exportData, this), $parentSalary > 4000, _age < 15 && _age > 10)
then
    $child.set_classification("childSpecialSchool");    
end

在我的 Java 应用程序中,我用子列表和包含大量信息的 exportData 填充 WorkingObjects。

Collection<Object> objectsForRules;
objectsForRules.addAll(listChildren);
objectsForRules.add(exportData);

ExportData 是具有字段 mapSalary

的 class
class ExportData {
   Map<Child, Double> mapSalary;
}

当我验证 drl 文件时出现以下错误 [KBase: defaultKieBase]: 不能在绑定中使用变量。变量 [$exportData] 被用于绑定 'getParentSalary($exportData, this)'。

我看到其他 2 个主题有同样的错误,但答案没有帮助。

有人可以帮忙吗?我正在使用 Drools 7.37。

你不能在那里引用 $exportData

作为解决方法,您可以将父工资逻辑移到 Child 引用之外,如下所示:

rule "Classification childSpecialSchool"
when
    $exportData : ExportData(  )
    $child : Child(_age < 15, _age > 10)
    $parentSalary: Integer( this > 4000 ) from getParentSalary($exportData, $child)
then
    $child.set_classification("childSpecialSchool");    
end

(我假设 getParentSalary 的结果是一个整数,但您可以根据需要进行调整。)