Anfang des Inhaltsbereichs

Hintergrunddokumentation Mehrfach verwendbare BAdIs  Dokument im Navigationsbaum lokalisieren

Mehrfach verwendbare BAdIs

Sie benutzen mehrfach verwendbare BAdIs mit statischen Methoden, wenn keine Daten gepflegt sind und viele Implementierungen in Frage kommen. Sie können beispielsweise im Interface angegebene Ergebnisse in verschiedene Destinationen exportieren.

Beispiel

badi_additional_export

Exportieren Sie den Bucheintrag in zusätzliche Destinationen am Ende des Bucheintrags.

*Some_Code

*End of program

CALL BADI badi_additional->export

Das Ergebnis dieses Beispiels ist:

        Implementierung 1: Export in XML-Datei

        Implementierung 2: Export in sequenzielle Datei

        Implementierung 3: Export in externe Datei

BAdI ohne optionale Funktionalität

Die in der nachfolgenden Abbildung dargestellten Methoden method_a und method_b müssen in ein BAdI gestellt werden. Alle optionalen Methoden werden in ein anderes BAdI gestellt.

Diese Grafik wird im zugehörigen Text erklärt

Stellen Sie obligatorische und optionale Methoden einer Anwendungen oder eines Kunden niemals in dasselbe BAdI.

Hinweis

Viele leere Implementierungen sind ein Zeichen dafür, dass Ihr BAdI zu groß ist.

      Teilen Sie das BAdI auf, wenn viele leere Methoden darin vorhanden sind, die meist nicht implementiert werden.

      Ein Entwurf, der zu leeren Methodenimplementierungen führt, ist ein schlechter Entwurf. Leere Methoden machen unnötige Arbeit, wenn das BAdI geändert wird.

      Definieren Sie optionale Methoden in verschiedenen BAdIs, statt sie leer zu lassen.

      Fügen Sie neue, kleinere BAdIs hinzu, anstatt große BAdIs zu modifizieren. Damit verringern Sie den Implementierungsaufwand während eines Imports oder Upgrades.

Daten für zwei BAdIs in einer Klasse kapseln

In manchen Fällen haben Sie zwei BAdIs, die an denselben gekapselten Daten arbeiten. Das ist der Fall, wenn ein BAdI bestimmte Daten verwaltet und in die Datenbank schreibt, und ein anderes BAdI diese Daten liest.

Ist eine Klasse vorhanden, die das Interface beider BAdIs implementiert, wird diese Klasse als Implementierung für beide Abschnitte ausgewählt. Wenn Sie in beiden Fällen dasselbe Kontextobjekt übergeben, erhalten Sie dieselbe Implementierung, da die eben genannte Klasse beide Interfaces implementiert. Durch dasselbe Kontextobjekt erhalten Sie auch die selbe Instanz.

Beispiel

GET BADI bd1 CONTEXT me

CALL METHOD bd1->meth

und

GET BADI bd2 CONTEXT me

CALL METHOD bd2->meth

Werden BAdIs aus dem selben Kontextobjekt heraus instanziert (das Kontextobjekt implementiert das Interface if_badi_context), arbeiten Sie mit derselben Implementierung und Instanz. Diese Implementierung implementiert die Interfaces beider BAdIs.

Daten für zwei BAdIs in mehreren Kompilierungseinheiten kapseln

Wenn Sie Daten für zwei BAdIs kapseln möchten, die in unterschiedlichen Kompilationseinheiten aufgerufen werden, benötigen Sie ein zusätzliches Kontextobjekt, auf das von beiden Kompilationseinheiten aus zugegriffen werden kann.

Beispiel

GET BADI bd1 CONTEXT mycontext  "(some context given by a global factory class)

CALL METHOD bd1->meth

und

GET BADI bd2 CONTEXT mycontext  "(some context given by a global factory class)

CALL METHOD bd2->meth

In diesem Fall benötigen Sie ein separates Kontextobjekt. Die Positionen, an denen GET BADIvorkommt, müssen beide in der Lage sein, dieselbe Factory-Klasse zu erreichen. Beide BAdIs erzeugen Aufrufe an dieselbe Instanz der Klasse X. Darüber hinaus können BAdIs Daten gemeinsam nutzen.

Diese Technik ermöglicht kleine und einfache BAdI-Definitionen.

Vererbung von einer Default-Klasse

Wenn Sie eine Default-Klasse auch als Beispielklasse definieren, kann die BAdIs implementierende Klasse leicht von dieser Klasse erben. Dies ist eine sehr einfache Art, nur die Methoden neu zu definieren, die sich von der Beispiel- oder Default-Klasse in Ihrer Implementierung unterscheiden müssen.

 

 

 

Ende des Inhaltsbereichs