Interface-Gene­rie­rung

LF‑ET bie­tet für ABAP auch die Möglichkeit, die Steuerlogik der Ent­schei­dungs­ta­belle über ein generiertes Interface von einer konkreten Implementierung zu entkoppeln.

Um die Interface-Gene­rie­rung zu verwenden, muss im ABAP-Prolog zur Ent­schei­dungs­ta­belle der ABAP-Gene­rie­rungs­para­me­ter $$InterfaceName definiert sein, wie zum Beispiel:

  • $$InterfaceName=ZIF_AMPELSCHALTUNG oder * $$InterfaceName=ZIF_$$etname**.

Zuerst wird das Interface ge­ne­riert:

  • Zu jedem Bedingungswert wird eine "is-Methode" definiert

  • Zu jedem Aktions­wert wird eine "do-Methode definiert

  • Die Methodennamen werden auto­ma­tisch aus den Titeln und Symbolen der Bedin­gungs- und Aktions­werte abgeleitet

  • Überlange Methodennamen werden auto­ma­tisch gekürzt, wobei iterativ das je­weils letzte längste Wort um maximal die Hälfte verkürzt wird. Der Vorgang wird solange wiederholt, bis die zulässige Länge eines ABAP-Methodennamens von derzeit 30 Zeichen nicht mehr überschritten wird.

  • Jede Methode erhält auto­ma­tisch einen Kommentar, der aus allen verfügbaren Informationen aus der Ent­schei­dungs­ta­belle ntscheidungstabelle (Titel, Symbole, Texte, etc.) zusammengestellt wird

  • Zu­sätz­lich wird noch für den Trace-Code eine Methode definiert

Anschließend wird die Klasse mit der eigentlichen Steuerlogik (Rules-Engine, Regel­modul, IF-ELSE-Regelbaum) ge­ne­riert:

  • Die Klasse enthält nur eine Methode "execute" mit dem Interface als Parameter

  • Der IF-ELSE-Regelbaum benutzt nur die im gene­rier­ten Interface definierten Methoden

Der Sinn dieser Gene­rie­rungs­art: Weder die Ent­schei­dungs­ta­belle, noch das gene­rier­te Interface, noch das gene­rier­te Regel­modul enthalten anwendungsspezifischen Source­code!

Das bedeutet:

  • Maximale Entkopplung der Steuerlogik (d.h. Ent­schei­dungs­ta­belle) von einer konkreten Implementierung

  • Mehrere ABAP-Implementierungen derselben Logik sind möglich (z.B. in unter­schied­lichen Projekten), Basis für jede Implementierung ist immer das gene­rier­te Interface

Weitere Informationen und detaillierte Beispiele zur Interface-Gene­rie­rung finden Sie hier: