Anfang des Inhaltsbereichs

Diese Grafik wird im zugehörigen Text erklärt BAdIs implementieren  Dokument im Navigationsbaum lokalisieren

Im vorherigen Beispiel (So erstellen Sie Ihr erstes BAdI) haben Sie ein BAdI definiert, eine Fallback-Klasse bereitgestellt, das BAdI instanziiert und eine BAdI-Methode aufgerufen. Außerdem haben Sie einen Erweiterungsspot bereitgestellt, der als Containier für das BadI dient.

Wie Sie bereits wissen, wird die Fallback-Klasse gewählt, wenn keine BAdI-Implementierung verfügbar ist. Da Sie bisher noch keine BAdI-Implementierung angelegt haben, wird in Ihrem Quelltextbeispiel die Methodenimplementierung der Fallback-Klasse benutzt.

In diesem Abschnitt lernen Sie, wie man eine BAdI-Implementierung anlegt. Sobald eine passende BAdI-Implementierung vorhanden ist, wird die Methode der Fallback-Klasse nicht mehr benutzt.

Bisher haben Sie die folgenden Einträge:

      Erweiterungsspot z_es_calc_tax, der das BAdI z_badi_calc_vat enthält.

      Interface z_if_calc_vat mit einer Methode get_vat().

Das BAdI-Interface definiert einen wichtigen Teil der BAdI-Identität: Es definiert die BAdI-Methoden, die verwendet werden können.

Container für die Implementierung anlegen

BAdI-Definitionen und BAdI-Implementierungen haben eine Gemeinsamkeit: So wie Sie einen Erweiterungsspot als Container für Ihr BAdI benötigen, können Sie eine BAdI-Implementierung nicht bauen, ohne vorher einen entsprechenden Container angelegt zu haben.

Die Containerart für BAdI-Implementierungen heißt (einfache) Erweiterungsimplementierung. Eine einfache Erweiterungsimplementierung kann mit einer Einschränkung viele verschiedene BAdI-Implementierungen enthalten: Sie muss eindeutig einem Erweiterungsspot zugeordnet sein. Eine (einfache) Erweiterungsimplementierung kann demnach nur BAdI-Implementierungen von BAdIs enthalten, die zu dem Spot gehören, dem die einfache Erweiterungsimplementierung zugeordnet ist. Eine (einfache) Erweiterungsimplementierung kann also keine BAdI-Implementierungen enthalten, die zu einem anderen Spot gehörende BAdIs implementieren.

Aus diesem Grund müssen Sie einen Container anlegen, der eindeutig dem Erweiterungsspot zugeordnet ist, zu dem Ihre BAdIs gehören. Das entsprechende Werkzeug in SE80 bietet Ihnen dazu einen einfachen Weg:

...

       1.      Im Object Navigator (Transaktion SE80) öffnen Sie den bereits angelegten Erweiterungsspot und wählen die Drucktaste Erweiterungsimplementierung anlegen.

Diese Grafik wird im zugehörigen Text erklärt

       2.      Legen Sie in dem Dialogfenster eine (einfache) Erweiterungsimplementierung an:

       3.      Diese Grafik wird im zugehörigen Text erklärt

Diese Grafik wird im zugehörigen Text erklärt

Das folgende Fenster wird geöffnet:

Diese Grafik wird im zugehörigen Text erklärt

Was müssen Sie hier eingeben?

Sie haben einen Container für BAdI-Implementierungen - eine Erweiterungsimplementierung - angelegt. Dieser Container ist Ihrem Erweiterungsspot eindeutig zugeordnet. Sobald die Verbindung hergestellt ist, können Sie innerhalb des Erweiterungsspots eine BAdI-Implementierung für das BAdI anlegen. Da Sie nur ein BAdI angelegt haben, müssen Sie dieses auswählen. Wenn mehrere BAdIs in Ihrem Erweiterungsspot vorhanden wären, müssten Sie nun das BAdI auswählen, das Sie implementieren möchten.

       4.      Geben Sie z_bdi_calc_vat_us als Name für die BAdI-Implementierung ein, bestätigen Sie und sichern Sie den Erweiterungsspot im nächsten Bild. Dort sehen Sie eine (einfache) Erweiterungsimplementierung, welche die BAdI-Implementierung z_bdi_calc_vat_us enthält:

Diese Grafik wird im zugehörigen Text erklärt

