Anhängen kundeneigener Felder
In diesem Beispiel möchte ein Kunde das BAPI TravelAgency.CreateFromData verwenden. Dieses BAPI basiert auf der Datenbanktabelle STRAVELAG, welche der Kunde um drei Felder gegenüber der von SAP ausgelieferten Version erweitern möchte.
Um die von SAP ausgelieferte Datenbanktabelle zu erweitern wird vom Kunden zunächst eine Datenstruktur angelegt, welche die kundenspezifischen Felder enthält. Im Beispiel ist dies die Struktur TRAVELAG mit den zwei Feldern PLANETYPE und COMPANY.

Diese Struktur wird sowohl in der Datenbanktabelle als auch in der BAPI Table Extension inkludiert. Dadurch wird sichergestellt, dass die Erweiterungen an der Datenbanktabelle und in der Table Extension immer identisch sind.
Die Erweiterung der Datenbanktabelle erfolgt über das Anhängen einer APPEND-Struktur, welche die Datenstruktur mit den kundenspezifischen Feldern als INCLUDE enthält. Der Umweg über eine APPEND-Struktur wird gegangen, um sicherzustellen, dass die Erweiterungen immer am Ende der Tabelle stehen.
Die nachstehende Abbildung zeigt die erweiterte Tabelle.

Wie bereits erwähnt, sind die BAPI Table Extensions Hilfsstrukturen, um die Kundenerweiterung von BAPIs zu ermöglichen. Sie müssen für jede bestehende SAP-Datenbanktabelle existieren, die über das Kundenerweiterungskonzept genutzt werden soll. Beim Datenimport werden sie dazu verwendet, die Kundenerweiterungen aus dem Container an der BAPI-Schnittstelle (ExtensionIn) aufzunehmen und die zusätzlich zu berücksichtigenden Felder der Datenbanktabelle zu füllen. Beim Datenexport dient die BAPI Table Extension dazu, Daten aus einer Tabellenerweiterung des Kunden aufzunehmen und entsprechend im ExtensionOut-Parameter zu strukturieren. An welchen Stellen die BAPI Table Extensions verwendet werden und wie die Verwendung konkret zu implementieren ist, wird unter Aktionen von Seiten des BAPI-Entwicklers beschrieben.
Eine BAPI Table Extension wird als Datenstruktur im ABAP Dictionary mit Hilfe der Transaktion SE11 angelegt. Generell besteht sie aus folgenden Komponenten:
● Einem von SAP vordefinierten Schlüsselteil. Es handelt sich dabei um das Schlüsselfeld/ die Schlüsselfelder der Datenbanktabelle, auf die sich die BAPI Table Extension bezieht. Eine BAPI Table Extension wird folglich von SAP nur mit einem Schlüsselteil und ohne einen Datenteil ausgeliefert.
● Einem vom Kunden durch die APPEND-Technik bestimmbaren Datenteil, welcher die zusätzlich zu berücksichtigenden Felder enthält. Für den Fall, dass der Kunde zusätzliche, eigene Tabellenfelder an die SAP-Tabelle anhängen möchte, werden diese Tabellenfelder in Form eines INCLUDEs in das APPEND eingefügt. Der Datenteil wird also vom Kunden an die von SAP ausgelieferte „initiale“ Table Extension nachträglich hinzugefügt.

Wird die BAPI Table Extension vom Kunden angelegt, so muss er sowohl den Schlüsselteil als auch den Datenteil definieren.
Beim Arbeiten mit BAPI Table Extensions sind folgende Richtlinien einzuhalten:
● Die Namenskonvention für BAPI Table Extensions lautet BAPI_TE_<Tabellenname>. Kann diese Namenskonvention aufgrund der Längenbeschränkung für Strukturnamen nicht eingehalten werden, ist dies explizit in der Dokumentation der Table Extension und des BAPIs zu kennzeichnen.
● Für jede dem BAPI zugrundeliegende Tabelle, die der BAPI-Entwickler als sinnvoll erweiterbar erachtet, hat er eine eigene BAPI Table Extension anzulegen. Allerdings darf jede Tabelle auch nur eine einzige Table Extension besitzen. Benutzen also mehrere BAPIs die gleiche Tabelle, so müssen sie sich eine Table Extension teilen.
Ausnahme:
Besitzt ein BAPI zwei oder mehr Parameter, denen die gleiche Datenbanktabelle zugrundeliegt, dann wird für jeden dieser BAPI-Parameter eine eigene BAPI Table Extension angelegt. Die Namenskonvention lautet dann BAPI_TE_<Tabellenname><fortlaufende Nummer>. Im Beispiel würden die BAPI Table Extensions BAPI_TE_STRAVELAG1 und BAPI_TE_STRAVELAG2, etc. heißen.

