Anfang des Inhaltsbereichs

Hintergrunddokumentation BAdIs - FAQs  Dokument im Navigationsbaum lokalisieren

Wann benutze ich ein kontext-abhängiges BAdI und wann nicht? Wann selektiere ich Wiederverwendung der Instanz?

Nur wenn das gleiche BAdI mehrfach aufgerufen wird und Instanzmethoden besitzt macht es Sinn, ein BAdI an einen Kontext zu binden. Über den Kontext ist sichergestellt, dass eine bereits instanzierte Implementierungsklasse wieder verwendet wird sofern der gleiche Kontext mitgegeben wird. Sollte die Implementierung lokale Daten verwenden bleiben diese also erhalten.

      Wenn ein BAdI-Interface nur statische Methoden enthält und mehr als einmal in einem internen Modus verwendet wird, müssen Sie aus Performancegründen ein nicht kontextabhängiges BAdI mit Wiederverwendung der Instanz verwenden.

      Wird ein BAdI in einem internen Modus nur einmal verwendet, so sollten Sie auch hier aus Performancegründen immer ein nicht kontextabhängiges BAdI ohne Wiederverwendung der Instanz verwenden.

      In allen anderen Fällen verwenden Sie ein nicht kontext-abhängiges BAdI ohne Wiederverwendung der Instanz.

Wann verwende ich die Fallback-Klasse einer BAdI-Definition und wann lege ich eine Standard-BAdI-Implementierung an?

Rufen Sie die Fallbacl-Klasse in einer BAdI-Definition auf, wenn keine andere gültige Implementierung verfügbar ist. Sie muss immer verwendet werden, wenn nicht mehrere Standardimplementierungen mit unterschiedlichen Filterbedingungen benötigt werden. Ansonsten müssen Sie Standardimplementierungen mit den entsprechenden Filterbedingungen anlegen. Die beiden Techniken können auch kombiniert werden.

Beispiel

Ein BAdI definiert den Filter Sprache. Sie legen je eine Standardimplementierung für deutsch und englisch an, für alle anderen Sprachen legen Sie eine Standard- BAdI-Implementierungsklasse an.

Kann ich ein BAdI nach der Auslieferung noch Ändern und was für Auswirkungen hat dies?

Die BAdIs des Erweiterungskonzepts verfügen über eine Upgradeunterstützung. Wenn ein BAdI in eine System mit einer zugehörigen Implementierung importiert wird werden die zugehörigen Implementierungen zum Abgleich angeboten. Je nach Typ der Änderung ist der Abgleich einfach oder Komplex. Bis zum Ende des Abgleichs kann das BAdI syntaktisch fehlerhaft sein (z.B. durch das Ändern einer Methodenschnittstelle). Dies ist insbesondere bei zentralen BAdIs kritisch. Ein BAdI in der Benutzerverwaltung kann z.B. dazu führen, dass Anmeldungen nicht mehr möglich sind. Da nicht unbedingt immer alle Abgleiche durchgeführt werden ist es sinnvoll möglichst nur kompatible Änderungen durchzuführen, wie z.B.:

      Hinzufügen von neuen optionalen Parametern.

      Ändern eines nicht mehrfach verwendbaren BAdIs auf mehrfach verwendbar (ohne Änderung der Parameter).

      Ändern eines SAP internen BAdIs auf nicht SAP-intern.

      Hinzufügen einer Screen-Erweiterung oder Menüerweiterung mit zugehörigen Standardwerten.

      Neue Methoden hinzufügen solange eine leere Implementierung ausgeführt wird.

Kann ich eine normale Klasse ausliefern von der die BAdI-Implementierungsklassen erben können? Kann ich mehre BAdIs in der gleichen BAdI-Implementierungsklasse implementieren?

Ja, bei den BAdIs des Erweiterungskonzepts sind BAdI-Implementierungsklassen wie normale Klassen behandelbar. Sie können von anderen Klassen erben und mehrere Interfaces implementieren. Es ist auch möglich, von beliebigen BAdI-Implementierungsklassen zu erben..

Gibt es eine von SAP empfohlene Namenskonvention für BAdIs im Enhancement Framework?

Wir empfehlen die Vorsilbe BADI_ für alle BAdIs. Dadurch wird verhindert, dass Namensraumkonflikte mit anderen globalen Datentypen, Klassen oder Interfaces entstehen. BAdIs müssen in ihrem eigenen Namensraum liegen, damit man sich in ABAP mit REF TO eine eindeutige BAdI-Referenzvariable anlegen kann.

 

 

 

Ende des Inhaltsbereichs