Hallo!
Ich muss eine Transaktion aufrufen. In dieser Transaktion wird ein BAPI verwendet (BAPI_MATERIAL_SAVEDATA). Direkt danach wird ein BAPI_TRANSACTION_COMMIT ausgeführt.
Mein Problem ist, dass nach einem COMMIT WORK (was innerhalb von BAPI_TRANSACTION_COMMIT ausgeführt wird) die aufgerufene Transaktion beendet wird und der Benutzer in die ursprüngliche Transaktion zurückgeworfen wird.
Ich habe es in anderen Fällen geschafft, dies zu umgehen, indem ich den Funktionsbaustein DB_COMMIT verwendet habe. Doch jetzt funktioniert das nicht mehr.
Ich habe in SM12 nachgeschaut. Dort sind einige Tabellen gesperrt. Wenn ich den Code mit dem ursprünglichen BAPI_TRANSACTION_COMMIT ausführe, sehe ich, dass die Sperren ebenfalls gelöst werden.
Was ich dann ausprobiert habe, ist DEQUEUE_ALL. Die Sperren sind auf diese Weise weg, aber jetzt funktioniert das aufgerufene BAPI nicht. Das Material wird nicht so hinzugefügt, wie es geschieht, wenn BAPI_TRANSACTION_COMMIT verwendet wird.
Ich werde noch verrückt. Irgendwelche Ideen? =/
Code: Alles auswählen.
call function 'BAPI_MATERIAL_SAVEDATA'
exporting
headdata = lv_mathead
tables
extensionin = lt_extensionin
extensioninx = lt_extensioninx.
if sy-subrc ne 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
call function 'BAPI_TRANSACTION_ROLLBACK'.
else.
* call function 'BAPI_TRANSACTION_COMMIT'.
call function 'DB_COMMIT'.
wait up to 3 seconds.
call function 'DEQUEUE_ALL'.
endif.