Anfang des Inhaltsbereichs

Hintergrunddokumentation Einfach verwendbare BAdIs  Dokument im Navigationsbaum lokalisieren

Anwendungsfall 1: Einfache Kundenerweiterungen

Die normale Kundenerweiterung ist ein BAdI ohne einen Filter, das einmal aufgerufen wird. Es muss kein Zustand beibehalten werden, Sie können statische Methoden verwenden. Ein solches BAdI wird im Core-System oder in einer Branchenlösung definiert und vom Kunden implementiert.

Handelt es sich um ein einfach verwendbares BAdI, das genau eine Implementierung benötigt, muss eine Default-Klasse von SAP bereitgestellt werden. Andernfalls löst GET BADI eine Ausnahmen aus, wenn die Anweisung ausgeführt wird bevor der Kunde die Implementierung eingefügt hat.

Beispiel

Solche BAdIs werden z. B. für Berechnungen benutzt.

Anwendungsfall 2: Mehrfache Kundenerweiterungen

Dieser Anwendungsfall entspricht weitgehend Anwendungsfall 1. Es gibt jedoch einen wichtigen Unterschied: verschiedene Länder haben verschiedene Implementierungen.

Beispiel

Eine Berechnungsvorschrift, die länderspezifisch ist. Sie hat Default-Implementierungen für Europa, Asien und Amerika, und eine Default-Klasse für die restlichen Länder.

Das Beispiel veranschaulicht, wofür eine Default-Implementierung benötigt wird: Immer wenn eine länderspezifische Implementierung hinzugefügt wird, wird diese mit dem entsprechenden Filterwert ausgewählt. Die Default-Implementierung wird bei Ländern in Europa, Asien oder Amerika ausgewählt. In allen anderen Fällen bestimmt die Default-Klasse die Einstellungen.

Hinweis

Nur Default-Implementierungen können von spezifischeren Implementierungen überlagert werden.

Anwendungsfall 3: Vorhandenes Coding als Standard benutzen

In einigen Fällen lässt sich ein Codeabschnitt nicht einfach objektorientiert umschreiben. Dieses Coding können Sie in Kombination mit einem BAdI benutzen. Dazu muss das BAdI allerdings ein einfach verwendbares BadI mit genau einer Implementierung sein. Ist keine vorhanden, tritt die Ausnahme CX_BADI_ NOT_IMPLEMENTED auf. Wenn Sie prozedurales Coding, das Sie wieder verwenden möchten, in die entsprechende CATCH-Klausel setzen, wird dieses Coding nur dann ausgeführt, wenn für das BAdI keine aktive Implementierung ausgewählt wurde. Das Coding arbeitet wie eine Default-Implementierung.

Wenn viele Implementierungen vorhanden sind, obwohl Sie nur eine benötigen, liegt ein schwerer Fehler vor. Die Handhabung dieser Ausnahme muss in der Aufrufhierarchie an den Punkt zurückkehren, wo der aktuelle Prozess mit dem nächsten Schritt weitergeführt wird, der das Resultat der Berechnung nicht benötigt.

Beispiel

Sie haben einen Report mit prozeduralem Coding. Sie möchten Teile dieses Reports benutzen, die nicht einfach in eine Klasse umgewandelt werden können.

Wenn keine passende BAdI-Implementierung vorhanden ist, können Sie den Standard mit dem bereits vorhandenen Coding überlagern. Dies tun Sie, indem Sie ein TRY-ENDTRY-Konstrukt benutzen und das prozedurale Coding, das Sie wieder verwenden möchten, in das CATCH -Konstrukt stellen:

TRY

   GET BADI

   CALL BADI

   CATCH cx_badi_multiply_implemented.

      *Go somewhere up in the call hierarchy

   CATCH CX_BADI_NOT_IMPLEMENTED.     

      *Your code that must be reused

ENDTRY

 

 

 

Ende des Inhaltsbereichs