当前位置: 首页 > 知识库问答 >
问题:

更新决策表中的事实:Drools

何建中
2023-03-14

我在excel电子表格中有一个drools决策表,其中有两条规则。(此示例已大大简化,我正在使用的示例有更多规则。)

我的目标是让规则自上而下地触发,随后的规则可能取决于早期规则对事实/对象所做的更改。

这个问题有解决办法吗?任何帮助都将不胜感激,谢谢!

package com.example;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

public class SalaryTest {

    public static final void main(String[] args) {
        try {
            // load up the knowledge base
            KieServices ks = KieServices.Factory.get();
            KieContainer kContainer = ks.getKieClasspathContainer();
            KieSession kSession = kContainer.newKieSession("ksession-dtables");

            Salary a = new Salary();
            a.setAmount(600);

            kSession.insert(a);
            kSession.fireAllRules();


        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public static class Salary{
        private String message;
        private int amount;
        private int status;

        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
        public int getAmount() {
            return amount;
        }
        public void setAmount(int amount) {
            this.amount = amount;
        }
        public int getStatus() {
            return status;
        }
        public void setStatus(int status) {
            this.status = status;
        }

    }
}

共有2个答案

江子石
2023-03-14

请用以下方式替换H栏中的操作:

当前解决方案:

a.setStatus($param);update(a);

新解决方案:

modify(a) {
    setStatus($param)
}
姚阳德
2023-03-14

属性lock-on-active会取消具有相同议程组的规则组中第一个规则后的任何解雇。删除此列。

不要计划让规则按特定顺序启动。编写准确描述事实状态的逻辑,因为它应该触发规则。也许你得写信

rule "set status"
when
  $s: Salary( amount >= 500.0 && < 600.0, status == 0 )
then
  modify( $s ){ setStatus( 400 ) }
end

避免发生多个状态设置或只发生正确的设置。但你会发现你的规则可能更直言不讳,更容易阅读。

考虑规则属性是最后的手段。

 类似资料:
  • 我正在使用Drools 5.5.0,我有一个决策表,如下所示: 当我运行规则引擎时,我一次只插入一个SecurityContext,一次插入一个JSONWrapper。 仅基于此表,我的任何规则都不会被解雇(但它们都会得到评估)。我认为这是因为对于第二个条件,每个角色/规则的单元格都是空白的。 这就是我在DRL中努力追求的目标: 这条规则很好。 如何在我的决策表中设置一个条件,仅检查对象的存在,而

  • 当我尝试使用Drools引擎计算保险费时,我有一个潜在的性能/内存瓶颈。 我在我的项目中使用Drools将业务逻辑与java代码分开,我决定也将其用于溢价计算。 我是不是用错了口水 如何以更高性能的方式满足要求 详情如下: 我必须为给定的合同计算保险费。 合约配置有 productCode(来自字典的代码) 合同代码(来自字典的代码) 客户的个人资料(例如年龄、地址) 保险金额(SI) 等等 目前

  • 我对口水和决策表还不熟悉。我需要创建一个规则,使用规则中的人的年龄来测试一个人是否年长/年轻。该规则在无限循环中工作。 这是规则,是基本的,人的年龄 我的角色类是一个简单的POJO,用于测试决策表: Person类(静态,在主类中): 我的主要方法是在JRE 1.7中使用drools 6.5: 这是无限循环的输出。 感谢您提供的任何提示、链接、教程等。

  • 我正在使用KIE IDE 7.11.0。最终的我使用Drools决策表已经很长时间了。但我还没有看到任何文件显示如何实现这一点。例如,当我需要变量,性别和年龄时,根据这两个事实,我得到一个类型。实现这一目标的旧方法如下: 然而他们是另一种简单的方法 横轴是年龄,纵轴是性别。两个变量都给出了类型值。但是我发现我不能在Drools中做这样的决策表。 我能流口水吗?

  • 我很难找到一条我知道有效的规则。drl表单,用于在决策表中工作。 这是我的drl形式的规则: 以下是我在电子表格中尝试的内容: 当我尝试从电子表格中运行规则时,我遇到以下错误: from子句似乎有问题,但我不知道为什么。我尝试了无数次谷歌搜索,这是我唯一能找到的:http://drools-moved.46999.n3.nabble.com/Question-on-excel-decision-t