提供WMS调用的接口函数:ZSD_I001_SD001_WMS
用户名:WEB_IF_860
调用BAPI时没有消息提醒,程序直接就跳掉了
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok
commit = 'X'
delivery = ps_vbeln
update_picking = 'X'
IMPORTING
ef_error_in_goods_issue_0 = v_error
TABLES
vbpok_tab = lt_vbpok
prot = lt_prot.
IF v_error IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
PERFORM prepare_data."批次拆分前的数据准备
PERFORM automatic_posting."外向交货单自动填入拣配数量和自动过账
把关键的信息提取出来,建个新程序
*&---------------------------------------------------------------------*
*& Report ZHF_TEST2
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zhf_test2.
DATA: lv_vbeln TYPE likp-vbeln.
lv_vbeln = '8913003268'.
DATA: ls_vbkok TYPE vbkok.
DATA: lt_vbkok TYPE STANDARD TABLE OF vbkok.
DATA: lt_vbpok TYPE STANDARD TABLE OF vbpok.
DATA: ls_vbpok TYPE vbpok.
DATA: lt_prot TYPE TABLE OF prott.
DATA: v_error.
DATA: lt_lips TYPE TABLE OF lips.
DATA: ls_lips TYPE lips.
DATA: lt_lips1 TYPE TABLE OF lips.
DATA: ps_vbeln TYPE likp-vbeln.
"根据交货单号查出需要更改的交货单
SELECT * FROM lips INTO TABLE @lt_lips1 WHERE vbeln = @lv_vbeln.
ls_vbkok-vbeln_vl = lv_vbeln.
ps_vbeln = lv_vbeln.
LOOP AT lt_lips1 INTO DATA(ls_lips1).
CLEAR:ls_vbpok.
ls_vbpok-vbeln_vl = ls_lips1-vbeln.
ls_vbpok-posnr_vl = ls_lips1-posnr.
ls_vbpok-vbeln = ls_lips1-vgbel.
ls_vbpok-posnn = ls_lips1-vgpos.
ls_vbpok-pikmg = ls_lips1-lfimg.
ls_vbpok-matnr = ls_lips1-matnr.
ls_vbpok-charg = ls_lips1-charg.
ls_vbpok-vrkme = ls_lips1-vrkme.
ls_vbpok-meins = ls_lips1-meins.
ls_vbpok-umvkz = ls_lips1-umvkz.
ls_vbpok-umvkn = ls_lips1-umvkn.
ls_vbpok-lgort = ls_lips1-lgort.
APPEND ls_vbpok TO lt_vbpok.
ENDLOOP.
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok
commit = 'X'
delivery = ps_vbeln
update_picking = 'X'
"if_error_messages_send_0 = ''
IMPORTING
ef_error_in_goods_issue_0 = v_error
TABLES
vbpok_tab = lt_vbpok
prot = lt_prot.
IF v_error IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
会有消息提示
SAPLV50S >> LV50LF02
修改SY-MSGTY成S,不然的话会跳掉
然后可以看是哪个步骤调用的
之所以会有屏幕的消息提醒,是IF_ERROR_MESSAGES_SEND设置成了X
把 if_error_messages_send_0 设置从'X'改成''即可。
修改代码后捕抓对应的消息提醒
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok
commit = 'X'
delivery = ps_vbeln
update_picking = 'X'
if_error_messages_send_0 = '' "ZHF-250001 选择否后不会有屏幕的消息提醒
IMPORTING
ef_error_in_goods_issue_0 = v_error
TABLES
vbpok_tab = lt_vbpok
prot = lt_prot.
IF v_error IS INITIAL.
IF sy-msgty = 'E'. "ZHF-250001
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_json_out1-vbeln = ls_json_in-vbeln.
ls_json_out1-zzmsgtype = 'E'.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno INTO e_mess
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ls_json_out1-zzmsg = e_mess.
RETURN.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
查看对应的日志,可以发现一直有反复调用,但是没有返回消息
在SE37测试
DEBUG调试,修改变量的值
回写出了消息