2016-07-25 22 views
0

Im Moment habe ich eine große Entscheidungstabelle mit vielen Bedingungen/Aktionen. Die Entscheidungstabelle hat immer funktioniert, bis ich kürzlich eine neue Aktion hinzugefügt habe. Es scheint nicht ausgeführt zu werden.Drools - Nicht alle Aktionen werden ausgeführt, wenn die Regel ausgelöst wird

Wie ich bin nicht in der Lage die gesamte Datei zu zeigen, das ist der Extrakt der wichtigsten Säulen (darüber im Klaren sein, dass es mehr Bedingungen): Partial list of conditions

Im Folgenden sind die Aktionen, die auf dem definierten " orig“Objekt: enter image description here

die folgenden Felder werden durch die Setter aktualisiert:

  • PRM_LIB01
  • PRM_LIB09
  • PRM_LIB10

wird jedoch PRM_LIB18 nicht aktualisiert. Selbst wenn ich die Aktion von PRM_LIB10 und PRM_LIB18 umschalte, wird nur die Spalte von PRM_LIB10 aktualisiert.

Wenn ich durch den Code debuggen, ich sehe, dass die RuleBuildContext alle Setter für die erste Regel gilt: enter image description here

auf diese So basiert, würde ich erwarten, dass es die setPRM_LIB18 („GC“) auszuführen, wie naja, was nicht passiert.

Also habe ich versucht zu sehen, die Klassendatei Drools tatsächlich generiert, um zu sehen, ob alles in Ordnung scheint, aber ich bin nicht in der Lage, den generierten Bytecode richtig anzuzeigen.

Ich bin wirklich ratlos, warum es nicht funktioniert. Hat jemand eine Ahnung oder wie könnte ich den tatsächlichen Aufruf der Aktionen debuggen, um vielleicht zu sehen, warum es nicht ausgeführt wird?

+0

Sind Sie sicher, dass keine Ihrer anderen Aktionen stören? Zum Beispiel, was macht 'blankOutPremiumFreeFields (orig)'? –

Antwort

0

Dies ist ziemlich unwahrscheinlich. Wie stellen Sie sicher, dass diese Aktion nicht ausgeführt wird? Gibt es eine andere Regel, die PRM_LIB18 ebenfalls ändern könnte?

Für schnelles Debuggen fügen Sie eine weitere Aktionsspalte hinzu, die einen Ausdruck des geänderten Objekts enthält - zumindest die geänderten Felder.

Wenn Sie immer noch keine Ahnung haben, versuchen Sie diesen Code und melden Sie sich mit der vollständigen/abgeschnittenen zu essentiellen Ausgabe zurück.

private void testSpreadsheet(){ 
    File dtf = new File(dtPath); 
    InputStream is; 
    try { 
    is = new FileInputStream(dtf); 
    SpreadsheetCompiler ssComp = new SpreadsheetCompiler(); 
    String s = ssComp.compile(is, InputType.XLS); 
    System.out.println("=== Begin generated DRL ==="); 
    System.out.println(s); 
    System.out.println("=== End generated DRL ==="); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
}