【问题标题】:how to update rules dynamically in drools rule engine如何在drools规则引擎中动态更新规则
【发布时间】:2018-07-04 16:56:58
【问题描述】:

我正在研究 drools 规则引擎,让这个场景将块中的值从 1000 更改为 2000,将符号从 > 更改为

rule "payment"

when 
   account:Paymentinfo(transaction < 1000)
then

【问题讨论】:

  • 但是我没有从那个帖子中得到我需要的东西你能提供任何关于如何将 drl 文件访问到 gui 中的输入
  • @Prog_G 我相信你指出的 7 年前的问题不再适用于最新版本的 Drools。
  • @bfrguci 解释了另一个动态加载规则的替代方案,它适用于最新版本的 drools 解释stackoverflow.com/a/38530777/7726319

标签: drools rule-engine kie


【解决方案1】:

规则模板 第二种解决方案是使用规则模板(链接是 Drools 文档。)基本思想是您提供数据表和 DRL 模板,Drools 框架会将数据制作成模板并生成 DRL你。当您有非常重复的规则(例如您的规则)时,这很有用 - 在其他规则中,您基本上是在应用具有各种不同约束的相同规则。

与其他场景类似,您的工作流程将是这样的:

用户在 UI / 前端创建约束,指定所需信息(卡类型、最低价格、折扣。) 用户的约束被发送到服务器。 服务器将请求重新格式化为表格形式(而不是 JSON 或任何原始格式)。 服务器使用带有模板的数据表(步骤 3)来生成规则。 您的模板可能看起来像这样,假设列标记为“cardType”、“minPrice”和“discount”):

template header
cardType
minPrice
discount

package com.example.template;
import com.example.Order;

template "orderdiscounts"

rule "Apply order discount for @{cardType}"
when
  $order: Order( cardType == "@{cardType}",
                 price > @{minPrice} )
then
  $order.setDiscount(@{discount});
end

end template

格式非常简单。首先是标题,我们在其中按顺序定义列。第一个空行表示标题的结尾。接下来是包声明和导入,因为它们对于文件来说是静态的。然后是模板。列值使用@{ column name } 模式进行插值;请注意,您需要将其包含在字符串的引号中。

Drools 文档非常好,所以我不会过分详细介绍,但您应该能够了解其中的要点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2012-12-12
    • 2017-03-24
    • 1970-01-01
    相关资源
    最近更新 更多