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
的结果是一个整数,但您可以根据需要进行调整。)
在 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
的 classclass 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
的结果是一个整数,但您可以根据需要进行调整。)