Anfang des Inhaltsbereichs

Hintergrunddokumentation BAdIs - Tipps und Tricks  Dokument im Navigationsbaum lokalisieren

Organisation von BAdIs

Für klassische BAdIs wurden oft große BAdI-Interfaces benötigt, um verwandte Funktionen zusammenzufassen. Bei den neuen BAdIs können Sie zusammengehörige Funktionen auf mehrere kleine BAdIs aufteilen und diese in einem gemeinsamen (zusammengesetzten) Erweiterungsspot verwalten. Dadurch umgehen Sie die Nachteile großer BadIs wie Programmabbrüche, wenn zusätzlich eingeführte Interface-Methoden nicht implementiert werden, oder Verwischungen der Struktur einer Erweiterung.

Kontexte für BAdIs

Der Instanzerzeugungsmodus eines BAdIs kann kontext-abängig sein. Bei kontext-abhängigen BAdIs muss bei GET BADI eine Objektreferenzvariable auf ein BAdI-Kontextobjekt (Objekt, dessen Klasse das Tag-Interface IF_BADI_CONTEXT implementiert) angegeben werden. Dadurch werden innerhalb eines internen Modus für das gleiche BAdI-Kontextobjekt immer die gleichen Objekt-Plugins verwendet. Solche Objekt-Plugins sind Singletons bezüglich ihrer BAdI-Implementierungsklasse und eines BAdI-Kontextobjekts. Die Verwendung eines kontext-abhängigen BadIs, das mit einem Programm verknüpft ist, wird in folgendem Beispiel illustriert.

Beispiel

Durch Verwendung der vordefinierten globalen Klasse cl_badi_report_context können Sie auf einfache Weise BAdI-Implementierungen an ein (ausführbares) Programm (allgemeiner an eine Kompilationseinheit) koppeln. Diese Klasse implementiert das Interface if_badi_context, hat ein öffentliches Attribut repid und eine öffentliche statische Methode get_instance, die ein Objekt erzeugt und das Attribut setzt.

Durch Aufruf der Methode cl_badi_report_context=>get_instance können bezüglich des Attributs eindeutige Instanzen erzeugt werden, die als BAdI-Kontextobjekte dienen.

Das BAdI badi_ctx_badi sei kontext-abhängig und habe keine Filter. Das folgende Code-Fragment zeigt die Verwendung von cl_badi_report_context.

DATA: bd  TYPE REF TO badi_ctx_badi,

      ctx TYPE REF TO cl_badi_report_context.

 

ctx = cl_badi_report=>get_instance( repid = sy-repid ).

GET BADI bd CONTEXT ctx.

Die Referenzvariable ctx referenziert eine für den aktuelle Programmnamen eindeutige Instanz. In diesem Kontext wird ein BAdI-Objekt angefordert. Wird dasselbe Code-Fragment in anderen Programmen im gleiche internen Modus ausgeführt, so sind mit dem BAdI-Objekt jeweils verschiedene Instanzen der BAdI-Implementierungsklassen assoziiert.

Die Klasse cl_badi_report_context erlaubt es, Objekt-Plugins an Kompilationseinheiten zu binden. Die Methoden dieser Objekt-Plugins können überall im internen Modus durch oben gezeigte Kombinationen von GET BADI und CALL BADI aufgerufen werden. Dabei wird der Zustand erhalten, d.h. für dieselben Kompilationseinheiten werden immer dieselben Instanzen aufgerufen.

 

 

 

Ende des Inhaltsbereichs