BAPI 案例
DATA billingdatain TYPE TABLE OF bapivbrk WITH HEADER LINE.
DATA return TYPE TABLE OF bapiret1 WITH HEADER LINE.
DATA success TYPE TABLE OF bapivbrksuccess WITH HEADER LINE.
DATA: lv_vbeln TYPE vbeln.
DATA: lv_msg TYPE bapi_msg.
CLEAR: billingdatain, billingdatain[], return, return[], success, success[], lv_vbeln, lv_msg.
lv_vbeln = |{ i_req-req-vbeln ALPHA = IN }|.
SELECT * FROM vbap WHERE vbeln = @lv_vbeln INTO TABLE @DATA(gt_vbap).
SELECT * FROM vbak WHERE vbeln = @lv_vbeln INTO TABLE @DATA(gt_vbak).
IF sy-subrc <> 0.
o_resp-msgty = 'E'.
o_resp-msgtx = '销售订单号不存在!'.
RETURN.
ENDIF.
LOOP AT gt_vbap INTO DATA(gs_vbap).
CLEAR billingdatain.
billingdatain-ref_doc = gs_vbap-vbeln. "凭证号
billingdatain-ref_item = gs_vbap-posnr.
billingdatain-bill_date = i_req-req-datum_vf.
billingdatain-ref_doc_ca = 'G'. "SD 凭证类别---合同
billingdatain-ordbilltyp = 'ZF8'. "开票类型
READ TABLE gt_vbak INTO DATA(gs_vbak) INDEX 1.
billingdatain-salesorg = gs_vbak-vkorg. "销售组织
billingdatain-distr_chan = gs_vbak-vtweg. "分销渠道
billingdatain-division = gs_vbak-spart. "产品组
billingdatain-doc_type = gs_vbak-auart. "销售凭证类型
APPEND billingdatain.
ENDLOOP.
CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'
TABLES
billingdatain = billingdatain
return = return
success = success.
IF success[] IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
READ TABLE success INDEX 1.
o_resp-msgty = 'S'.
o_resp-sapnum = success-bill_doc.
ELSE.
LOOP AT return WHERE type = 'E' OR type = 'I' OR type = 'A'.
lv_msg = lv_msg && return-message && ';'.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
o_resp-msgty = 'E'.
o_resp-msgtx = lv_msg.
ENDIF.