e4rthdog
11/21/2019 - 7:21 AM

ABAP FTP

ABAP FTP

*&---------------------------------------------------------------------*
*&      Form  FTP
*&---------------------------------------------------------------------*
FORM FTP    USING    OBJECT_TYPE
                     OBJECT_ID
                     XML
                     RFC          TYPE RFCDEST
                     HOST         TYPE C
                     XML_PATH
                     USERNAME     TYPE C
                     PASSWORD     TYPE C
                     FTP_PATH
            CHANGING SUCCESS.

  Success = 'X'.

  DATA: lv_xml_ftp_file(150)," the name of the target file
        FNAME(100),
        slen TYPE I,
        key type i value 26101957,
        MI_HANDLE TYPE I,
        CMD(120),
        lv_file         TYPE string,
        lv_body         TYPE string,
        lv_subject      TYPE string,
        lv_notifs       TYPE text255.
  DATA: BEGIN OF MTAB_DATA OCCURS 0,
          LINE(132) TYPE C,
        END OF MTAB_DATA.
  DATA: BEGIN OF LT_FTP_FOLDER OCCURS 0,
          FOLDER(255),
        END OF LT_FTP_FOLDER.



  CLEAR: LT_FTP_FOLDER[], LT_FTP_FOLDER[].
  IF FTP_PATH IS NOT INITIAL.
    SPLIT FTP_PATH AT '/' INTO TABLE LT_FTP_FOLDER.
  ENDIF.


  CONCATENATE 'CATALOG' OBJECT_ID  '_' sy-datum '.xml'
              INTO lv_xml_ftp_file SEPARATED BY space.
  CONDENSE    lv_xml_ftp_file NO-GAPS.


  Clear fname.
  CONCATENATE  XML_PATH  lv_xml_ftp_file into FNAME.
  open dataset FNAME in text mode ENCODING utf-8 for OUTPUT.
      IF sy-subrc EQ 0.
        transfer XML to FNAME.
      ENDIF.
  close dataset FNAME.


  set extended check off.
    slen = strlen( PASSWORD ).

  call function 'HTTP_SCRAMBLE'
    exporting
      source      = PASSWORD
      sourcelen   = slen
      key         = key
    importing
      destination = PASSWORD.


  CALL FUNCTION 'FTP_CONNECT'
   EXPORTING
     USER            = USERNAME "Your SAP-UNIX FTP USERNAME name (case sensitive)
     PASSWORD        = PASSWORD
     HOST            = HOST
     RFC_DESTINATION = RFC
   IMPORTING
     HANDLE          = MI_HANDLE
   EXCEPTIONS
     NOT_CONNECTED   = 1
     OTHERS          = 2.

  IF SY-SUBRC = 0.
*  >>Set bin on
   clear cmd.
   CMD = 'bin'.
   CALL FUNCTION 'FTP_COMMAND'
     EXPORTING
       HANDLE        = MI_HANDLE
       COMMAND       = CMD
     TABLES
       DATA          = MTAB_DATA
     EXCEPTIONS
       TCPIP_ERROR   = 1
       COMMAND_ERROR = 2
       DATA_ERROR    = 3
       OTHERS        = 4.
   IF SY-SUBRC NE 0.
      SUCCESS = SPACE.
   ENDIF.
*  <<  end of set bin mode on

*  >>Set passive mode on
   clear cmd.
   CMD = 'quote pasv'.
   CALL FUNCTION 'FTP_COMMAND'
     EXPORTING
       HANDLE        = MI_HANDLE
       COMMAND       = CMD
     TABLES
       DATA          = MTAB_DATA
     EXCEPTIONS
       TCPIP_ERROR   = 1
       COMMAND_ERROR = 2
       DATA_ERROR    = 3
       OTHERS        = 4.
   IF SY-SUBRC NE 0.
      SUCCESS = SPACE.
   ENDIF.
*  <<  end of set passive mode on

  LOOP AT LT_FTP_FOLDER.
    clear cmd.
    CONCATENATE 'cd' LT_FTP_FOLDER-FOLDER INTO CMD SEPARATED BY space.
*    CMD = 'cd SapCatalogs'.
    CALL FUNCTION 'FTP_COMMAND'
      EXPORTING
        HANDLE        = MI_HANDLE
        COMMAND       = CMD
      TABLES
        DATA          = MTAB_DATA
      EXCEPTIONS
        TCPIP_ERROR   = 1
        COMMAND_ERROR = 2
        DATA_ERROR    = 3
        OTHERS        = 4.
    IF SY-SUBRC NE 0.
       SUCCESS = SPACE.
    ENDIF.
  ENDLOOP.


   "PLACE FILE
   clear cmd.
   concatenate 'put' FNAME lv_xml_ftp_file
               into cmd separated by space.
   CALL FUNCTION 'FTP_COMMAND'
     EXPORTING
       HANDLE        = MI_HANDLE
       COMMAND       = CMD
     TABLES
       DATA          = MTAB_DATA
     EXCEPTIONS
       TCPIP_ERROR   = 1
       COMMAND_ERROR = 2
       DATA_ERROR    = 3
       OTHERS        = 4.
   IF SY-SUBRC NE 0.
      SUCCESS = SPACE.
   ENDIF.

*  --Disconnect from FTP server
  CALL FUNCTION 'FTP_DISCONNECT'
   EXPORTING
     HANDLE = MI_HANDLE
   EXCEPTIONS
     OTHERS = 1.

*  --Close RFC connection
   CALL FUNCTION 'RFC_CONNECTION_CLOSE'
     EXPORTING
       DESTINATION = RFC
     EXCEPTIONS
       OTHERS      = 1.
   else.
     success = SPACE.
   endif.


  
"IF PROCCESS IS NOT SUCCESSFUL, SEND NOTIFICATION EMAIL
  if success = 'X'.
    CLEAR XML.
    XML = lv_xml_ftp_file.
  else.
    CONCATENATE lv_xml_ftp_file 'Problem when sending with FTP' OBJECT_TYPE
                 ':' INTO lv_body.
    lv_subject = 'B2C FTP Error (CATALOG NOT SENT)'.
    lv_notifs  = zplb2c_cl_utils=>get_config_value(
                            'Catalog.ChangeNotification.Emails').
    CALL FUNCTION 'ZPLB2C_UTILS_SENDMAIL'
      EXPORTING
        iv_subject = lv_subject
        iv_body    = lv_body
        iv_emails  = lv_notifs
      EXCEPTIONS
        OTHERS     = 0.
  endif.

ENDFORM.  "FTP