BAdIs - FAQs
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 instanziierte Implementierungsklasse wieder verwendet wird, sofern der gleiche Kontext mitgegeben wird. Sollte die Implementierung lokale Daten verwenden, bleiben diese 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?
Eine Standardimplementierung kann Filterbedingungen haben, und Sie können zahlreiche unterschiedliche Standardimplementierungen mit verschiedenen Filterbedingungen haben. Wenn zur Kompilierzeit keine Nicht-Standardimplementierung für einen angegebenen Filterwert bereitgestellt wird, wählt das System die geeignete Standardimplementierung aus. Ist keine geeignete Standardimplementierung vorhanden, wird die Fallback-Klasse ausgewählt.

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-Fallback-Klasse an.
Kann ich ein BAdI nach der Auslieferung noch ändern und was für Auswirkungen hat dies?
Für die neuen BAdIs, die Teil des Enhancement Framework sind, wird Upgrade-Unterstützung geboten. Wenn eine BAdI-Definition in ein System importiert wird, in dem Implementierungen dieses BAdI vorhanden sind, prüft das Framework, ob die importierte BAdI-Definition und die BAdI-Implementierungen noch kompatibel zueinander sind. Wenn Inkompatibilitäten festgestellt werden, liefert ein Anpassungswerkzeug Informationen darüber, welche Implementierungen angepasst werden müssen. Dieses Werkzeug unterstützt den Anwender bei der Korrektur der entsprechenden BAdI-Implementierung.
Vor der Anpassung einer BadI-Implementierung kann die bestehende Inkompatibilität zwischen der BAdI-Implementierung und der Definition zu Syntaxfehlern führen (z.B. aufgrund von Änderungen an einer Methodenschnittstelle). Dies ist insbesondere bei zentralen BAdIs kritisch. Ein Fehler in einem BAdI in der Benutzerverwaltung kann z.B. dazu führen, dass Anmeldungen nicht mehr möglich sind.
Im Allgemeinen ist es sinnvoll, nur kompatible Änderungen vorzunehmen, wie:
● Hinzufügen von neuen optionalen Parametern.
● Ändern eines einfach 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.
● Hinzufügen neuer Methoden, solange eine leere Implementierung ausgeführt wird.
Kann ich eine normale Klasse ausliefern, von der die BAdI-Implementierungsklassen erben können? Kann ich mehrere 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.