ABAP - CTS File 다운로드/업로드 프로그램__CTS File Download/Upload

감귤은탱귤·2026년 3월 26일

ABAP - BC 프로그램

목록 보기
14/14

◾ 모듈 : BC
◾ 기능 설명 : CTS File(Cofiles + Data) 다운로드, 업로드
=> 다른 시스템에 CTS 를 반영하는 방법__How to Import CTS of Another system



1. 소스 코드

***********************************************************************
* 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.
profile
SAP BC (2019 ~ )

0개의 댓글