Hello,
I'm using BAPIs to create order confirmation, and if good movements failed for this confirmation I want it to be cancelled.
My code looks like this:
** get data and fill in missing fields
CALL FUNCTION 'BAPI_PRODORDCONF_GET_TT_PROP'
[...]
** create confirmation
CALL FUNCTION 'BAPI_PRODORDCONF_CREATE_TT'
EXPORTING
post_wrong_entries = '0' "do not save confirmation on error
testrun = ' '
IMPORTING
RETURN = t_return_err
TABLES
timetickets = t_timetickets
goodsmovements = t_goodsmovements
link_conf_goodsmov = t_link_conf_goodsmov
detail_return = t_return_details.
** check if there was an error
IF t_return_err-TYPE = 'E' OR t_return_err-TYPE = 'A'. "if 'E'error or 'A'bort
** rollback changes
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
RAISE CONFIRMATION_FAILED.
ENDIF.
** check if there was an error regarding data provided
IF t_return_details-TYPE = 'E' OR t_return_details-TYPE = 'A'. "if 'E'error or 'A'bort
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
RAISE CONFIRMATION_FAILED.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
confirmation = t_return_details-conf_no.
confirmationcounter = t_return_details-conf_cnt.
CALL FUNCTION 'BAPI_PRODORDCONF_GETDETAIL'
EXPORTING
CONFIRMATION = confirmation
CONFIRMATIONCOUNTER = confirmationcounter
IMPORTING
RETURN = t_return_err
CONF_DETAIL = t_conf_detail
TABLES
GOODSMOVEMENTS = t_goodsmovements_correct
FAILEDGMOVES = t_failedgmoves.
IF t_return_err-TYPE = 'E' OR t_return_err-TYPE = 'A'. "if 'E'error or 'A'bort
RAISE CONFIRMATION_FAILED.
ENDIF.
** Check if goods movement was successful, and if not cancel the confirmation
IF t_failedgmoves IS NOT INITIAL.
** Cancel the confirmation that failed
CALL FUNCTION 'BAPI_PRODORDCONF_CANCEL'
EXPORTING
CONFIRMATION = confirmation
CONFIRMATIONCOUNTER = confirmationcounter
IMPORTING
RETURN = t_return_err
LOCKED = locked
CREATED_CONF_NO = confirmation_created
CREATED_CONF_COUNT = confirmationcounter_created.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
[...]
And my problem is as follows:
If I just run this transaction as it is, I am given following error from BAPI_PRODORDCONF_CANCEL function:
Future change records for background processing exist for order XXXXX
and confirmation_created and confirmationcounter_created variables are zeros (0).
But if I debug this code and set breakpoint at the line
CALL FUNCTION 'BAPI_PRODORDCONF_CANCEL'
(and then run it further) then the error doesn't appear and confirmation_created and confirmationcounter_created variables are given correct values and everything executes correctly.
It seems like the first BAPI_TRANSACTION_COMMIT doesn't have enough time to execute, but it is assigned WAIT flag, so this should not be the problem.
Could You suggest any solution/explanation for this weird behaviour?
Greetings,
Mateusz