首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用@{variablePart}填充Drools规则模板中对象的条件?

问如何使用@{variablePart}填充Drools规则模板中对象的条件?
EN

Stack Overflow用户
提问于 2018-03-28 08:04:13
回答 2查看 1.7K关注 0票数 0

我有一个规则模板(不是基于决策表的),它有一个对象的条件(也就是约束)。当通过Drools的对象编译器编译规则模板时,应该根据为该规则模板设置的变量/参数来填充该条件。下面的示例显示了我正在尝试做的事情--但遗憾的是,这不能编译。错误消息没有解释,后续的空指针异常是结果。

代码语言:javascript
复制
rule "variable condition"
when
    Person ( @{condition} )
then
    // do something...
end

在java端,变量部分随后被传递给Drools对象编译器,如下所示:

代码语言:javascript
复制
String condition = "id == 42";
String compiledRule = objectDataCompiler.compile(data, ...

或类似于下一个示例,显示了连接多个可接受值的条件运算符:

代码语言:javascript
复制
String condition = "(id == 42) || (id == 52)";
String compiledRule = objectDataCompiler.compile(data, ...

即使是java端代码的第一个示例,规则模板也不会编译。

如何设置一个有效的模板化规则来实现这种可变条件?

EN

回答 2

Stack Overflow用户

发布于 2018-03-28 16:36:18

规则模板用于动态更新规则。定义规则的格式是通过创建一个条件,然后使用Condition类的方法定义规则来完成的。例如,

代码语言:javascript
复制
Rule highValueOrderRule = new Rule();
Condition highValueOrderCondition = new Condition();
highValueOrderCondition.setField("price");
highValueOrderCondition.setOperator(Condition.Operator.GREATER_THAN);
highValueOrderCondition.setValue(5000.0);

// In reality, you would have multiple rules for different types of events. 
// The eventType property would be used to find rules relevant to the event
highValueOrderRule.setEventType(Rule.eventType.ORDER);

highValueOrderRule.setCondition(highValueOrderCondition);

规则模板在此blog中进行了精美的解释

票数 1
EN

Stack Overflow用户

发布于 2019-01-14 14:21:34

你可以参考我在搜索如何使用模板定义规则的类似问题时找到的this github存储库。对我来说很有吸引力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49524153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档