◾ 모듈 : BC
◾ 기능 설명 : CTS File(Cofiles + Data) 다운로드, 업로드
=> 다른 시스템에 CTS 를 반영하는 방법__How to Import CTS of Another system
***********************************************************************
* Report : ZBC_CTS_FILE_MANAGER *
* Module/Sub-Module : BC *
* Description : CTS Cofiles, Data file Download/ Upload *
***********************************************************************
* MODIFICATION LOG *
* *
* DATE AUTHORS DESCRIPTION *
* ---------- ------------------ ------------------------------------- *
* 2026.03.26 YHJ Initial Release *
***********************************************************************
REPORT ZBC_CTS_FILE_MANAGER.
*----------------------------------------------------------------------*
* DATA
*----------------------------------------------------------------------*
DATA : GV_DIR_TRANS_PATH LIKE CST_RSWATCH01_ALV-DIRNAME,
GV_PATH_COFILE LIKE SAPB-SAPPFAD,
GV_PATH_DATA LIKE SAPB-SAPPFAD,
GV_FRONT_PATH_COFILE LIKE SAPB-SAPPFAD,
GV_FRONT_PATH_DATA LIKE SAPB-SAPPFAD,
GV_SLASH TYPE C,
GV_COFILE(20) TYPE C,
GV_DATA(20) TYPE C,
GV_ERR TYPE C.
*----------------------------------------------------------------------*
* SELECTION-SCREEN
*----------------------------------------------------------------------*
PARAMETERS : P_REQ TYPE E070-TRKORR.
SELECTION-SCREEN SKIP 1.
PARAMETERS: P_FOLDER(50) DEFAULT 'D:\DIR_TRANS'.
SELECTION-SCREEN SKIP 1.
PARAMETERS : P_EXPORT RADIOBUTTON GROUP RADI DEFAULT 'X',
P_IMPORT RADIOBUTTON GROUP RADI.
AT SELECTION-SCREEN OUTPUT.
%_P_REQ_%_APP_%-TEXT = 'Transport Request :'.
%_P_FOLDER_%_APP_%-TEXT = 'Local Folder :'.
%_P_EXPORT_%_APP_%-TEXT = 'Server => Local (Download)'.
%_P_IMPORT_%_APP_%-TEXT = 'Local => Server (Upload)'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_REQ.
CALL FUNCTION 'TR_F4_REQUESTS'
EXPORTING
IV_TRSTATUS = 'R'
IMPORTING
EV_SELECTED_REQUEST = P_REQ.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FOLDER.
DATA: LV_SELECT_FOLDER TYPE STRING.
CALL METHOD cl_gui_frontend_services=>directory_browse
CHANGING
SELECTED_FOLDER = LV_SELECT_FOLDER
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC = 0.
P_FOLDER = LV_SELECT_FOLDER.
ELSE.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*----------------------------------------------------------------------*
* INITIALIZATION *
*----------------------------------------------------------------------*
INITIALIZATION.
*----------------------------------------------------------------------*
* START-OF-SELECTION.
*----------------------------------------------------------------------*
START-OF-SELECTION.
"### 1. Path of DIR_TRANS folder
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_TRANS'
ID 'VALUE' FIELD GV_DIR_TRANS_PATH.
"### 2. Slash type
FIND '\' IN GV_DIR_TRANS_PATH.
IF SY-SUBRC EQ 0. GV_SLASH = '\'.
ELSE. GV_SLASH = '/'.
ENDIF.
"### 3. Front Path Slash Set
DATA(LV_LEN) = STRLEN( P_FOLDER ) - 1.
IF P_FOLDER+LV_LEN(1) <> '\'.
CONCATENATE P_FOLDER '\' INTO P_FOLDER.
ENDIF.
"### 4. Cofiles / Data File Paths
CONCATENATE :
'K' P_REQ+4 '.' P_REQ(3) INTO GV_COFILE,
GV_DIR_TRANS_PATH GV_SLASH 'cofiles' GV_SLASH GV_COFILE INTO GV_PATH_COFILE,
'R' P_REQ+4 '.' P_REQ(3) INTO GV_DATA,
GV_DIR_TRANS_PATH GV_SLASH 'data' GV_SLASH GV_DATA INTO GV_PATH_DATA.
"### 5. Upload / Download
CONCATENATE P_FOLDER GV_COFILE INTO GV_FRONT_PATH_COFILE.
CONCATENATE P_FOLDER GV_DATA INTO GV_FRONT_PATH_DATA.
IF P_IMPORT = 'X'.
"### Upload Cofile :
PERFORM UPLOAD_FILE USING GV_PATH_COFILE GV_FRONT_PATH_COFILE GV_ERR.
CHECK GV_ERR IS INITIAL.
"### Upload Data :
PERFORM UPLOAD_FILE USING GV_PATH_DATA GV_FRONT_PATH_DATA GV_ERR.
ELSEIF P_EXPORT ='X'.
"### Download Cofile :
PERFORM DOWNLOAD_FILE USING GV_PATH_COFILE GV_FRONT_PATH_COFILE GV_ERR.
CHECK GV_ERR IS INITIAL.
"### Download Data :
PERFORM DOWNLOAD_FILE USING GV_PATH_DATA GV_FRONT_PATH_DATA GV_ERR.
ENDIF.
*----------------------------------------------------------------------*
* END-OF-SELECTION.
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& ZBC_CTS_FILE_MANAGER_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IP_SERVER_PATH text
* -->IP_FRONT_PATH text
* -->EP_ERR text
*----------------------------------------------------------------------*
FORM UPLOAD_FILE USING IP_SERVER_PATH
IP_FRONT_PATH
EP_ERR.
DATA: LV_SERVER_FILENAME TYPE ESEFTAPPL,
LV_LOCAL_FILENAME TYPE STRING.
DATA: LV_OS_MESSAGE TYPE C,
LV_FLAG_OPEN_ERROR TYPE C.
CLEAR: EP_ERR.
LV_SERVER_FILENAME = IP_SERVER_PATH.
LV_LOCAL_FILENAME = IP_FRONT_PATH.
"### 첨부파일 디랙토리 실제 업로드.
SY-CPROG = 'RC1TCG3Z'.
CALL FUNCTION 'C13Z_FILE_UPLOAD_BINARY'
EXPORTING
I_FILE_FRONT_END = LV_LOCAL_FILENAME
I_FILE_APPL = LV_SERVER_FILENAME
I_FILE_OVERWRITE = 'X'
IMPORTING
E_FLG_OPEN_ERROR = LV_FLAG_OPEN_ERROR
E_OS_MESSAGE = LV_OS_MESSAGE
EXCEPTIONS
FE_FILE_NOT_EXISTS = 1
FE_FILE_READ_ERROR = 2
AP_NO_AUTHORITY = 3
AP_FILE_OPEN_ERROR = 4
AP_FILE_EXISTS = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
WRITE :/ 'Error uploading file'.
EP_ERR = 'X'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IP_SERVER_PATH text
* -->IP_FRONT_PATH text
* -->EP_ERR text
*----------------------------------------------------------------------*
FORM DOWNLOAD_FILE USING IP_SERVER_PATH
IP_FRONT_PATH
EP_ERR.
DATA: LV_SERVER_FILENAME TYPE ESEFTAPPL,
LV_LOCAL_FILENAME TYPE STRING,
LV_BIN_SIZE TYPE I,
LV_BIN_FULL_SIZE TYPE I,
LV_BIN_FILE TYPE XSTRING.
DATA: LT_PDF TYPE TABLE OF RCGREPFILE,
LS_PDF LIKE LINE OF LT_PDF.
LV_SERVER_FILENAME = IP_SERVER_PATH.
LV_LOCAL_FILENAME = IP_FRONT_PATH.
OPEN DATASET LV_SERVER_FILENAME FOR INPUT IN BINARY MODE.
DO.
CLEAR: LS_PDF, LV_BIN_SIZE.
READ DATASET LV_SERVER_FILENAME INTO LS_PDF LENGTH LV_BIN_SIZE.
IF SY-SUBRC = 0.
LV_BIN_FULL_SIZE = LV_BIN_FULL_SIZE + LV_BIN_SIZE.
APPEND LS_PDF TO LT_PDF.
ELSE.
IF LV_BIN_SIZE > 0.
LV_BIN_FULL_SIZE = LV_BIN_FULL_SIZE + LV_BIN_SIZE.
APPEND LS_PDF TO LT_PDF.
ENDIF.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET LV_SERVER_FILENAME.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = LV_BIN_FULL_SIZE
FILENAME = LV_LOCAL_FILENAME
FILETYPE = 'BIN'
TABLES
DATA_TAB = LT_PDF.
IF SY-SUBRC <> 0.
WRITE :/ 'Error downloading file'.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
EP_ERR = 'X'.
ENDIF.
ENDFORM.