1. 程式人生 > >將本地文件上傳至SAP伺服器上及從SAP伺服器下載到本地

將本地文件上傳至SAP伺服器上及從SAP伺服器下載到本地

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.