Einsatzmöglichkeiten
Möchte ein Kunde ein von SAP ausgeliefertes BAPI funktional erweitern, indem er neue Parameter hinzufügt, bestehende Parameter ändert oder das dem BAPI zugrundeliegende Funktionsbausteincoding manipuliert, kann er dies nur über eine Modifikation realisieren.
Modifikationen an BAPIs werden nicht an den im Standard ausgelieferten Business-Objekttypen vorgenommen. Stattdessen wird zu dem betreffenden Business-Objekttyp ein Subtyp angelegt und die am Subtyp vom übergeordneten Business-Objekt geerbte BAPI-Methode neu definiert ("Überdefinieren").
Am Subtyp steht dann nur noch das überdefinierte BAPI zur Verfügung, das ursprünglich geerbte BAPI kann nur noch über den Supertyp aufgerufen werden.
IBUs, Kunden oder Partner haben bei der Erstellung neuer Entwicklungsobjekte, die im Rahmen einer Modifikation benötigt werden, die allgemeinen Richtlinien im Dokument "Änderungen des SAP-Standards" sowie im "Leitfaden zur Anpassung des SAP-Standards", der im SAPnet zur Verfügung steht, zu beachten.
Darüber hinaus ist auch sicherzustellen, daß die entsprechenden Entwicklungsobjekte mit einem Namen aus dem Kundennamensraum versehen werden.
Ablauf
Der Ablauf bei einer Modifikation von BAPIs durch den Kunden läßt sich wie folgt darstellen:
Eine Delegationsbeziehung wird nur beim objektorientierten Methodenaufruf des BAPIs ausgewertet, nicht aber bei direktem Aufruf des implementierenden Funktionsbausteins.
Überblick über die Möglichkeiten der Modifikation
Die verschiedenen Möglichkeiten einer Modifikation sollen anhand des folgenden Beispiels erläutert werden.
Objekttyp OT hat zwei BAPIs m1 und m2, die durch die Funktionsbausteine BAPI_OT_m1 bzw. BAPI_OT_m2 implementiert werden:

Werden nun Erweiterungen an BAPI m2 benötigt, stehen folgende Implementierungsmöglichkeiten zur Verfügung:
Anlegen eines neuen implementierenden Funktionsbausteins
Bei dieser Vorgehensweise wird ein neuer Funktionsbaustein BAPI_OTsub_m2 angelegt, der nach Möglichkeit den Funktionsbaustein der übergeordneten BAPI-Methode (d.h. des BAPIs am Supertyp) aufrufen soll. So bleibt die ursprüngliche Funktionalität erhalten und kann um die kundenspezifischen Anforderungen erweitert werden.
Folgende Graphik illustriert diese Implementierung.

Bei Nutzung dieser Variante muß bei allen Releasewechseln geprüft werden, welche Schnittstellenerweiterungen am ursprünglichen BAPI vorgenommen wurden. Wird z.B. die Schnittstelle des ursprünglichen BAPIs BAPI_OT_m2 erweitert, muß der Aufruf in BAPI_OTsub_m2 entsprechend angepaßt werden, wenn die erweiterte Funktionalität des ursprünglichen BAPIs genutzt werden soll.
Der Vorteil dieser Variante liegt darin, daß eine saubere Kapselung vom übergeordneten Original-BAPI (BAPI_OT_m2), für das eine Stabilitätsgarantie existiert, und der erweiterten Funktionalität vorgenommen wird. Zukünftige, kompatible Änderungen am übergeordneten Original-BAPI, bei denen die Schnittstelle und Semantik unverändert bleiben (z.B. Korrekturen und Optimierungen) werden automatisch übernommen, ohne daß am Subtyp etwas geändert werden muß.
Die Variante ist dann ungünstiger, wenn die Kapselung Nachteile bezüglich Performance mit sich bringt. Dies ist z.B. denkbar, wenn sowohl in BAPI_OT_m2 als auch in BAPI_OTsub_m2 UPDATE-Operationen auf unterschiedlichen Feldern des gleichen Datensatzes vorgenommen werden sollen, die der Entwickler jedoch in einem einzigen Verbuchungssatz, d.h. mit einer UPDATE-Operation realisieren möchte.
Kompatible Modifikation des übergeordneten Funktionsbausteins
Prinzipiell kann die BAPI-Methode eines Subtyps durch den gleichen Funktionsbaustein implementiert werden wie die Methode des Supertyps (in diesem Beispiel BAPI_OT_m2). Dies ist dann möglich, wenn die Modifikationen an der Schnittstelle kompatibel sind, z.B. wenn nur neue optionale Parameter hinzugefügt werden.
Folgende Graphik illustriert diese Implementierung.

Bei dieser Implementierungsvariante muß beachtet werden, daß bei jedem Releasewechsel die Modifikationen an den ursprünglichen BAPIs abgemischt werden müßten. Dazu kann ab Release 4.5A der Modifikationsassistent eingesetzt werden.
Vorteil dieser Variante ist, daß Originalcoding und Erweiterung sehr gut aufeinander abgestimmt werden können, z.B. um bestmögliche Performance für UPDATE-Operationen auf der Datenbank zu erreichen.
Der gravierende Nachteil ist, daß auf diese Weise die durch die Trennung von Supertyp und Subtyp bei der BAPI-Definition erreichte Kapselung faktisch wieder aufgehoben wird. Bei Änderungen muß sehr genau darauf geachtet werden, daß sich der Funktionsbaustein für den Aufrufer der Originalmethode des Supertyps OT weiterhin identisch verhält. Diese Variante ist vor allem dann problematisch, wenn mehrere Subtypen eines Objekttyps zwar unabhängig voneinander angelegt werden, z.B. für unterschiedliche Branchenlösungen, jedoch in einem gemeinsamen System existieren können oder müssen, z.B. bei gemeinsamem Entwicklungssystem oder mehreren Branchenlösungen in einem System.
Anlegen des implementierenden Funktionsbausteins als Kopie des übergeordneten Funktionsbausteins
In dieser Variante wird eine Kopie des Funktionsbausteins der übergeordneten BAPI-Methode (in diesem Fall BAPI_OT_m2) angelegt.
Folgende Graphik illustriert diese Implementierung.

Von dieser Möglichkeit sollte nur dann Gebrauch gemacht werden, wenn die Erweiterung nicht durch einen Aufruf des Funktionsbausteins der übergeordneten BAPI-Methode erzielt werden kann. Werden nämlich bei einem Funktionsbaustein eines BAPIs in der dazugehörigen Funktionsgruppe globale Daten definiert oder Formroutinen aufgerufen, müssen möglicherweise diese Datendeklarationen und Formroutinen ebenfalls kopiert werden, damit die Kopie des BAPIs lauffähig ist.
Die Modifikation einer Kopie des Funktionsbausteins ist zwar in der Regel flexibler, allerdings müßte bei jedem Releasewechsel geprüft werden, ob Änderungen an der Implementierung der übergeordneten BAPI-Methode vorgenommen wurden. Ist dies der Fall, müssen die Änderungen in der modifizierten Kopie nachgezogen werden. Da der Ursprung einer Kopie in der Regel nicht immer nachvollziehbar ist, wird von dieser Möglichkeit abgeraten.
Wenn die erforderlichen Modifikationen am kopierten Funktionsbaustein vorgenommen wurden, wird dieser dem entsprechenden Business-Objekttyp im Business Object Repository mit dem BOR/BAPI-Wizard als Methode zugeordnet.
Siehe auch: