我使用的是Drools 4,当我用==比较两个hashmap值时,它不起作用。所有其他运营商,如
评估((abc.getValue(“123”))。intValue()==(abc.getValue(“456”))。intValue())
规则:
rule "008"
salience -18
agenda-group "CAP"
auto-focus true
when
testObj: TestObj(eval(fireNextPriority==true), categoryCount==18,
eval(!firedRules.contains(Integer.valueOf(23449)))
&& (date >= 1263925800000)
&& (date <= 4102338600000) && (date >= 1263925800000) && (date <= 4102338600000)
&& eval(1 == 1)
&& eval(testObj.getVariableValue("C1TC") == testObj.getVariableValue("Y1TC")))
then
System.out.println("Firing rule: CAP - 008");
testObj.setStatus(true);
testObj.setPriority(1);
testObj.addToFiredRules(23449);
update(testObj);
testObj.addVariableValue("C1PC", testObj.getVariableValue("C1PC")-
testObj.getVariableValue("C1OF"));
end
我们正在使用的对象:
public class TestObj{
Long date;
Integer categoryCount;
boolean status = false;
boolean executeFinalRule = false;
boolean executeFinalRuleForCatg = true;
boolean fireNextPriority = true;
Set<Integer> firedRules = new HashSet<Integer>();
private int priority;
Map<String, Integer> variableValues = new HashMap<String, Integer>();
public Integer getCategoryCount() {
return categoryCount;
}
public void setCategoryCount(Integer categoryCount) {
this.categoryCount = categoryCount;
}
public void increaseCategoryCount(){
this.categoryCount++;
}
public void addVariableValue(String variableCode, Integer count){
if (count < 0) count = 0;
this.variableValues.put(variableCode, count);
}
public Integer getVariableValue(String variableCode){
Integer value = this.variableValues.get(variableCode);
return value == null? 0 : value;
}
public boolean isStatus() {
return status;
}
public Set<Integer> getFiredRules() {
return firedRules;
}
public void setFiredRules(Set<Integer> firedRules) {
this.firedRules = firedRules;
}
public void addToFiredRules(int l){
this.firedRules.add(l);
}
}
提前感谢。
我从来没有用过Drools 4。x、 因此,这些是基于我(以前)对5.1.1的了解而得出的观察结果-在你的情况下,它们可能不准确。
eval(fireNextPriority==true)
这真是不可思议<代码>求值(code>eval)不维护封闭模式(事实)的上下文,因此通常必须编写
eval(!firedRules.contains(Integer.valueOf(23449))
同样的事情。
eval(testObj.getVariableValue("C1TC") == testObj.getVariableValue("Y1TC"))
这是我从5.1开始写的。
奇怪的是
testObj.addVariableValue("C1PC", testObj.getVariableValue("C1PC")
testObj.getVariableValue("C1OF"));
(我在编辑时把这搞砸了吗?)这些更改是在调用update之后进行的,这意味着引擎不会看到这些更改。地图条目“C1TC”和/或“Y1TC”的更新是否在另一条规则中进行过类似操作?那他们就不等于流口水了,即使他们是Java。。。
问题内容: 请帮助我创建一个包含10个’where’子句的select查询,其顺序应为:查询结果应按大多数关键字(where条件)匹配到最不匹配的顺序显示。 注意:所有10个条件都带有“或”。 请帮助我创建此查询。我正在使用MS-SQL Server 2005 喜欢: 在上面的查询中,所有与最大条件匹配的记录都应位于顶部,而较少匹配条件的记录应位于底部。 问题答案:
我一定错过了什么。我正在计算一个列表,想跳过特定的数字,所以我做了一个switch语句: 以下是输出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29 30 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 50 52 53 注意,44出现了,尽管我没
问题内容: 这将更好地显示在我的示例中: 我有一张桌子,存储着用户从一种大表格中得到的答案。每个表格有139个问题。这些问题存储在不同的表中,并在需要时与questionID结合在一起。对于每个用户,都有一个ID。现在,我需要进行过滤,以仅显示与特定问题匹配一个或 多个 答案的用户。 例如,我希望用户在问题14中回答为“是”,问题54不为空且问题100大于10的情况下。表的外观如下: 结果,我只希
本文向大家介绍Rust 与守卫的条件模式匹配,包括了Rust 与守卫的条件模式匹配的使用技巧和注意事项,需要的朋友参考一下 示例 可以根据独立于使用if防护匹配的值的值来匹配模式: 这将显示“不可用”。
问题内容: 我有一个.DRL文件,其中有10条规则。插入事实后,可能会匹配一些规则-如何找出以编程方式匹配的规则? 问题答案: 请注意,此答案对不超过5.x的Drools版本有效。 如果您已升至6或更高,请查看@ melchoir55的修改后答案。我还没有亲自测试过,但是我相信它会起作用。 若要跟踪规则激活,可以使用AgendaEventListener。下面是一个示例,可在此处找到: https
我正在通过drools-guvnor创建规则。我已经导入了我的POJO模型,并且一切都设置正确(我已经进行了测试),但我似乎无法弄清楚如何让“匹配”运算符正确工作。这是我到目前为止所拥有的(源代码): 有谁能给我一些关于在drools guvnor中使用多个正则表达式检查的提示,或者一些让它工作的方法。他们的论坛似乎真的很陈腐。我在网上找到的大多数答案都没有答案。 任何帮助都将不胜感激。