我一直在努力解决流口水的问题,这是我最后的选择。
假设我有一个3人的列表:[1,2,3]。可以将此列表视为这些人的ID值列表。现在,我想按以下顺序评估这些人的所有独特配对:
我的电子表格规则表如下所示:
它利用了这条评论中提到的一个技巧:Drools比较决策表中的两个对象。
Person类已正确导入,三个人已插入会话,每个Person对象都有一个getId()
方法。
但是,在会话上运行fireAllRules()会得到以下输出:
你可能会注意到,这是我想要的一组结果的补充。
请注意!经过胡乱猜测,结果是改变条件
我试图模仿的规则如下所示:
rule "same-company"
when
$p1 : Person($id1 : id)
$p2 : Person($id2 : id, id > $id1)
then
System.out.println($p1.getId() + " " + $p2.getId());
end
此规则在. drl文件中运行良好,并且按预期运行!
所以我的问题是:
我在Person对象中还有一些更复杂的变量,我想将逻辑应用于(我想比较的每个人的字符串映射),同样的事情也会发生;当我设置的条件未得到满足时,Drools电子表格似乎会让规则通过。瞄准相反的目标是可能的,并且有效,但对我来说,这似乎不是应该的方式。
提前感谢!
package org.ps.dtable;
//generated from Decision Table
import org.ps.orm.Person;
// rule values at C12, header at C7
rule "PSBR_12"
when
$p1:Person ($id1: id) $p2:Person($id2:id, id > $id1 /*param*/ == "X")
then
System.out.println($p1 + " vs " + $p2);
end
编辑2:缺少$in/*$参数*/,导致计算异常。吸取的教训;永远不要忘记钱。
我看不出操作符如何
更重要的是,我无法使用5.5版重现这个问题。
旧版本可能以不同的方式处理这种特殊情况。然后重要的是要意识到电子表格编译器将约束(第4行中的约束)压缩到第3行的括号中(除非行是根据不同的模式形成的,自动添加==)。您可以尝试在第二个人之后添加一对括号
CONDITION
$p1:Person($id1:id) $p2:Person()
$id2:id > $id1 /*$param*/
pairs ordered by ascending id
如果这不起作用,您将不得不升级。
PS:对于调试,打印生成的DRL是必不可少的。在Drools中查看我的答案-在决策表中使用“from”
PPS:仔细阅读总是有帮助的。我忽略了您的问题中没有美元符号,因此生成的规则将约束附加到了
=“X”
。奇怪的是,这是以一种非常奇怪的方式编译和计算的,我现在无法理解。可能任何不等于“true”的字符串都被视为等于“false”,这将像求反一样工作,并产生您无法理解的结果。难怪。(很可能,MVEL评估处于这一问题的底部,这产生了其他令人困惑的影响。)
我在DRL文件中有以下代码 终止 这是工程,但我需要将其转换为电子表格。我尝试了这么多的变体,但没有一个有效。如何在决策表中写入此规则?
场景如下: 我有一个java pojo类,具有2个变量和以及适当的getter和setter。我正在使用决策表流,我想要: 条件:当类型设置为“1”时 操作:调用name类的setName setter,并从excel中设置适当的参数 现在,我想在java中访问name的这个集值。 这就是我所做的: Name.java- MainClass.java-这有口水实现!! 决策表e:: http://
当我尝试使用Drools引擎计算保险费时,我有一个潜在的性能/内存瓶颈。 我在我的项目中使用Drools将业务逻辑与java代码分开,我决定也将其用于溢价计算。 我是不是用错了口水 如何以更高性能的方式满足要求 详情如下: 我必须为给定的合同计算保险费。 合约配置有 productCode(来自字典的代码) 合同代码(来自字典的代码) 客户的个人资料(例如年龄、地址) 保险金额(SI) 等等 目前
我有一个drools决策表,其中包含条件和位置类型 我的excel如下所示 设置参数的代码如下 我按要求提供的excel文件条件对象: 需求级别==$参数位置类型==$参数 当我像上面那样设置时,我得到以下错误: 创建KieBase时出错[消息[id=1,级别=错误,路径=规则.xls,行=8,列=0文本=[错误102]行8:14不匹配的输入'=='在规则“替换规则”中],消息[id=2,级别=错
两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"
两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"