Abap 如何使用BAPI_OUTB_DELIVERY_更改参数EXTENSION2更新Z字段?

Abap 如何使用BAPI_OUTB_DELIVERY_更改参数EXTENSION2更新Z字段?,abap,bapi,Abap,Bapi,如何使用EXTENSION2使用BAPI\u OUTB\u DELIVERY\u CHANGE更新Z字段 我试图使用BAPI更新交付,更新LIKP表中的一些Z字段,但调用后没有进行任何更改 有什么建议吗?我找到了BAdI-SMOD_V50B0001。我做了一个增强实现操作,并在方法EXIT_SAPLV50I_010(用户退出BAPI以更改出站传递)中设置以下代码 METHOD if_ex_smod_v50b0001~exit_saplv50i_010. CONSTANTS: lc_vbkok

如何使用
EXTENSION2
使用
BAPI\u OUTB\u DELIVERY\u CHANGE
更新Z字段

我试图使用BAPI更新交付,更新
LIKP
表中的一些Z字段,但调用后没有进行任何更改


有什么建议吗?

我找到了BAdI-SMOD_V50B0001。我做了一个增强实现操作,并在方法EXIT_SAPLV50I_010(用户退出BAPI以更改出站传递)中设置以下代码

METHOD if_ex_smod_v50b0001~exit_saplv50i_010.

CONSTANTS: lc_vbkok    TYPE char5  VALUE 'VBKOK',           "Enhance the structure for more z fields in LIKP
           lc_vbpok    TYPE char5  VALUE 'VBPOK',           "Enhance the structure for more z fields in LIPS
           lc_cs_vbkok TYPE char8  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.
      "As a structure in row 0
    WHEN lc_vbkok. "Fields for LIKP
        ASSIGN (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.
          ENDIF.
        ENDIF.

      "As a table from row 1 to n
    WHEN lc_vbpok. "Fields for 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.
          ENDIF.
        ENDIF.

  ENDCASE.

ENDLOOP.

ENDMETHOD.
方法,如果_ex_smod_v50b001~退出_saplv50i_010。
常量:lc_vbkok TYPE char5值'vbkok',“增强LIKP中更多z字段的结构
lc_vbpok TYPE char5值‘vbpok’,“增强LIPS中更多z字段的结构
lc_cs_vbkok类型字符8值'cs_vbkok'。
数据:lv_项目类型posnr_vl。
字段符号:键入任意。
在extension2处循环到数据(lw_extension2)。
案例lw_扩展2-param。
“作为第0行中的结构
当lc_vbkok.“LIKP的字段
将(lc_cs_vbkok)赋值给字段-SYMBOL()。
如果已分配。
将结构的组件lw_extension2字段分配给。
如果已分配。
=lw_扩展2-值。
恩迪夫。
恩迪夫。
“作为从第1行到第n行的表格
当lc_vbpok.“嘴唇字段”
将lw_扩展2行移动到lv_项。
读取表ct_vbpok赋值字段-SYMBOL(),键posnr_vl=lv_项。
如果sy subrc=0。
将结构的组件lw_extension2字段分配给。
如果已分配。
=lw_扩展2-值。
恩迪夫。
恩迪夫。
尾声。
结束循环。
ENDMETHOD。
使用appen结构增强结构VBKOK和LIKP,以添加新的z字段,并增强结构VBPOK和LIPS,以达到相同的目的

还可以看看程序LV50LF01,需要实现一个额外的增强点来保持这些值

在这之后我想我得到了它

METHOD m_update_delivery.

DATA: lw_header_data    TYPE bapiobdlvhdrchg,
      lw_header_control TYPE bapiobdlvhdrctrlchg,
      lw_extension2     TYPE bapiext.

DATA: li_extension2 TYPE TABLE OF bapiext,
      li_return     TYPE TABLE OF bapiret2.

DATA: lv_delivery TYPE bapiobdlvhdrchg-deliv_numb.

lw_header_data-deliv_numb = p_w_output-delivery.
lw_header_control-deliv_numb = p_w_output-delivery.
lv_delivery = p_w_output-delivery.

lw_extension2-param = 'VBKOK'.
lw_extension2-field = 'ZZEXIDV'.

lw_extension2-value = p_w_output-value.
APPEND lw_extension2 TO li_extension2.

" Call BAPI to update delivery
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
  EXPORTING
    header_data    = lw_header_data
    header_control = lw_header_control
    delivery       = lv_delivery
  TABLES
    extension2     = li_extension2
    return         = li_return.

READ TABLE li_return INTO DATA(lw_return)
                     WITH KEY type = c_e.
IF sy-subrc <> 0.
  COMMIT WORK AND WAIT.
ENDIF.

ENDMETHOD.
方法m\u更新\u交付。
数据:lw_标头_数据类型BAPIOBDLVHDG,
lw_集管_控制类型BAPIOBDLLVHDRCTRLCHG,
lw_扩展2类型bapiext。
数据:bapiext的li_extension2类型表,
bapiret2的LIU返回类型表。
数据:LVU交付类型BAPIOBDLVHDG-Deliver\u numb。
lw_标题_数据交付_编号=p_w_输出交付。
lw_标题_控制-deliver_numb=p_w_输出-deliver。
lv_交付=p_w_输出交付。
lw_extension2-param='VBKOK'。
lw_extension2-field='ZZEXIDV'。
lw_扩展2-value=p_w_输出值。
将lw_扩展2附加到li_扩展2。
“呼叫BAPI以更新传递
调用函数“BAPI\u OUTB\u DELIVERY\u CHANGE”
出口
标题\数据=lw\ U标题\数据
收割台\控制=lw\ U收割台\控制
交付=lv\U交付
桌子
extension2=li_extension2
return=liu return。
将表LIU return读入数据(lw return)
键类型为c_e。
如果sy subrc为0。
投入工作并等待。
恩迪夫。
ENDMETHOD。

您需要在BAPI功能模块之后添加BAPI\u提交