0

我正在做 ksession.insert(list) ,之后我必须在 drl 文件中触发规则 1,然后在 drl 中触发 ksession.insert(list) 和规则 2。

有人可以告诉我如何实现这一目标。我阅读了有关议程过滤器和事实句柄的信息,但并不真正知道如何使其发挥作用

下面是一些代码:

ArrayList 列表 = 新的 ArrayList(); list.add(product1); list.add(product2); list.add(product3);

ksession.insert(列表);
ksession.fireAllRules("drl 中的触发规则 1");

//删除列表?

ArrayList list2 = new ArrayList(); list2.add(str1); list2.add(str2); list2.add(str3);

ksession.insert(list2); ksession.fireAllRules("drl 中的触发规则 2");

4

2 回答 2

1

我认为有更好的解决方法...您可以控制模式匹配..

这是一个简单快捷的方法

arrayList1.add("Rule 1");//if you can afford this without generics
arrayList1.add(...);//everything else you want to add
arrayList2.add("Rule 2");
arrayList2.add(..);//rest...

..
ksession.insert(..) ;//insert everything one by one

.. 在您的 drl 和规则 1 中 ..当您希望规则 1 与 arraylist1 一起使用时,首先在 lhs 中进行此匹配 $al:ArrayList(this contains "Rule 1")

就这些..

于 2011-04-09T13:15:10.073 回答
0

您不能直接控制触发哪些规则 - 规则的约束决定了这一点。只有在您阻止规则触发时,过滤器才会有所帮助。

于 2009-10-25T22:55:38.520 回答