描述:BAPI修改交货单扩展字段
业务需求:通过调用外向交货单修改的BAPI完成对LIKP&LIPS增强字段的修改
直接上操作:
1、VBKOK&VBPOK添加增强字段
2、增强点BADI:LE_SHP_DELIVERY_UPDATE创建实施
METHOD if_ex_le_shp_delivery_update~update_header.
MOVE is_vbkok-zaddress TO cs_likp-zaddress .
MOVE is_vbkok-zcontact TO cs_likp-zcontact .
MOVE is_vbkok-ztel TO cs_likp-ztel .
MOVE is_vbkok-zord TO cs_likp-zord .
MOVE is_vbkok-zwlgs TO cs_likp-zwlgs .
MOVE is_vbkok-zfws TO cs_likp-zfws .
MOVE is_vbkok-zxsqd TO cs_likp-zxsqd .
MOVE is_vbkok-zcrtid TO cs_likp-zcrtid .
ENDMETHOD.
method IF_EX_LE_SHP_DELIVERY_UPDATE~UPDATE_ITEM.
MOVE IS_VBPOK-ZJQBM TO CS_LIPS-ZJQBM .
endmethod.
完事激活
3、BADI:SMOD_V50B0001->EXIT_SAPLV50I_010添加增强逻辑
METHOD if_ex_smod_v50b0001~exit_saplv50i_010.
READ TABLE extension2 INTO DATA(ls_extension2) WITH KEY param = 'LIKP' field = 'ZADDRESS' .
IF sy-subrc = 0 .
MOVE ls_extension2-value TO cs_vbkok-zaddress .
CLEAR : ls_extension2 .
ENDIF .
READ TABLE extension2 INTO ls_extension2 WITH KEY param = 'LIKP' field = 'ZCONTACT' .
IF sy-subrc = 0 .
MOVE ls_extension2-value TO cs_vbkok-zcontact .
CLEAR : ls_extension2 .
ENDIF .
READ TABLE extension2 INTO ls_extension2 WITH KEY param = 'LIKP' field = 'ZTEL' .
IF sy-subrc = 0 .
MOVE ls_extension2-value TO cs_vbkok-ztel .
CLEAR : ls_extension2 .
ENDIF .
READ TABLE extension2 INTO ls_extension2 WITH KEY param = 'LIKP' field = 'ZORD' .
IF sy-subrc = 0 .
MOVE ls_extension2-value TO cs_vbkok-zord .
CLEAR : ls_extension2 .
ENDIF .
READ TABLE extension2 INTO ls_extension2 WITH KEY param = 'LIKP' field = 'ZWLGS' .
IF sy-subrc = 0 .
MOVE ls_extension2-value TO cs_vbkok-zwlgs .
CLEAR : ls_extension2 .
ENDIF .
READ TABLE extension2 INTO ls_extension2 WITH KEY param = 'LIKP' field = 'ZFWS' .
IF sy-subrc = 0 .
MOVE ls_extension2-value TO cs_vbkok-zfws .
CLEAR : ls_extension2 .
ENDIF .
READ TABLE extension2 INTO ls_extension2 WITH KEY param = 'LIKP' field = 'ZXSQD' .
IF sy-subrc = 0 .
MOVE ls_extension2-value TO cs_vbkok-zxsqd .
CLEAR : ls_extension2 .
ENDIF .
READ TABLE extension2 INTO ls_extension2 WITH KEY param = 'LIKP' field = 'ZCRTID' .
IF sy-subrc = 0 .
MOVE ls_extension2-value TO cs_vbkok-zcrtid .
CLEAR : ls_extension2 .
ENDIF .
LOOP AT ct_vbpok ASSIGNING FIELD-SYMBOL(<fs_vbpok>) .
LOOP AT extension2 INTO ls_extension2 WHERE param = 'LIPS' AND field = 'ZJQBM' AND row = <fs_vbpok>-posnr_vl .
MOVE ls_extension2-value TO <fs_vbpok>-zjqbm .
CLEAR ls_extension2 .
ENDLOOP .
ENDLOOP .
ENDMETHOD.
完事激活
4、BAPI相关代码
lv_head_data-deliv_numb = lv_vbeln_in .
lv_head_cont-deliv_numb = lv_vbeln_in .
lv_delivery = lv_vbeln_in .
SELECT * FROM lips INTO TABLE @DATA(lt_lips_tab) WHERE vbeln = @lv_vbeln_in .
LOOP AT import_info-mt_sd002_request-import_item[] INTO ls_item .
ls_item_data-deliv_numb = lv_vbeln_in .
ls_item_data-deliv_item = ls_item-posnr .
ls_item_data-dlv_qty = ls_item-lfimg .
READ TABLE lt_lips_tab INTO DATA(ls_lips_con) WITH KEY posnr = ls_item-posnr .
IF sy-subrc = 0 .
ls_item_data-fact_unit_nom = ls_lips_con-umvkz .
ls_item_data-fact_unit_denom = ls_lips_con-umvkn .
ENDIF .
APPEND ls_item_data TO lt_item_data .
ls_item_cont-deliv_numb = lv_vbeln_in .
ls_item_cont-deliv_item = ls_item-posnr .
ls_item_cont-chg_delqty = 'X' .
APPEND ls_item_cont TO lt_item_cont .
ls_item_data_spl-deliv_numb = lv_vbeln_in .
ls_item_data_spl-deliv_item = ls_item-posnr .
ls_item_data_spl-stge_loc = ls_item-lgort .
APPEND ls_item_data_spl TO lt_item_data_spl .
*扩展字段处理.
IF import_info-mt_sd002_request-import_head-zaddress IS NOT INITIAL .
ls_extension2-field = 'ZADDRESS' .
ls_extension2-param = 'LIKP' .
ls_extension2-value = import_info-mt_sd002_request-import_head-zaddress .
APPEND ls_extension2 TO lt_extension2 .
CLEAR : ls_extension2 .
ENDIF .
IF import_info-mt_sd002_request-import_head-zcontact IS NOT INITIAL .
ls_extension2-field = 'ZCONTACT' .
ls_extension2-param = 'LIKP' .
ls_extension2-value = import_info-mt_sd002_request-import_head-zcontact .
APPEND ls_extension2 TO lt_extension2 .
CLEAR : ls_extension2 .
ENDIF .
IF import_info-mt_sd002_request-import_head-ztel IS NOT INITIAL .
ls_extension2-field = 'ZTEL' .
ls_extension2-param = 'LIKP' .
ls_extension2-value = import_info-mt_sd002_request-import_head-ztel .
APPEND ls_extension2 TO lt_extension2 .
CLEAR : ls_extension2 .
ENDIF .
IF import_info-mt_sd002_request-import_head-zord IS NOT INITIAL .
ls_extension2-field = 'ZORD' .
ls_extension2-param = 'LIKP' .
ls_extension2-value = import_info-mt_sd002_request-import_head-zord .
APPEND ls_extension2 TO lt_extension2 .
CLEAR : ls_extension2 .
ENDIF .
IF import_info-mt_sd002_request-import_head-zwlgs IS NOT INITIAL .
ls_extension2-field = 'ZWLGS' .
ls_extension2-param = 'LIKP' .
ls_extension2-value = import_info-mt_sd002_request-import_head-zwlgs .
APPEND ls_extension2 TO lt_extension2 .
CLEAR : ls_extension2 .
ENDIF .
IF import_info-mt_sd002_request-import_head-zfws IS NOT INITIAL .
ls_extension2-field = 'ZFWS' .
ls_extension2-param = 'LIKP' .
ls_extension2-value = import_info-mt_sd002_request-import_head-zfws .
APPEND ls_extension2 TO lt_extension2 .
CLEAR : ls_extension2 .
ENDIF .
IF import_info-mt_sd002_request-import_head-zxsqd IS NOT INITIAL .
ls_extension2-field = 'ZXSQD' .
ls_extension2-param = 'LIKP' .
ls_extension2-value = import_info-mt_sd002_request-import_head-zxsqd .
APPEND ls_extension2 TO lt_extension2 .
CLEAR : ls_extension2 .
ENDIF .
IF import_info-mt_sd002_request-import_head-zcrtid IS NOT INITIAL .
ls_extension2-field = 'ZCRTID' .
ls_extension2-param = 'LIKP' .
ls_extension2-value = import_info-mt_sd002_request-import_head-zcrtid .
APPEND ls_extension2 TO lt_extension2 .
CLEAR : ls_extension2 .
ENDIF .
IF ls_item-zjqbm IS NOT INITIAL .
ls_extension2-field = 'ZJQBM' .
ls_extension2-param = 'LIPS' .
ls_extension2-row = ls_item-posnr .
ls_extension2-value = ls_item-zjqbm .
APPEND ls_extension2 TO lt_extension2 .
CLEAR : ls_extension2 .
ENDIF .
CLEAR : ls_item ,ls_item_data ,ls_item_cont ,ls_item_data_spl ,ls_lips.
ENDLOOP.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = lv_head_data
header_control = lv_head_cont
delivery = lv_delivery
TABLES
item_data = lt_item_data
item_control = lt_item_cont
extension1 = lt_extension
extension2 = lt_extension2
return = lt_return
item_data_spl = lt_item_data_spl.
*增强BUG:做完这俩增强行项目扩展字段可以更新,但是抬头还是不行,最后也没发现问题。
DEBUG找到增强点MV50AFZ1->USEREXIT_SAVE_DOCUMENT_PREPARE
经过测试,可以抛内存将抬头的扩展字段写入这个增强点。