BRF+: Ein smarter Weg Businesslogiken zu designen
Geschäftlogik wird in den meisten Fällen direkt im ABAP Code realisiert. Wenn sich hin und wieder etwas an den Parametern ändert, werden diese Werte in einer Customizing-Tabelle gefplegt und im ABAP-Code ausgelesen und verarbeitet.
Sehen wir uns dazu ein kleines Beispiel an. Nehmen wir an, wir wollen zu einem Jahresgehalt die anfallenden Steuern berechnen.
Zum jetzigen Zeitpunkt wird der Steuerbetrag folgendermaßen berechnet:
Gehalt < 25.000€ | Steuerbetrag = Gehalt * 0,1 |
Gehalt >= 25.000€ | Steuerbetrag = ( 25000€ * 0,1 ) + (( Gehalt – 25.000€ ) * 0,2 ) |
Im ABAP Code könnte diese Geschäftsregel z.B. folgendermaßen aussehen:
Wenn man nun diese Geschäftsregel konfigurierbar halten möchte, kann man die Konstanten in eine Customizing-Tabelle auslagern, und vor der Berechnung auslesen. In diesem einfachen Beispiel müsste dann eine Customizing Tabelle inklusive Pflegedialog für drei Parameter(25.000, 0,1, 0,2) erstellt werden.
Die Steuerberechnung funktioniert nun für eine Weile einwandfrei. Die Gehaltsgrenze lässt sich auch bequem über die Customizing-Tabelle anpassen, so dass kein Entwickler nötig ist, um Werteänerungen an der Geschäftslogik vorzunehmen. Nun änderen sich die Vorschriften und in Zukunft müssen die Steuern in drei verschiedenen Gehaltsstufen berechnet werden:
Gehalt < 25.000€ | Steuerbetrag = Gehalt * 0,1 |
25.000€ < Gehalt < 100.000€ | Steuerbetrag = ( 25000€ * 0,1 ) + (( Gehalt – 25.000€ ) * 0,2 ) |
Gehalt >= 100.000€ | Steuerbetrag = ( 25000€ * 0,1 ) + (( Gehalt – 25.000€ ) * 0,2 ) + (( Gehalt – 100.000€ ) * 0,3 ) |
Nun muss ein Entwickler bezahlt werden um die Funktionalität der Geschäftslogik zu erweitern. Wäre es nicht schöner, wenn man Anpassungen an der Geschäftslogik vornehmen könnte ohne dafür Änderungen am ABAP-Quellcode vornehmen zu müssen? Und wäre es nicht viel praktischer, die Geschäftslogik, komplett aus dem ABAP-Quellcode rauszulösen, so dass Verhalten und Werte, ohne ABAP- bzw. Programmierkenntnisse , z.B. von der Betriebsführung verwaltet und gepflegt werden können?
Im Quellcode sähe dies dann folgendermaßen aus:
Das Verhalten der Funktion calculate_tax wird dann in einer grafischen Konfigurationsoberfläche gepflegt, ohne dass dafür ABAP oder Programmierkenntnisse nötig sind.
Mit dem NetWeaver 7.0 EHP 2 hat die SAP das Business Rule Framework Plus (BRF+) herausgebracht mit dem genau so etwas möglich ist.
Die Konfigurationsoberfläche lässt sich über die Transaktion BRF+ oder BRFPLUS starten. Sie basiert auf WebDynpro für ABAP:
In BRF+ gibt es verschiedene Entitäten, mit denen Geschäftslogik modeliert werden kann. Das Bindeglied zwischen BRF+ und dem Applikationscode ist die BRF+-Entität Function. Dort wird unter anderem die Signatur der Geschäftsregel definiert. Bei der Signatur handelt es sich um die Ein- und Ausgabeparameter, mit der die Geschäftsregel aufgerufen werden kann. In unserem Beispiel haben wir als Eingabeparameter das Gehalt und als Ausgabeparameter den Steuerbetrag:
Diese Function wird dann im ABAP-Code eingebunden und aufgerufen. Solange sich an der Signatur der Function nichts ändert, kann das Verhalten der Geschäftsregel beliebig verändert werden, ohne dass dafür Änderungen am ABAP-Quellcode nötig werden. Dabei sei anzumerken, dass BRF+ auch im Stande ist, Daten aus externen Quellen zu lesen, wie z.B. Datenbanktabellen, Funktionsbausteinen oder statischen Klassenmethoden.
Nachdem die Signatur definiert wurde, können wir die Geschäftslogik modellieren. Zuerst erstellen wir drei Formeln, in denen die Steuerberechnung vorgenommen wird:
Steuerberechnung für hohes Gehalt (>=100.000)
Steuerberechnung für mittleres Gehalt (>= 25.000)
Steuerberechnung für niedriges Gehalt ( < 25.000)
Im nächsten Schritt modellieren wir mit einem Entscheidungsbaum, wann welche Rechenregel ausgeführt werden kann:
Im letzten Schritt weisen wir der Funktion den Entscheidungsbaum als Top-Expression zu und können unsere Regel direkt in der Oberfläche testen:
Ein richtig super Feature ist die Möglichkeit, gesamten Regelprozess auszugeben:
Es besteht auch die Möglichkeit, diesen Trace in der Applikation auszulesen, und beispielsweise in der eigenen Applikations-UI anzuzeigen, oder zu Archivierungszwecken zu persistieren. Allerdings bietet BRF+ Versionierung und die Möglichkeit die Regel zu einem anderen Zeitpunkt auszuführen, so dass man auch noch nach Änderungen die Berechnungen mit einem alten Datenstand durchführen kann.