我想使用drool引擎动态评估事实。规则条件属性&它们的条件运算符存储在数据库中,并在引擎启动时加载到WM。 所以我想在规则文件中使用该运算符,如下所示。
$dynCx : DynCustomer()
$attrib : Attribute() from $dynCx.attributes
$offer : Offer($ofCode : offer_code, $domainName : domainName )
$rdef : OfferRuleDef($entity : entity,
$code : code,
$value : value,
$atrName : attributeName,
$atrVal : attributeVal,
$op : operation,
$entity == $domainName,
$code == "OFFER_CODE",
$value == $ofCode,
$atrName == $attrib.name,
$atrVal $op $attrib.value
)
但我的错误
Caused by: java.lang.RuntimeException: [59,14]: [ERR 102] Line 59:14 mismatched input '$op' in rule "Evaluate Generic Offer Eligibility"
[0,0]: Parser returned a null Package
我们如何才能实现这一目标?
答案 0 :(得分:0)
运算符无法在运行时解析,因此您无法编写此类规则。根据您使用的版本和您想象的运营商数量,您有几个选择。
1)为每个运营商编写规则:
OfferRuleDef( ..., operator == "==", attributeVal == $attrib.value )
为了避免过多的代码重复,请考虑规则可以相互“扩展”。
2)在最新版本中,创建一个静态辅助函数并传递三个值:
OfferRuleDef( ..., MyHelper.applyOperator($attrValue, $op, $attrib.value) )