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