將本地文件上傳至SAP伺服器上及從SAP伺服器下載到本地
阿新 • • 發佈:2019-01-09
1、將本地文件上傳至SAP伺服器上
DATA:lv_file TYPE string,lv_ver LIKE gt_out-ver.
DATA: fname TYPE rlgrap-filename,
ftype TYPE rlgrap-filetype,
fsize TYPE i.
DATA: data_tab LIKE rcgrepfile OCCURS 10 WITH HEADER LINE.
READ TABLE gt_out WITH KEY sel = 'X'.
IF sy-subrc <> 0.
MESSAGE '請選擇要上傳檔案的行!' TYPE 'E'.
ELSE.
lv_ver = gt_out-ver+2(1).
CONDENSE lv_ver NO-GAPS.
CONCATENATE 'C:\usr\sap\DEV\DVEBMGS00\data\' gt_out-wdbm lv_ver INTO lv_file."先通過AL11選擇一個可用上傳的SAP地址 ’C:\usr\sap\DEV\DVEBMGS00\data\‘ 這些都是通過AL11選擇的後面跟的是你的檔名
OPEN DATASET lv_file FOR OUTPUT IN BINARY MODE ."建立檔案
IF sy-subrc = 0.
CALL FUNCTION ' UPLOAD' "將文件以二進位制的方式放入處理的內表中
EXPORTING
codepage = '8400'
filename = 'c:/'
filetype = 'BIN'
filetype_no_change = 'X'
IMPORTING
filesize = fsize
act_filename = fname
act_filetype = ftype
TABLES
data_tab = data_tab
EXCEPTIONS
conversion_error = 1
invalid_table_width = 2
invalid_type = 3.
ENDIF.
LOOP AT data_tab.
TRANSFER data_tab-orblk TO lv_file. "將內表的資料放入你所建立的檔案中
ENDLOOP.
CLOSE DATASET lv_file. "關閉檔案
IF sy-subrc = 0.
MESSAGE ' 文件上傳成功!' TYPE 'S'.
ELSE.
MESSAGE '文件上傳失敗!' TYPE 'E'.
ENDIF.
ENDIF.
2、從SAP伺服器下載到本地
DATA:lv_ver LIKE gt_out-ver.
DATA: dset TYPE string,
subrc LIKE sy-subrc,
leng TYPE i,
fsize TYPE i VALUE 0,
buf TYPE c LENGTH 1000,
tblob LIKE TABLE OF buf.
READ TABLE gt_out WITH KEY sel = 'X'.
IF sy-subrc <> 0.
MESSAGE '請選擇要上傳檔案的行!' TYPE 'E'.
ELSE.
lv_ver = gt_out-ver+2(1).
CONDENSE lv_ver NO-GAPS.
CONCATENATE 'C:\usr\sap\DEV\DVEBMGS00\data\' gt_out-wdbm lv_ver INTO dset.
OPEN DATASET dset FOR INPUT IN BINARY MODE."讀取上傳去的文件
IF sy-subrc <> 0.
MESSAGE 'Error: open dataset.' TYPE 'E'.
ENDIF.
WHILE subrc = 0.
leng = 0.
READ DATASET dset INTO buf ACTUAL LENGTH leng.
subrc = sy-subrc.
CHECK leng > 0.
fsize = fsize + leng.
APPEND buf TO tblob.
ENDWHILE.
CLOSE DATASET dset.
DATA l_name TYPE string.
DATA:l_filename TYPE string,
l_path TYPE string.
CALL FUNCTION 'GUI_FILE_SAVE_DIALOG'
EXPORTING
window_title = '選擇路徑'
default_extension = 'XLS'
IMPORTING
filename = l_filename
path = l_path .
CONCATENATE l_path '\' l_filename INTO l_name.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = fsize
filename = l_name
filetype = 'BIN'
TABLES
data_tab = tblob
EXCEPTIONS
OTHERS = 9.
IF sy-subrc = 0.
MESSAGE '下載成功!' TYPE 'S'.
ELSE.
MESSAGE '下載失敗!' TYPE 'E'.
ENDIF.
ENDIF.