0

私は ksession.insert(list) を実行しています。その後、drl ファイルでルール 1 を起動し、次に ksession.insert(list) を実行して、drl でルール 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 および Rule 1 内で ..Rule 1 を arraylist1 で動作させたい場合は、これを lhs の最初に一致させます。 $al:ArrayList(this contains "Rule 1")

それだけです..

于 2011-04-09T13:15:10.073 に答える
0

どのルールが起動するかを直接制御することはありません。ルールの制約がこれを決定します。フィルタは、ルールの実行を停止している場合にのみ役立ちます。

于 2009-10-25T22:55:38.520 に答える