Function Module FTP
Function Module FTP
https://belajarabap.wordpress.com/
FUNCTION yfm_ftp.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(FI_USERNAME) TYPE E_DEXCOMMUSERNAME
*" REFERENCE(FI_PASSWORD) TYPE WT_AUTHVAL
*" REFERENCE(FI_HOST) TYPE /ISDFPS/HOSTNAME
*" REFERENCE(FI_RFCDEST) TYPE RFCDES-RFCDEST DEFAULT 'SAPFTP'
*" REFERENCE(FI_FOLDER_INBOUND) TYPE SRMRGDESC
*" REFERENCE(FI_FOLDER_OUTBOUND) TYPE SRMRGDESC
*" TABLES
*" FT_RETURN STRUCTURE TLINE
*"----------------------------------------------------------------------
DATA:
ld_password TYPE wt_authval,
ld_handle TYPE i,
ld_command TYPE s_w3txt128,
ld_tabix TYPE sy-tabix,
ld_bloblen TYPE i,
ld_file_out TYPE c LENGTH 128,
ld_extention(128).
1
**Scramble the password provided in a format recognized by SAP.
CALL FUNCTION 'SCRAMBLE_STRING'
EXPORTING
SOURCE = fi_password
key = 26101957
IMPORTING
target = ld_password.
2
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = ld_handle
command = ld_command
compress = 'N'
TABLES
data = lt_result
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
IF sy-subrc = 0.
ft_return-tdformat = 'S'.
ft_return-tdline = 'Change folder directory OK'.
APPEND ft_return.
ELSE.
ft_return-tdformat = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO ft_return-tdline.
APPEND ft_return.
RETURN.
ENDIF.
IF sy-subrc = 0.
ft_return-tdformat = 'S'.
ft_return-tdline = 'Get file from FTP server OK'.
APPEND ft_return.
ELSE.
3
ft_return-tdformat = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO ft_return-tdline.
APPEND ft_return.
RETURN.
ENDIF.
LOOP AT lt_files.
TRANSLATE lt_files-line TO UPPER CASE.
IF lt_files-line CP '*.TXT'.
CONTINUE.
ELSE.
DELETE lt_files.
ENDIF.
ENDLOOP.
IF lt_files[] IS INITIAL.
ft_return-tdformat = 'E'.
ft_return-tdline = 'No text file to be proceed'.
APPEND ft_return.
RETURN.
ENDIF.
LOOP AT lt_files.
ld_tabix = sy-tabix.
IF ld_tabix GT 1.
****For 1st file, this command already execute above
****But for 2nd file and so on, needs to execute this command to
****change access its folder, because the access folder already change
****when execute outbound file
4
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = ld_handle
command = ld_command
compress = 'N'
TABLES
data = lt_result
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
IF sy-subrc = 0.
ft_return-tdformat = 'S'.
ft_return-tdline = 'Change folder directory OK'.
APPEND ft_return.
ELSE.
ft_return-tdformat = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO ft_return-tdline.
APPEND ft_return.
CONTINUE.
ENDIF.
ENDIF.
****Reading file
CALL FUNCTION 'FTP_SERVER_TO_R3'
EXPORTING
handle = ld_handle
fname = lt_files-line
character_mode = 'X'
IMPORTING
blob_length = ld_bloblen
TABLES https://belajarabap.wordpress.com
blob = lt_blob
text = lt_text
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
IF sy-subrc = 0.
ft_return-tdformat = 'S'.
ft_return-tdline = 'Reading file OK'.
5
APPEND ft_return.
ELSE.
ft_return-tdformat = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO ft_return-tdline.
APPEND ft_return.
CONTINUE.
ENDIF.
*******************************************************
****** PUT YOUR LOGIC FOR DATA PROCESSING IN HERE *****
*******************************************************
6
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = ld_handle
command = ld_command
compress = 'N'
TABLES
data = lt_result
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
IF sy-subrc = 0.
ft_return-tdformat = 'S'.
ft_return-tdline = 'Change to outbound folder directory OK'.
APPEND ft_return.
ELSE.
ft_return-tdformat = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO ft_return-tdline.
APPEND ft_return.
CONTINUE.
ENDIF.
7
ft_return-tdformat = 'S'.
ft_return-tdline = 'Write file to outbound folder OK'.
APPEND ft_return.
ELSE.
ft_return-tdformat = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO ft_return-tdline.
APPEND ft_return.
CONTINUE.
ENDIF.
ENDLOOP.
ENDFUNCTION.