Um Massendaten an Materialstämmen ins System einzupflegen, verwende ich BAPI_MATERIAL_SAVEREPLICA.
Dabei legt der Funktionsbaustein die Daten an, ohne dass ich ein COMMIT auslöse.
Weiss jemand, wie ich den Funktionsbaustein dazu bekomme, dass ich als Aufrufer das COMMIT WORK setzen kann?
da du nicht schreibst warum du das brauchst, hier einfach mal die Möglichkeiten die mir spontan einfallen:
- 1x ausführen mit Kennzeichen TESTRUN = 'X'
- Fehler lesen und ggf. abbrechen
- 1x ausführen mit Kennzeichen TESTRUN = ' ' wenn keine Fehler vorher gefunden wurden.
oder
- 1x ausführen mit Kennzeichen TESTRUN =' ' und NO_ROLLBACK_WORK = ' '
- Fehler lesen und bei gefundenen Fehler ein ROLLBACK WORK auslösen.
ich denke nach dem BAPI_MATERIAL_SAVEREPLICA -- den FUBA BAPI_TRANSACTION_COMMIT aufrufen - das ist sehr oft die Vorgehensweise bei BAPI's
Gruss
Hi Jens,
ich glaube du hast ihn falsch verstanden. Der BAPI benötigt keinen user-ausgelösten COMMIT. Aber genau das würde er gern haben wollen, um, so schätze ich mal, Fehler beim Anlegen erkennen und verhindern zu können.
Hallo Matze,
genau das ist der Punkt.
Ich will Materialien anlegen und die Materialnummern einer anderen DB-Tabelle zuweisen. Die Materialien sollen aber nur angelegt werden, wenn die Daten in eben jener anderen Tabelle gespeichert werden.
ist denn dann nicht eine der von mir vorgeschlagenen Wege auch denkbar? Da du ja z.B. ein Rollback auslösen kannst, kannst du im Fehlerfall ja alles rückgängig machen.
Oder willst du die daten erst anlegen, dann kopieren in eine 2. tabelle und dann die daten aus der ersten tabelle wieder löschen?!
Hallo Thanatos,
ich habe eine Transaktion, in der
a) Materialien erzeugt werden
b) die Materialnummern in einer 2. Tabelle gepflegt werden.
Ich möchte aber die Materialien nur dann wirklich anlegen, wenn in der Transaktion gesichert wird.
Wenn ich BAPI_MATERIAL_SAVEREPLICA verwende, dann werden die Materialien immer angelegt.
Egal ob ich diese in einer 2. Tabelle mit der Transaktion speichere oder nicht.
Gruß
Peter