- 先在VBPOK结构中新增附加结构新增自定义字段


- SE18对BADI SMOD_V50B0001 新增实施

- 再接口IF_EX_SMOD_V50B0001中EXIT_SAPLV50I_010将对应参数传入标准程序内存中,代码如下
METHOD if_ex_smod_v50b0001~exit_saplv50i_010.CONSTANTS:lc_cs_vbkok(8) TYPE c VALUE 'CS_VBKOK'.DATA: lv_item TYPE posnr_vl.FIELD-SYMBOLS: <lfs_fieldname> TYPE any.LOOP AT extension2 INTO DATA(lw_extension2).CASE lw_extension2-param.WHEN 'LIKP'. "Fields for LIKPASSIGN (lc_cs_vbkok) TO FIELD-SYMBOL(<lfs_vbkok>).IF <lfs_vbkok> IS ASSIGNED.ASSIGN COMPONENT lw_extension2-field OF STRUCTURE <lfs_vbkok> TO <lfs_fieldname>.IF <lfs_fieldname> IS ASSIGNED.<lfs_fieldname> = lw_extension2-value.UNASSIGN <lfs_fieldname>.ENDIF.UNASSIGN <lfs_vbkok>.ENDIF.WHEN 'LIPS'.MOVE lw_extension2-row TO lv_item.READ TABLE ct_vbpok ASSIGNING FIELD-SYMBOL(<lfs_vbpok>) WITH KEY posnr_vl = lv_item.IF sy-subrc = 0.ASSIGN COMPONENT lw_extension2-field OF STRUCTURE <lfs_vbpok> TO <lfs_fieldname>.IF <lfs_fieldname> IS ASSIGNED.<lfs_fieldname> = lw_extension2-value.UNASSIGN <lfs_fieldname>.ENDIF.UNASSIGN <lfs_vbpok>.ENDIF.ENDCASE.ENDLOOP.ENDMETHOD.
- 对BADI->LE_SHP_DELIVERY_UPDATE新增实施,再IF_EX_LE_SHP_DELIVERY_UPDATE~UPDATE_HEADER
IF_EX_LE_SHP_DELIVERY_UPDATE~UPDATE_ITEM 中新增字段赋值逻辑 
此次修改的是DN行项目字段,代码如下:
METHOD if_ex_le_shp_delivery_update~update_item.DATA ls_lips_exit TYPE zsd_vbpok01.DATA: lt_table TYPE TABLE OF dfies.DATA lv_fieldname TYPE fieldname."修改行增强项目信息IF is_vbpok IS NOT INITIAL .CALL FUNCTION 'DDIF_NAMETAB_GET'EXPORTINGtabname = 'ZSD_VBPOK01'TABLESdfies_tab = lt_tableEXCEPTIONSnot_found = 1OTHERS = 2.LOOP AT lt_table INTO DATA(ls_table).ASSIGN COMPONENT ls_table-fieldname OF STRUCTURE cs_lips TO FIELD-SYMBOL(<fv_lips>).IF sy-subrc EQ 0 AND <fv_lips> IS ASSIGNED.ASSIGN COMPONENT ls_table-fieldname OF STRUCTURE is_vbpok TO FIELD-SYMBOL(<fv_vbpok>).IF sy-subrc EQ 0 AND <fv_lips> IS ASSIGNED.lv_fieldname = |{ ls_table-fieldname }_X|.ASSIGN COMPONENT lv_fieldname OF STRUCTURE is_vbpok TO FIELD-SYMBOL(<fv_value>).IF sy-subrc EQ 0 AND <fv_value> IS ASSIGNED.IF <fv_value> EQ 'X'.<fv_lips> = <fv_vbpok>.ENDIF.ENDIF.ENDIF.UNASSIGN:<fv_lips>,<fv_vbpok>.ENDIF.ENDLOOP.ENDIF.ENDMETHOD.
- 最后在调用bapi时,将自定义增强字段传入extension2 参数中
-
FORM frm_process_data .DATA ls_header_data TYPE bapiobdlvhdrchg.DATA ls_header_control TYPE bapiobdlvhdrctrlchg.DATA lt_item_data TYPE STANDARD TABLE OF bapiobdlvitemchg.DATA lt_item_control TYPE STANDARD TABLE OF bapiobdlvitemctrlchg.DATA lt_header_deadlines TYPE STANDARD TABLE OF bapidlvdeadln.DATA lt_extension2 TYPE TABLE OF bapiext.DATA lt_return TYPE TABLE OF bapiret2.DATA lv_msg TYPE string.DATA lv_msgty TYPE msgty.SELECT DISTINCT lips~vbeln,lips~posnr,lips~matnr, lips~lgort,lips~charg,lips~lfimg,lips~meins,lips~vrkme,lips~umvkz,lips~umvkn,lips~vgbel,lips~vgpos,lips~uechaFROM lipsINNER JOIN @gt_data AS data ON lips~vbeln = data~vbelnINTO TABLE @DATA(lt_lips).SORT lt_lips BY vbeln posnr.SORT gt_data BY vbeln posnr.LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_wa>) WHERE sel = 'X'AND msgty IS INITIAL.CLEAR lv_msg.IF <fs_wa>-wbstk EQ 'C'.lv_msg = |{ TEXT-013 }{ TEXT-012 }|.<fs_wa> = VALUE #( BASE <fs_wa> icon = icon_red_light msgty = 'E' msgtx = lv_msg ).CONTINUE.ENDIF.lt_extension2 = VALUE #( BASE lt_extension2 ( param = 'LIPS' row = CONV int4( <fs_wa>-posnr ) field = 'ZZCUSTDN' value = <fs_wa>-zzcustdn_new )( param = 'LIPS' row = CONV int4( <fs_wa>-posnr ) field = 'ZZCUSTDN_X' value = 'X' ) ).READ TABLE lt_lips INTO DATA(wa) WITH KEY vbeln = <fs_wa>-vbeln posnr = <fs_wa>-posnr BINARY SEARCH.IF sy-subrc EQ 0.lt_item_data = VALUE #( BASE lt_item_data ( deliv_numb = wa-vbeln deliv_item = wa-posnrdlv_qty = wa-lfimg dlv_qty_imunit = wa-lfimgbase_uom = wa-meins batch = wa-chargfact_unit_nom = wa-umvkz fact_unit_denom = wa-umvkn ) ).lt_item_control = VALUE #( BASE lt_item_control ( deliv_numb = wa-vbeln deliv_item = wa-posnr chg_delqty = '' ) ).ENDIF.AT END OF vbeln.ls_header_data-deliv_numb = <fs_wa>-vbeln.ls_header_control-deliv_numb = <fs_wa>-vbeln.CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'EXPORTINGheader_data = ls_header_dataheader_control = ls_header_controldelivery = <fs_wa>-vbelnTABLESextension2 = lt_extension2item_data = lt_item_dataitem_control = lt_item_controlreturn = lt_return.LOOP AT lt_return INTO DATA(ls_return) WHERE type CA 'AEX'.MESSAGE ID ls_return-idTYPE ls_return-typeNUMBER ls_return-numberWITH ls_return-message_v1 ls_return-message_v2ls_return-message_v3 ls_return-message_v4INTO ls_return-message.lv_msg = COND #( WHEN lv_msg IS INITIAL THEN ls_return-messageELSE |{ lv_msg },{ ls_return-message }| ).lv_msgty = 'E'.CLEAR ls_return.ENDLOOP.IF lv_msgty NE 'E'.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X' .lv_msgty = 'S'.lv_msg = TEXT-014.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .lv_msg = |{ TEXT-013 }{ lv_msg }|.ENDIF.MODIFY gt_data FROM VALUE ty_data( msgty = lv_msgty msgtx = lv_msgicon = COND #( WHEN lv_msgty = 'E' THEN icon_red_lightELSE icon_green_light ) )TRANSPORTING msgty msgtx iconWHERE sel = 'X'AND vbeln = <fs_wa>-vbelnAND msgty IS INITIAL.CLEAR:lt_extension2,lt_return,lt_item_data,lt_item_control.ENDAT.CLEAR wa.ENDLOOP.ENDFORM.
