REPORT zfi_test01_bdc_01.
INCLUDE zbdcincl.
*---------- top ------------
DATA: BEGIN OF lt_message OCCURS 0,
message(128) TYPE c,
END OF lt_message.
DATA: count_ok TYPE i.
DATA: count_ng TYPE i.
DATA: w_filename TYPE string.
* record[] 的欄位是資料上傳的欄位.
DATA: BEGIN OF record OCCURS 0,
* data element: BANKS
banks_001(003),
* data element: BANKK
bankl_002(015),
* data element: BANKA
banka_003(060),
* data element: swift
swift_004(011),
END OF record.
PARAMETERS: z_mode LIKE ctu_params-dismode DEFAULT 'E'. "A: show all dynpros. "E: show dynpro on error only. "N: do not display dynpro
PARAMETERS: filename LIKE rlgrap-filename.
*---------- end of top ------------
INITIALIZATION.
* PERFORM get_filename 使得 PARAMETERS: filename 可以使用下拉選單.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
PERFORM get_filename(zcom001) USING sy-cprog
sy-dynnr
CHANGING filename.
START-OF-SELECTION.
PERFORM upload_pc.
PERFORM process_data.
*&---------------------------------------------------------------------*
*& Form UPLOAD_PC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM upload_pc . w_filename = filename. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = w_filename filetype = 'ASC' has_field_separator = 'X' * IMPORTING * FILELENGTH = * HEADER = TABLES data_tab = record . IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " UPLOAD_PC
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_data .
count_ok = 0.
count_ng = 0.
LOOP AT record.
* row 1 of record file is skipped.
* IF sy-tabix = 1. "v01 start
* CONTINUE.
* ENDIF. "v01 end
** 該段 copy SHDB 產生的程式.
PERFORM bdc_dynpro USING 'SAPMF02B' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'BNKA-BANKL'
''.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'
''.
PERFORM bdc_field USING 'BNKA-BANKS'
record-banks_001
''.
PERFORM bdc_field USING 'BNKA-BANKL'
record-bankl_002
''.
PERFORM bdc_dynpro USING 'SAPMF02B' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR'
'BNKA-SWIFT'
''.
PERFORM bdc_field USING 'BDC_OKCODE'
'=UPDA'
''.
PERFORM bdc_field USING 'BNKA-BANKA'
record-banka_003
''.
PERFORM bdc_field USING 'BNKA-SWIFT'
record-swift_004
''.
* PERFORM bdc_transaction USING 'FI01'.
CLEAR:bdcmesg,bdcmesg[].
CALL TRANSACTION 'FI01'
USING bdcdata
MODE z_mode
UPDATE 'S'
MESSAGES INTO bdcmesg.
LOOP AT bdcmesg.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = bdcmesg-msgid
msgnr = bdcmesg-msgnr
msgv1 = bdcmesg-msgv1
msgv2 = bdcmesg-msgv2
msgv3 = bdcmesg-msgv3
msgv4 = bdcmesg-msgv4
IMPORTING
message_text_output = lt_message-message.
APPEND lt_message.
CLEAR lt_message.
ENDLOOP.
** 統計成功 or 失敗筆數.
IF sy-msgty = 'S'.
count_ok = count_ok + 1.
ELSE.
count_ng = count_ng + 1.
ENDIF.
* if no clear bdcdata, record 1 will be kept always.
CLEAR bdcdata[].
ENDLOOP.
LOOP AT lt_message.
WRITE:/ lt_message-message.
ENDLOOP.
WRITE:/ '(成功筆數)count_ok=', count_ok.
WRITE:/ '(失敗筆數)count_ng=', count_ng.
ENDFORM. " PROCESS_DATA
沒有留言:
張貼留言