私は2つのルールを持つスプレッドシートでドループ決定表を持っています。 (この例は非常に単純化された、私が働いている一つはたくさん複数のルールを有する。)デシジョンテーブルの事実を更新してください:Drools
最初のルールチェックは、量がより多いまたは500に等しい場合そうである場合、それは400にステータスを設定します。 第2のルールは、ステータスが400であるかどうかをチェックします。存在する場合は、メッセージ変数を設定します。 問題は、シーケンシャルが設定されていても、2番目のルールを起動できないということです。無限ループを防ぐためにno-loopとlock-on-activeを使用する必要もあります。
私の目標は、ルールをトップダウンにすることです。ルールは、以前のルールでファクト/オブジェクトに加えられた変更に依存する可能性があります。
この問題を解決する方法はありますか? ご協力いただきありがとうございます。
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のルールが発生しません –
これは、事実を更新するための代替構文です。 – laune