SAP ABAP - Request Import & Export
Updated: Aug 29, 2022
PARAMETERS p_trkorr LIKE e070-trkorr OBLIGATORY.
PARAMETERS p_lpath LIKE draw-filep OBLIGATORY DEFAULT 'c:\temp\'.
SELECTION-SCREEN SKIP.
PARAMETERS p_down RADIOBUTTON GROUP func DEFAULT 'X'.
PARAMETERS p_up RADIOBUTTON GROUP func.
* Global data *
TYPE-POOLS sabc.
DATA pos TYPE i.
DATA temp TYPE c.
DATA path LIKE draw-filep.
DATA path_cofile LIKE draw-filep.
DATA path_data LIKE draw-filep.
DATA path_bin LIKE draw-filep.
DATA fk LIKE draw-filep.
DATA fr LIKE draw-filep.
DATA fd LIKE draw-filep.
DATA separator TYPE c.
* Complete local path *
AT SELECTION-SCREEN.
pos = strlen( p_lpath ) - 1.
temp = p_lpath+pos(1).
CHECK NOT temp = '\'.
CONCATENATE p_lpath '\' INTO p_lpath.
START-OF-SELECTION.
* Determine transport base directory *
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_TRANS'
ID 'VALUE' FIELD path.
*path = '\\bekotest\saploc\trans'.
* Determine file/path separator *
IF sy-opsys = 'Windows NT'.
separator = '\'.
ELSE.
separator = '/'.
ENDIF.
* Determine transport directories *
CONCATENATE path separator 'cofiles' separator INTO path_cofile.
CONCATENATE path separator 'data' separator INTO path_data.
CONCATENATE path separator 'data' separator INTO path_bin.
WRITE / 'Paths:'.
WRITE: / path_cofile,path_data,path_bin.
SKIP.
* Build filenames *
CONCATENATE p_trkorr+3(7) p_trkorr+0(3) INTO fk SEPARATED BY '.'.
CONCATENATE 'R' p_trkorr+4(6) '.' p_trkorr+0(3) INTO fr.
CONCATENATE 'D' p_trkorr+4(6) '.' p_trkorr+0(3) INTO fd.
* Up- or download transport request *
IF p_down = 'X'.
PERFORM download USING path_cofile p_lpath fk.
PERFORM download USING path_data p_lpath fr.
PERFORM download USING path_data p_lpath fd.
ELSE.
PERFORM upload USING p_lpath path_cofile fk.
PERFORM upload USING p_lpath path_data fr.
PERFORM upload USING p_lpath path_data fd.
ENDIF.
* Download files *
FORM download USING value(srcpath) LIKE draw-filep
value(dstpath) LIKE draw-filep
value(file) LIKE draw-filep.
DATA BEGIN OF buffer OCCURS 0.
DATA data(1024) TYPE x.
DATA END OF buffer.
DATA filename TYPE rlgrap-filename.
DATA reclen TYPE i.
DATA filelen TYPE i.
* Read input file *
CONCATENATE srcpath file INTO filename.
OPEN DATASET filename FOR INPUT IN BINARY MODE.
CHECK sy-subrc = 0.
WHILE sy-subrc = 0.
READ DATASET filename INTO buffer LENGTH reclen.
filelen = filelen + reclen.
APPEND buffer.
ENDWHILE.
CLOSE DATASET filename.
* Download file *
CONCATENATE dstpath file INTO filename.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
bin_filesize = filelen
filename = filename
filetype = 'BIN'
TABLES
data_tab = buffer
EXCEPTIONS
OTHERS = 1.
CHECK sy-subrc = 0.
WRITE: / 'Download:',(150) file.
ENDFORM.
* Upload file *
FORM upload USING value(srcpath) LIKE draw-filep
value(dstpath) LIKE draw-filep
value(file) LIKE draw-filep.
DATA BEGIN OF buffer OCCURS 0.
DATA data(1024) TYPE x.
DATA END OF buffer.
DATA filename TYPE rlgrap-filename.
DATA reclen TYPE i.
DATA filelen TYPE i.
DATA result TYPE c.
* Check if file exists *
CONCATENATE srcpath file INTO filename.
CALL FUNCTION 'WS_QUERY'
EXPORTING
filename = filename
query = 'FE'
IMPORTING
return = result
EXCEPTIONS
OTHERS = 1.
CHECK sy-subrc = 0 AND result = '1'.
* Upload file *
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = filename
filetype = 'BIN'
IMPORTING
filelength = filelen
TABLES
data_tab = buffer
EXCEPTIONS
OTHERS = 1.
* Write file to server *
CONCATENATE dstpath file INTO filename.
OPEN DATASET filename FOR OUTPUT IN BINARY MODE.
CHECK sy-subrc = 0.
LOOP AT buffer.
DESCRIBE FIELD buffer-data LENGTH reclen in byte mode.
IF filelen > reclen.
filelen = filelen - reclen.
ELSE.
reclen = filelen.
ENDIF.
TRANSFER buffer TO filename LENGTH reclen.
ENDLOOP.
CLOSE DATASET filename.
WRITE: / 'Upload:',(150)file.
ENDFORM.