DATA : LT_POACCOUNT LIKE TABLE OF BAPIMEPOACCOUNT,
LT_POACCOUNTX LIKE TABLE OF BAPIMEPOACCOUNTX,
LT_RETURN LIKE TABLE OF BAPIRET2.
DATA(LV_KOSTL) = |{ GS_DATA-KOSTL ALPHA = IN }|.
DATA(LV_SAKTO) = |{ GS_DATA-SAKTO ALPHA = IN }|.
LT_POACCOUNT = VALUE #( BASE LT_POACCOUNT
( PO_ITEM = GS_DATA-EBELP
SERIAL_NO = GS_DATA-ZEKKN
COSTCENTER = LV_KOSTL
GL_ACCOUNT = LV_SAKTO ) ).
LT_POACCOUNTX = VALUE #( BASE LT_POACCOUNTX
( PO_ITEM = GS_DATA-EBELP
SERIAL_NO = GS_DATA-ZEKKN
COSTCENTER = GC_X
GL_ACCOUNT = GC_X ) ).
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
PURCHASEORDER = GS_DATA-EBELN
TABLES
POACCOUNT = LT_POACCOUNT
POACCOUNTX = LT_POACCOUNTX
RETURN = LT_RETURN
EXCEPTIONS
AUTHORITY_CHECK_FAIL = 1
DOCUMENT_NOT_FOUND = 2
ENQUEUE_FAIL = 3
PREREQUISITE_FAIL = 4
RELEASE_ALREADY_POSTED = 5
RESPONSIBILITY_FAIL = 6
NO_RELEASE_ALREADY = 7
NO_NEW_RELEASE_INDICATOR = 8
OTHERS = 9.
READ TABLE LT_RETURN INTO DATA(LS_RETURN) WITH KEY TYPE = GC_E.
IF SY-SUBRC EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
GS_DATA = VALUE #( BASE GS_DATA
STATUS = '@5C@' "RED
TYPE = GC_E
MSG = LS_RETURN-MESSAGE ).
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
GS_DATA = VALUE #( BASE GS_DATA
STATUS = '@5B@' "GREEN
TYPE = GC_S
MSG = LS_RETURN-MESSAGE ).
ENDIF.