*&---------------------------------------------------------------------* *& Report Z_UP_DOWN_CR *&---------------------------------------------------------------------* *& Upload/Download Change Request from/to PC *&---------------------------------------------------------------------* *& Unknown author *&---------------------------------------------------------------------* REPORT z_up_down_cr. * Selection screen * PARAMETERS p_trkorr LIKE e070-trkorr OBLIGATORY. PARAMETERS p_lpath(100) 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 p_lpath. DATA path_cofile LIKE p_lpath. DATA path_data LIKE p_lpath. DATA path_bin LIKE p_lpath. DATA fk LIKE p_lpath. DATA fr LIKE p_lpath. DATA fd LIKE p_lpath. 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. * 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: / 'Path Cofile:', path_cofile. WRITE: / 'Path Data :', path_data. WRITE: / 'Path Bin :', 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. *&---------------------------------------------------------------------* *& Form download *&---------------------------------------------------------------------* FORM download USING value(srcpath) LIKE p_lpath value(dstpath) LIKE p_lpath value(file) LIKE p_lpath. 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. "download *&---------------------------------------------------------------------* *& Form upload *&---------------------------------------------------------------------* FORM upload USING value(srcpath) LIKE p_lpath value(dstpath) LIKE p_lpath value(file) LIKE p_lpath. 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. "upload