an mir wurde die Anforderung herangetragen, das BAPI BAPI_INCOMINGVOICE_PARK zu erweitern, und zwar das zusätzliche Kundenfelder beim Aufruf übergeben werden sollen (möglichst in APPENDS der Tabellen für die Rechnungsvorerfassung (RSEG oder RSCO)). Weder BAPI-Erweiterungen noch fachlich war ich bisher in den Themen unterwegs und tue es mir da gerade echt schwer.
BAPI_INCOMINGVOICE_PARK hat einen EXTENSIONIN-Parameter, allerdings mit folgender Beschreibung:
"Diese Tabelle ermöglicht es Ihnen, ohne Modifikation die Erweiterungsfelder aus der Tabelle IVEXT zu versorgen"
Wie dieser Parameter korrekt übergeben wird, ist mir leider nicht klar (zumindest auch nicht mit Hilfe der SAP-Doku und Google).
Im BAPI selbst wird das Unterprogramm MAPPING_IVEXT_PARK mit dem genannten Parameter aufgerufen, wo das BADI MRM_BAPI_MAPPING referenziert wird. Die Implementierungen, die es dazu gibt, sind nicht aktiv und dort ist unter Verwendbarkeit auch "nur SAP-intern implementierbar" eingestellt.
Hat jemand damit Erfahrungen und Ratschläge, ob und wie das zu lösen wäre?
Zunächst der Fuba heißt BAPI_INCOMINGINVOICE_PARK.
Über einen EXTENSIONIN bei BAPI-Bausteinen kann man nicht pauschal alle Tabellen bedienen, die man erweitert hat. Konkret kannst du hier nur die Erweiterungsfelder für die Tabelle IVEXT übergeben (laut Doku). In der Tabelle IVEXT stehen als Erweiterung die Includes MRMIVEXT_DATA_HEADER, MRMIVEXT_DATA_ITEM, MRMIVEXT_DATA_ITEMHEADER zur Verfügung.
Nachfolgendes aus dem Kopf - habe ich lange nicht gemacht und aktuell keinen Beispiel.
Die BAPIPAREX hat 5 Felder STRUCTURE und VALUEPART1-4. Auf STRUCTURE übergibst du den Namen der Struktur, die du erweitert hast. Hier bin ich mir nicht sicher, ob IVEXT oder MRMIVEXT_DATA_HEADER. Vermutlich MRMIVEXT_DATA_HEADER. Auf VALUEPART1...2 übergibst du als flache Zeichenketten die Werte aus der Struktur, die in STRUCTURE hast.
Bsp:
STRUCTURE = MRMIVEXT_DATA_ITEM
VALUEPART1 = XXX2021091020211231
(Wenn VALUEPART1 nicht reicht, geht es 2, 3 und 4 weiter)
Die Wert für MRMIVEXT_DATA_ITEM wären:
DUMMY2 = X
FASTPAY = X
PPA_EX_IND = X
PEROP_BEG = 20210910
PEROP_END = 20211231
Kann sein, dass du bei VALUEPART1 noch Schlüsselwerte davor schieben musst.
Wichtig auch, wenn du die EXTENSIONIN nutzt und damit Daten auf der DB ändern willst, muss du immer alle Daten mitgeben, sonst werden diese beim Update auf der DB gelöscht. I.d.R. gibt es dazu aber einen BAPI-Lese-Fuba, mit EXTENSIONOUT
Trifft dich bei BAPI_INCOMINGINVOICE_PARK, da dieser nur zum Anlegen gedacht ist.
--
Achso ein Besonderheit ist mir noch aufgefallen. Die EXTENSIONIN wird ja im BadI mrm_bapi_mapping verarbeitet. Dieser hat als CHANGING nur ivext_bapi_tab vom Type ivext. Also auch wieder nur ivext-Tabelle.
Die ITEMDATA_TAB in der Methode INBOUND_IVEXT_PARK() zum BadI ist nur als Export-Parameter. Daher kann da auch nix ändern.
Nicht in allen Erweiterungsklassen vom BadI wird auch das Mapping durch den SAP-Standard gemacht. Hier muss du mal prüfen, welche Erweiterungsklasse ihr am BadI überhaupt aktiv habt.
Folgende Benutzer bedankten sich beim Autor msfox für den Beitrag: Ingo
Hi,
danke für Deine ausführliche Antwort. Den EXTENSIONIN-Parameter habe ich jetzt verstanden und an einem anderen BAPI erfolgreich getestet, wenn ich das auch ziemlich ätzend gemacht finde :-)
Wie oben geschrieben, ist keine Klasse aktiv und ich kann auch keine implementieren, da das Badi MRM_BAPI_MAPPING als "nur SAP-intern verwendbar" gekennzeichnet ist. die Übergabe der Daten läuft also im Prinzip ins Leere.
Ich werde erstmal nach einer anderen Lösung schauen. Wenn sich noch etwas ergibt, könnte ich es hier natürlich posten.
Ja, die EXTENSIONIN bei den BAPI's ist echt ätzend. Ich hatte es hauptsächlich für die den Fuba BAPI_CTRACPSOBJECT_CHANGE verwendet. Damit kann man die CI-Strukturen in den DB-Tabelle DPSOB und DPSOB_BP_ACC bedienen. Hier findet das Mapping allerdings nicht im BadI statt, sondern direkt. Inzwischen nutzen wir die BAPI für den Vertragsgegenstand aber nicht mehr.