Möchte der Kunde eine Tabelle erweitern, für die der BAPI-Entwickler keine Erweiterung vorgesehen hat, so muss er eigenständig eine Table Extension anlegen.
● Die Struktur der BAPI Table Extension muss alle identifizierenden Felder (Schlüsselfelder) der Tabelle enthalten, auf die sich die BAPI Table Extension bezieht. Nur so ist es möglich, festzustellen, in welche Zeile der erweiterten Datenbanktabelle die im BAPI übergebenen Erweiterungen geschrieben werden müssen.
● Die innerhalb des APPENDs inkludierte Datenstruktur muss die gleiche sein, wie die an der Datenbanktabelle für die Erweiterung verwendete Struktur. Nur so kann sichergestellt werden, dass die zusätzlichen Tabellenfelder automatisch gefüllt werden.
● In BAPI Table Extensions dürfen vom Kunden nur Felder des Datentyps CHAR und ähnliche Datentypen verwendet werden. Diese Einschränkung ergibt sich durch die Bezugsstruktur BAPIPAREX der Extension-Parameter. Der Kunde darf darüber hinaus im APPEND der BAPI Table Extension keine Felder der Standard-Tabelle verwenden, da ein 'move-corresponding' damit auch das SAP-Feld überschreiben würde.
● Der Datenteil einer BAPI Table Extension kann maximal 960 Zeichen lang sein.
Folgende Abbildung zeigt, wie die BAPI Table Extension im Beispiel aussehen muss. Wichtig beim Datenteil ist, dass die im APPEND enthaltene INCLUDE-Struktur die gleiche ist, wie die bei der Erweiterung der Datenbanktabelle verwendete Struktur. In diesem Fall ist dies die Struktur TRAVELAG mit den zwei Feldern PLANETYPE und COMPANY.

Die beiden Extension-Parameter (ExtensionIn und ExtensionOut) an der BAPI-Schnittstelle werden dazu verwendet, die Erweiterungen in einem Containerformat an den BAPI-Funktionsbaustein zu übergeben bzw. aus dem Funktionsbaustein heraus an den Aufrufer weiterzuleiten.
Den Extension-Parametern liegt stets die Datenstruktur BAPIPAREX zugrunde. Sie bestimmt das Format der Datensätze, in welchem die Erweiterungen an das BAPI bzw. vom BAPI an den Aufrufer übergeben werden.
Nachstehende Abbildung zeigt den Aufbau der BAPIPAREX-Struktur.

Die einzelnen Felder haben folgenden Verwendungszweck:
● STRUCTURE
Das Feld STRUCTURE enthält jeweils den Namen der BAPI Table Extension auf die sich der jeweilige Datensatz bezieht. Da wiederum eine Table Extension genau einer Datenbanktabelle zugeordnet ist, kann somit ermittelt werden in welche erweiterte Tabelle der Datensatz eingefügt werden muss.
● VALUEPART1 bis VALUEPART4
Jeder Datensatz des Extension-Containers enthält neben dem Namen der Table Extension auch die Schlüsselwerte und die Werte, welche in die zusätzlichen Tabellenfelder eingefügt werden. Die Schlüsselwerte müssen übergeben werden, um die Zeile der Datenbanktabelle ermitteln zu können, in welche die im Datensatz enthaltenen Daten geschrieben werden.#
Ausnahme:
Bei Create-BAPIs mit interner Nummernvergabe ist es nicht möglich, den/die Schlüsselwerte(e) mitzugeben, da diese erst im BAPI erzeugt werden. Wie bei Create-BAPIs vorzugehen ist, wird unter Aktionen bei der auf bestehenden SAP-Datenbanktabellen basierenden Erweiterung beschrieben.
Die Felder VALUEPART1 bis VALUEPART4 nehmen also sowohl den/die Tabellenzeile identifizierenden Schlüsselwert(e) als auch die in die Tabelle einzufügenden Datenfelder auf. Die Zuordnung von Schlüsselwerten und Daten zu VALUEPART1 bis VALUEPART4 erfolgt über das stückweise Auffüllen der VALUEPART-Felder. So werden in VALUEPART1 zunächst sämtliche Schlüsselfelder eines Datensatzes gespeichert. Ist die maximale Kapazität von VALUEPART1 (Länge 240) noch nicht erschöpft, dann wird der Wert des ersten kundenspezifischen Tabellenfeldes ebenfalls in VALUEPART1 gespeichert. Dies wird mit den Werten der weiteren Tabellenfeldern solange fortgesetzt, bis die Kapazität von VALUPART1 erschöpft ist. Anschließend wird analog mit VALUEPART2 bis VALUEPART4 vorgegangen bis alle Werte des Datensatzes im Container stehen.

Tritt die Situation ein, dass die restliche Kapazität bspw. von VALUEPART1 kleiner ist, als die maximale Länge des nächsten einzufügenden Tabellenfeldes, dann wird der Wert dieses Tabellenfeldes zwischen VALUEPART1 und VALUEPART2 aufgeteilt. Von dem einzufügenden Wert wird noch soviel in VALUEPART1 gespeichert, bis die maximale Kapazität erschöpft ist. Der Rest wird anschließend VALUEPART2 zugewiesen.
Diese Art der Strukturierung des Containers hat den Vorteil, dass das im BAPI durchgeführte Konvertieren eines Container-Datensatzes in das Format der Table Extension mit einem einzigen MOVE-Befehl implementiert werden kann.
Dem Beispiel folgend könnte der Extension-Container wie folgt aussehen:

Die Werte „BOING747“ und „LUFTHANSA“ des ersten Datensatzes würden in die durch BAPI_TE_STRAVELAG spezifizierten zusätzlichen Felder der Datenbanktabelle STRAVELAG geschrieben. Die Tabellenzeile, in welche die Werte einzufügen sind, wird durch den Schlüssel „4711“ identifiziert.
Das Prüfen und die Weiterverarbeitung der Daten aus dem Import-Container bzw. das Füllen des Export-Containers findet anschließend in den BAdIs statt, die vom BAPI-Entwickler dafür vorgesehen wurden.