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提交