Anfang des Inhaltsbereichs

Hintergrunddokumentation Instanziierung von BAdIs  Dokument im Navigationsbaum lokalisieren

Diese Eigenschaft steuert die Instanziierung der Objekt-Plug-Ins bei Ausführung der Anweisung GET BADI. Folgende Angaben sind möglich:

      Neu erzeugende Instanziierung

      Wieder verwendende Instanziierung

      Kontext-abhängige Instanziierung

Die ersten beiden Angaben definieren kontext-freie BAdIs. Bei der neu erzeugenden Instanziierung werden bei jeder Ausführung der Anweisung GET BADI neue Objekt-Plug-Is erzeugt. Bei der wieder verwendenden Instanziierung wird ein einmal im aktuellen internen Modus verwendetes Objekt-Plug-In wieder verwendet, falls es wiederholt benötigt wird.

Bei der kontext-abhängigen Instanziierung müssen Sie für GET BADI einen Kontext angeben. Dieser Kontext steuert die Instanziierung. Pro Kontext und implementierende Klasse wird genau ein Objekt-Plug-In erzeugt, und bei einem erneuten GET BADI mit demselben Kontext wird dieses wieder verwendet. Ein Kontext ist eine Instanz einer Klasse, die das Tag-Interface if_badi_context implementiert. Die Angabe erfolgt in Form einer Referenz auf eine solche Instanz.

Hinweis

Wenn Objekt-Plug-Ins wieder verwendbare Daten enthalten sollen, können nur die Angaben 1 und 2 gemacht werden.

Beispiel

Die folgenden Abbildungen zeigen für kontext-freie BAdIs die Situation nach zwei aufeinander folgenden Anweisungen.

GET BADI bd1.

GET BADI bd2.

Die oberen Rechtecke repräsentieren die BAdI-Objekte. Die gestrichelten Pfeile zeigen an, welche Objekt-Plug-Ins von den BAdI-Objekten referenziert werden, wobei hier der Fall von zwei passenden BAdI-Implementierungsklassen cl_imp1 und cl_imp2 dargestellt wird.

Abbildung 1 zeigt die neu erzeugende Instanziierung. Bei der Erzeugung jedes BAdI-Objekts werden neue Objekt-Plug-Ins erzeugt, erst imp1 und imp2, dann imp3 und imp4.

Abbildung 1

Diese Grafik wird im zugehörigen Text erklärt

Abbildung 2 zeigt die wieder verwendende Instanziierung. Pro BAdI-Implementierungsklasse wird nur eine Instanz erzeugt. Alle BAdI-Objekte verweisen auf die gleiche Instanz, unabhängig davon, wo (im internen Modus) und wie das BAdI-Objekt angefordert wird.

Abbildung 2

Diese Grafik wird im zugehörigen Text erklärt

Kontexte für BAdIs

Der Instanzerzeugungsmodus eines BAdIs kann kontext-abhä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-Plug-Ins verwendet. Solche Objekt-Plug-Ins 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 Kompilierungseinheit) 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 gleichen 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-Plug-Ins an Kompilierungseinheiten zu binden. Die Methoden dieser Objekt-Plug-Ins 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 Kompilierungseinheiten werden immer dieselben Instanzen aufgerufen.

 

 

 

Ende des Inhaltsbereichs