Erweiterung des BAPIs um Import-Daten, die
sich nicht auf die Datenbank-Ebene niederschlagen
Eine weitere denkbare Erweiterungsmöglichkeit ist, dass der Kunde zusätzliche Daten an das BAPI übergeben möchte, die er nur zur Laufzeit benötigt. Der Unterschied zu den zuvor beschriebenen Arten der Erweiterung besteht darin, dass diese Werte keinen Feldern in Datenbanktabellen zugeordnet sind. Somit werden die Daten im Extension-Container anders strukturiert, da keine Schlüsselwerte zur Ermittlung der zugehörigen Zeile in der Datenbanktabelle übergeben werden müssen.
Beispiele für diese Art der Erweiterung sind:
● Aufnahme zusätzlicher Selektionskriterien in ein GetList()-BAPI, die die Anzahl der Datensätze der zurückgegebenen Liste einschränken
● Aufnahme zusätzlicher Filterkriterien in einem GetDetail()-BAPI, die festlegen, welche Detailinformationen angezeigt werden
● Erweiterung der Ankreuzleiste bei einem Change()-BAPI, das nach dem Konzept „Änderung durch Markierung“ implementiert worden ist
Auch für diese Art der Erweiterung muss das BAPI die folgenden Vorkehrungen besitzen:
...
1.
Extension-Parameter an der
BAPI-Schnittstelle
Um die zusätzlichen Daten an das BAPI übergeben zu können, muss die
Schnittstelle des BAPI-Funktionsbausteins den ExtensionIn-Parameter besitzen.
2.
Business Add-Ins
(BadIs)
Auch für diesen Anwendungsfall muss jeder BAPI-Funktionsbaustein neben den
durch die Anwendung vorgegebenen Exits, in Abhängigkeit von den Anforderungen,
maximal zwei zusätzliche BAdIs
enthalten, in denen der Kunde die übergebenen Daten prüfen oder weitere
Verarbeitungen durchführen kann.
Während der ExtensionIn-Parameter an der
BAPI-Schnittstelle und das BAdI obligatorisch sind, bleibt es vollständig dem
Kunden überlassen, in welcher Form er die zu übergebenden Daten in dem
Extension-Container anordnet.
Allerdings wird empfohlen, für die zusätzlich zu übergebenden Werte
Hilfsstrukturen anzulegen, deren Felder diese zusätzlichen Werte
repräsentieren. Mit Hilfe dieser Datenstrukturen kann die Auswertung des ExtensionIn-Parameters komfortabler und
sicherer durchgeführt werden.
Im folgenden wird anhand eines GetList()-BAPIs verdeutlicht, welche Schritte durchlaufen werden, wenn ein zusätzliches Selektionskriterium in das BAPI einbezogen werden soll. Da BAPI-Selektionsparameter immer aus den vier Feldern SIGN, OPTION, HIGH und LOW bestehen, müssen also diese vier zusätzlichen Werte innerhalb des ExtensionIn-Containers an das BAPI übergeben werden.
Um das Füllen bzw. Auswerten des ExtensionIn-Parameters zu erleichtern,
sollten Datenstrukturen angelegt
werden, die jeweils diejenigen zusätzlich an das BAPI zu übergebenden Felder
enthalten, welche inhaltlich zusammengehören.
Dem Beispiel folgend sollte eine Datenstruktur für das zusätzliche Selektionskriterium angelegt werden, die die vier Felder SIGN, OPTION, HIGH und LOW enthält.


Das Anlegen dieser Hilfsstruktur ist optional und stellt lediglich eine Erleichterung beim Füllen und Auswerten des ExtensionIn-Containers dar. Alternativ können andere Hilfsstrukturen verwendet werden, oder es kann vollständig auf derartige Hilfsstrukturen verzichtet werden.
Wie bereits erwähnt, wird der ExtensionIn-Parameter an der BAPI-Schnittstelle dazu verwendet, die Erweiterungen in einem Containerformat an den BAPI-Funktionsbaustein zu übergeben.
Im Gegensatz zur Erweiterung über BAPI Table Extensions gibt es in diesem Fall keine Richtlinien, wie die Daten im ExtensionIn-Container anzuordnen sind.
Wird allerdings eine Hilfsstruktur in der zuvor beschriebenen Form verwendet, werden die Daten im Container wie folgt strukturiert:

Das Feld STRUCTURE der BAPIPAREX-Struktur enthält den Namen der Hilfsstruktur, in welcher die für die Selektion notwendigen Felder zusammengefasst sind. Somit würde in diesem Fall das Feld SIGN den Wert „I“, OPTION den Wert „CP“, HIGH den Wert „00000010“ und LOW den Wert „00000001“ erhalten.
Das Prüfen und die Weiterverarbeitung der Daten aus dem Import-Container findet ebenfalls in den BAdIs statt, die vom BAPI-Entwickler dafür vorgesehen wurden.