我遇到了drools编译规则的问题,其中在LHS中执行计算并将结果与静态值进行比较。我正在处理的事实是给我的,我无法控制它们所以请根据类别回答,而不是建议更改数据模型。
public class Item {
private Map<String, Object> attributes;
private List<String> errors;
}
public class ItemFacts {
private Item newItem;
private Item existingItem;
}
rule "validatePrice"
when
$itemFacts:itemFacts(newItem != null, newItem.attributes != null,
$price:newItem.attributes["price"] != null,
$price#BigDecimal.scale > 4 ||
$price#BigDecimal.precision - $price.BigDecimal.scale > 9)
then
itemFacts.errors.add("Invalid size for price attribute.");
end
缩放检查编译并正常工作但是从精度中减去缩放的检查以确保小数点左边没有太多位置将无法编译。我也试过'$ price#BigDecimal。(精确 - 规模)&gt; 9'但是也不会编译。任何帮助将不胜感激。
答案 0 :(得分:0)
如果您找到一个语法定义,准确记录 您打算在该规则的LHS和RHS上撰写的内容,请遵循此文档。
同时,给这些结构提供一个广泛的位置,并尽可能地保持与Java的接近。另外,我建议将公式放入函数或静态方法中。
{{1}}