Eine (einfache) Erweiterungsimplementierung sieht in dem Werkzeug fast genau so aus wie ein Erweiterungsspot. Unter dem Register Erw.implementierungs-Elemente sehen Sie einen Baum mit den auf der rechten Seite enthaltenen BAdI-Implementierungen. Links sehen Sie die Eigenschaften der ausgewählten BAdI-Implementierungen.

Hinweis

Markieren Sie unter Laufzeitverhalten die Option Implementierung ist aktiv wie im oben stehenden Bild gezeigt. Im darunter liegenden Textfeld erscheint der Text Implementierung wird aufgerufen. Dies verdeutlicht Ihnen die Bedeutung der soeben von Ihnen vorgenommenen Auswahl. Weiter unten finden Sie eine Liste mit den Eigenschaften der BAdI-Definition, der Ihre BAdI-Implementierung zugeordnet ist.

Die Implementierungsklasse

Sie benötigen nun eine implementierende Klasse.

...

       1.      Klicken Sie in der Baumstruktur auf das Dreieck vor dem Namen Ihrer BAdI-Implementierung.

       2.      Geben Sie in das Feld Implementierende Klasse z_cl_calc_vat_usein und wählen Sie die Drucktaste Ändern.

Diese Grafik wird im zugehörigen Text erklärt

Der Class Builder wird geöffnet. Die entsprechenden Interface-Methoden sind dort bereits definiert. In Ihrem Fall benötigen Sie nur die Methode get_vat().

       3.      Implementieren Sie die Methode mit dem folgenden Auszug aus dem Quelltext:

DATA: percent type p value 4 .

ex_amount_vat = im_amount * percent / 100 .

ex_percent_vat = percent.

       4.      Sichern und aktivieren Sie die Klasse.

       5.      Gehen Sie zurück in das Programm und geben Sie folgenden Quelltext ein:

DATA: handle TYPE REF TO z_badi_calc_vat,

sum TYPE p,

vat TYPE p,

percent TYPE p.

sum = 50.

GET BADI handle.

CALL BADI handle->get_vat

EXPORTING im_amount = sum

IMPORTING ex_amount_vat = vat

         ex_percent_vat = percent.

WRITE: 'percentage:', percent, 'VAT:', vat.

       6.      Führen Sie das Programm aus.

Das Ergebnis sind vier Prozent. Dieses Ergebnis kommt zustande, da die Fallback-Klasse nicht ausgewählt ist, wenn eine aktive BAdI-Implementierung vorhanden ist.

Weitere BAdI-Implementierung anlegen

...

       1.      Legen Sie eine weitere BAdI-Implementierung an, dieses Mal mit der Mehrwertsteuer von Großbritannien.

Um Ihr Beispiel praxisnaher zu gestalten, legen Sie noch eine Erweiterungsimplementierung an, d. h. noch einen Container. Das Implementieren von Steuern für verschiedene Länder wird sehr wahrscheinlich in verschiedenen Projekten ausgeführt, daher muss die Struktur einer (einfachen) Erweiterungsimplementierung die Projektstruktur widerspiegeln.

       2.      Gehen Sie zu Ihrem Erweiterungsspot und wählen Sie die gleiche Drucktaste wie vorher. Nennen Sie die BadI-Implementierung z_bdi_calc_vat_gbund die implementierende Klasse Z_CL_CALC_VAT_GB. Die Implementierung der Methode get_vat entspricht der für die USA, abgesehen von der Höhe der Mehrwertsteuer.

       3.      Gehen Sie, nachdem Sie die Erweiterungsimplementierung und die Klasse gesichert haben, zurück zu Ihrem Programm und führen Sie es erneut aus.

Sie erhalten einen Kurzdump mit der Ausnahme cx_badi_multiply_implemented.

Hinweis

Sie haben ein einfach verwendbares BAdI definiert, indem Sie die Markierung der Option mehrfach verwendbar aufgehoben haben. Bei der Instanziierung eines einfach verwendbaren BAdIs müssen Sie sich vergewissern, dass nur eine aktive Implementierung vorhanden ist, die nicht der Standard ist. Andernfalls treten zur Laufzeit verschiedene Ausnahmen auf.

Der nächste Schritt ist, einen Weg zu finden, wie Sie zwischen verschiedenen BAdI-Implementierungen wählen können. Dazu gibt es Filter. Weitere Informationen finden Sie unter Filter verwenden.

 

 

 

Ende des Inhaltsbereichs