Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Aufruf eines klassischen BAdIs  Dokument im Navigationsbaum lokalisieren

Bei der Definition eines Business Add-Ins wird von der Erweiterungsverwaltung eine Klasse generiert, die das Interface implementiert. Der Anwendungsentwickler erzeugt im Anwendungsprogramm über eine Factory-Methode eine Instanz dieser Adapterklasse und ruft bei Bedarf die entsprechende Methode auf.

In der von der Add-In-Verwaltung generierten Methode der Adapterklasse wird entschieden, ob eine oder mehrere aktive Implementierungen aufgerufen werden müssen. Die Implementierungen werden gegebenenfalls ausgeführt. Das Anwendungsprogramm sorgt nur für den Aufruf der Methoden der Adapterklasse. Dem Anwendungsprogramm ist unbekannt, welche Implementierungen aufgerufen werden.

Hinweis

Ab Release 7.0 werden BAdIs vom Kernel unterstützt und ihr Aufruf ist über die Anweisungen

GET BADI

CALL BADI

in die Sprache ABAP integriert. Siehe die ABAP-Schlüsselwortdokumentation.

 

Beispiel:

Nachdem Sie ein Business Add-In zur Konvertierung eines Wortes angelegt haben, würde der Aufruf des Business Add-Ins im ABAP-Coding folgendermaßen programmiert:

1  Report businessaddin.
2  class cl_exithandler definition load.           "Vorwärtsdeklaration
3  data exit type ref to if_ex_businessaddin.      "Interfacereferenz
4  data wort(15) type c value 'Business Add-in'.   "zu ändernder String

5  start-of-selection.
6    call method cl_exithandler=>get_instance      "Aufruf der Factory-
7          exporting                               "Methode
             exit name              =’BUSINESSADDIN’
8            null instance accepted =’X’
9          changing instance = exit.
10   write:/'Bitte hier klicken'.

11 at line-selection.
12   write:/ 'Original-Wort: ',wort.

13 if not exit is initial.
14   call method exit->methode                     "Aufruf des Add-Ins
15         changing parameter = wort.
16 endif.
17   write:/ 'Geändertes Wort: ',wort.

Um statische Methoden aufrufen zu können, muß in ABAP Objects die entsprechende Klasse deklariert werden. Daher ist die Anweisung class … definition load für die Factory-Klasse notwendig.

Für den Aufruf der Methode ist eine Variable für die Objektreferenz notwendig. Diese wird mit data angelegt und auf das Interface typisiert.

Bei der Initialisierung (Zeile 6) erzeugt der Anwendungsentwickler über die Factory-Methode eine Instanz der Adapterklasse. Zum gegebenen Zeitpunkt werden dann die Instanzmethoden aufgerufen.

Um die Performance bei der Instanzerzeugung zu verbessern, sollten der Methode GET_INSTANCE der Klasse CL_EXITHANDLER zusätzliche Parameter beim Aufruf mitgegeben werden.

EXIT_NAME: Diesem Parameter wird der Name der BAdI-Definition zugeordnet.

NULL_INSTANCE_ACCEPTED: Wird dem Parameter der Wert ‚X’ zugeordnet, so wird keine Instanz erzeugt, wenn es keine aktiven Implementierungen für diese BAdI-Definition gibt. Der Parameter INSTANCE hat in diesem Fall den Wert NULL. Die Verwendung dieses Parameters impliziert, dass die Methodenaufrufe dieses BAdI nur noch unter der Bedingung, dass diese Instanz nicht NULL ist, erfolgen dürfen. Die Abfrage if not <badi instance> is initial. ist in dem Fall notwendig.

Hinweise zur Verwendung

Die über die Factory-Methode erzeugte Instanz sollte so global wie möglich deklariert sein oder aber immer als Parameter übergeben werden, damit der Initialisierungsprozeß so selten wie möglich - anzustreben ist genau einmal - durchlaufen werden muß. Auf keinen Fall sollte die Instanz nach ihrer Erzeugung sofort verworfen werden oder der Instantiierungsprozeß in einer Schleife immer wieder vollzogen werden.

Hinweis

Innerhalb der Instanz der Adapterklasse  werden erforderliche Datenbankzugriffe lokal gepuffert, erfolgen somit nur einmal. Eine immer neu erfolgende Initialisierung aber macht den Puffer wirkungslos und verschlechtert die Performance dramatisch.

Durch die lokale Pufferung kann man Business-Add-In-Methoden aufrufen, ohne gravierende Performance-Einbußen befürchten zu müssen, auch wenn es keine aktiven Implementierungen gibt.

Ist die Definition des Business Add-Ins filterabhängig, so ist ebenfalls eine einzige Instanz völlig ausreichend.

Sparen sollten Sie sich die Initialisierung aber keinesfalls. Auch wenn Sie statische Methoden der implementierenden Klasse der Business-Add-In-Implementierung ohne Instanz aufrufen könnten, so verhindern Sie auf diese Weise die Performance-Vermessung der Business Add-Ins sowie die Möglichkeit der mehrfachen Nutzbarkeit. Wenn im Interface die Methodenart irgendwann einmal von statisch auf instantiierbar geändert werden sollte, so muß im Coding sehr viel geändert werden. Auch die Nutzung von zur Verfügung gestelltem Default-Coding ist in dem Fall nicht möglich.

 

Ende des Inhaltsbereichs