FUNCTION zrfc_mm002.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(CALLNO) TYPE ZCALLNO
*" VALUE(PO_NUMBER) LIKE BAPIMEPOHEADER-PO_NUMBER
*" EXPORTING
*" VALUE(FLAG) LIKE BAPIRET2-TYPE
*" VALUE(MESSAGE) LIKE BAPIRET2-MESSAGE
*" TABLES
*" ZPOITEM STRUCTURE ZPOITEM01
*"----------------------------------------------------------------------
DATA: ls_zpoitem TYPE zpoitem01,
lv_message TYPE bapiret2-message,
lv_datano TYPE zdatano. DATA:
gv_po_number LIKE bapimepoheader-po_number, "PO号
gt_return LIKE TABLE OF bapiret2, "返回消息
gs_return LIKE LINE OF gt_return,
gt_poitem LIKE TABLE OF bapimepoitem, "行项目
gs_poitem LIKE LINE OF gt_poitem,
gt_poitemx LIKE TABLE OF bapimepoitemx,
gs_poitemx LIKE LINE OF gt_poitemx. CLEAR:gv_po_number,gs_poitemx,gs_poitem,gs_return,gt_poitemx,gt_poitem,gt_return. gv_po_number = po_number. LOOP AT zpoitem INTO ls_zpoitem.
gs_poitem-po_item = ls_zpoitem-po_item.
gs_poitem-delete_ind = ls_zpoitem-delete_ind.
APPEND gs_poitem TO gt_poitem. gs_poitemx-po_item = ls_zpoitem-po_item.
gs_poitemx-po_itemx = g_flag.
gs_poitemx-delete_ind = g_flag.
APPEND gs_poitemx TO gt_poitemx. CLEAR:gs_poitemx,gs_poitem.
ENDLOOP. CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = gv_po_number
TABLES
return = gt_return
poitem = gt_poitem
poitemx = gt_poitemx. READ TABLE gt_return INTO gs_return WITH KEY type = 'E'.
IF sy-subrc NE .
flag = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
CONCATENATE 'PO:'gv_po_number '处理完成' INTO message .
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LOOP AT gt_return INTO gs_return WHERE type CA 'AEX'.
MESSAGE ID gs_return-id
TYPE gs_return-type
NUMBER gs_return-number
WITH gs_return-message_v1 gs_return-message_v2
gs_return-message_v3 gs_return-message_v4
INTO lv_message.
CONCATENATE message lv_message INTO message SEPARATED BY '|'.
ENDLOOP.
SHIFT message LEFT DELETING LEADING '|'.
flag = 'E'.
ENDIF. *记录日志
CLEAR:gt_log,gs_log,ls_zpoitem.
LOOP AT zpoitem INTO ls_zpoitem.
lv_datano = lv_datano + .
gs_log-datano = lv_datano.
gs_log-name = 'ZRFC_MM002'.
gs_log-cdate = sy-datum.
GET TIME.
gs_log-ctime = sy-uzeit.
gs_log-callno = callno.
gs_log-flag = flag.
gs_log-log = message. CONCATENATE po_number ls_zpoitem-po_item ls_zpoitem-delete_ind
INTO gs_log-content SEPARATED BY '|'. CONDENSE gs_log-content NO-GAPS.
gs_log-length = STRLEN( gs_log-content ).
APPEND gs_log TO gt_log.
CLEAR ls_zpoitem.
ENDLOOP. IF gt_log IS NOT INITIAL.
INSERT zrfc_mm01in_log FROM TABLE gt_log.
IF sy-subrc = .
COMMIT WORK.
ENDIF.
ENDIF.
ENDFUNCTION.