I am trying to update one custom field ZREFNO in RKPF table using standard bapi "BAPI_RESERVATION_CREATE1" with the structure of ZREFNO located in BAPI_TE_REQUISITION_ACCOUNT. I want to use the extensionin parameter to update the custom field. I tried many ways to define the structure but still the values are not populating in the extensionin table structure of bapi_reservation_create1 call. Hence I guess the value is not being updated in the resultant RKPF table. Kindly help where I went wrong.
Below is the code:
FUNCTION zmm_sts_create_resv.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IS_RESB) TYPE ZMM_STS_RESB_HEAD
*" REFERENCE(IT_RESBITEM) TYPE ZMM_STS_RESB_ITEM_TT
*" EXPORTING
*" REFERENCE(E_RSNUM) TYPE RSNUM
*" REFERENCE(ET_RETURN) TYPE BAPIRET2_T
*"----------------------------------------------------------------------
* Description : This function create SI Reservation using
* BAPI_RESERVATION_CREATE1.
*"----------------------------------------------------------------------
* MODIFICATION LOG :
* Date Modified by Changes
*"----------------------------------------------------------------------
DATA : lt_item TYPE TABLE OF bapi2093_res_item,
ls_item LIKE LINE OF lt_item,
ls_resbitem LIKE LINE OF it_resbitem.
DATA : ls_resb LIKE bapi2093_res_head.
DATA : lt_segment TYPE TABLE OF bapi_profitability_segment,
ls_segment TYPE bapi_profitability_segment.
DATA l_glacct TYPE saknr.
DATA : lt_mard TYPE TABLE OF mard,
ls_mard TYPE mard.
DATA: ls_mara TYPE mara.
DATA: lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
DATA: ls_prps TYPE prps.
* DATA extensionin TYPE TABLE OF bapiparex WITH HEADER LINE.
DATA : wa_extensionin TYPE bapiparex,
it_extensionin TYPE TABLE OF bapiparex.
DATA: WA_BAPI_TE_REQUISITION_ACCOUNT LIKE BAPI_TE_REQUISITION_ACCOUNT.
l_glacct = '7001000010'.
*Build Reservation Header
UNPACK is_resb-kostl TO ls_resb-costcenter .
WRITE is_resb-posid TO ls_resb-wbs_element .
MOVE sy-datum TO ls_resb-res_date.
MOVE sy-uname TO ls_resb-created_by.
MOVE '221' TO ls_resb-move_type.
*Build Items Table
LOOP AT it_resbitem INTO ls_resbitem.
CLEAR ls_item.
ls_item-material = ls_resbitem-matnr.
ls_item-stge_loc = ls_resbitem-lgort.
ls_item-entry_qnt = ls_resbitem-menge.
ls_item-unload_pt = ls_resbitem-ablad.
ls_item-entry_uom = ls_resbitem-meins.
ls_item-plant = 'SSPL'.
ls_item-req_date = sy-datum.
ls_item-movement = 'X'.
ls_item-gl_account = l_glacct.
ls_item-acct_man = 'X'.
ls_item-item_text = ls_resbitem-sgtxt.
ls_item-gr_rcpt = ls_resbitem-wempf.
APPEND ls_item TO lt_item.
CLEAR ls_segment.
ls_segment-fieldname = ''.
ls_segment-value = ''.
APPEND ls_segment TO lt_segment.
*Check Material UOM
SELECT SINGLE * FROM mara INTO ls_mara
WHERE matnr = ls_item-material.
IF sy-subrc NE 0.
ls_return-type = 'E'.
CONCATENATE 'Material' ls_item-material `doesn't exists`
INTO ls_return-message SEPARATED BY space.
APPEND ls_return TO et_return.
ELSEIF ls_mara-lvorm EQ 'X'.
ls_return-type = 'E'.
CONCATENATE 'Material' ls_item-material `marked for deletion`
INTO ls_return-message SEPARATED BY space.
APPEND ls_return TO et_return.
ELSE.
SELECT SINGLE * FROM mara INTO ls_mara
WHERE matnr = ls_item-material
AND lvorm NE 'X'
AND meins = ls_item-entry_uom.
IF sy-subrc NE 0.
ls_return-type = 'E'.
CONCATENATE `UOM '` ls_item-entry_uom `' ` 'of the material' ls_item-material
'is not matched with SAP.' INTO ls_return-message SEPARATED BY space.
APPEND ls_return TO et_return.
ENDIF.
ENDIF.
*Check Material in Storage Location
SELECT SINGLE * FROM mard INTO ls_mard
WHERE matnr = ls_item-material
AND werks = ls_item-plant
AND lgort = ls_item-stge_loc
AND lvorm NE 'X'.
IF sy-subrc NE 0.
ls_return-type = 'E'.
CONCATENATE 'Material' ls_item-material 'does not exist in the storage location'
ls_item-stge_loc INTO ls_return-message SEPARATED BY space.
APPEND ls_return TO et_return.
ENDIF.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM et_return[].
*Check for Errors
READ TABLE et_return WITH KEY type = 'E' TRANSPORTING NO FIELDS .
CHECK sy-subrc NE 0.
CLEAR wa_extensionin.
wa_extensionin-structure = 'BAPI_TE_REQUISITION_ACCOUNT'.
WA_BAPI_TE_REQUISITION_ACCOUNT-PREQ_ITEM = 1234.
WA_BAPI_TE_REQUISITION_ACCOUNT-SERIAL_NO = 12.
WA_BAPI_TE_REQUISITION_ACCOUNT-ZREFNO = ls_resbitem-saprefno.
* WA_BAPI_TE_REQUISITION_ACCOUNT+7(40) = ls_resbitem-saprefno.
wa_extensionin-valuepart1 = WA_BAPI_TE_REQUISITION_ACCOUNT.
APPEND wa_extensionin TO it_extensionin.
*Call BAPI
CHECK ls_resb IS NOT INITIAL AND lt_item IS NOT INITIAL.
* LOOP AT it_resbitem INTO WA_BAPI_TE_REQUISITION_ACCOUNT.
* ENDLOOP.
CALL FUNCTION 'BAPI_RESERVATION_CREATE1'
EXPORTING
reservationheader = ls_resb
IMPORTING
reservation = e_rsnum
TABLES
reservationitems = lt_item
profitabilitysegment = lt_segment
extensionin = it_extensionin
return = lt_return.
APPEND LINES OF lt_return TO et_return.
IF e_rsnum IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = ' '
IMPORTING
return = ls_return.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDFUNCTION.