El primer paso va a ser crearnos una RFC que nos permita conectarnos al servidor FTP. Ejecutamos la transacción SM59 y creamos una nueva RFC dentro de "Conexiones TCP/IP". Le damos el nombre "SAPFTP". Es importante rellenar los parámetros tal cual los marco en la siguiente imagen:
A continuación os voy a dejar el código de ejemplo. Vamos a realizar los siguientes pasos:
- Listar los documentos del directorio.
- Leemos los ficheros
- Copiamos los ficheros a una carpeta de nuestra red
- Borramos los ficheros tratados del FTP.
Una vez realizados todos los pasos previo esté sería el programa a ejecutar:
l_login = 'usuario'.
l_password = 'Contraseña'.
l_direction = 'Dirección FTP'.
l_strlen = STRLEN( l_password ).
l_password = 'Contraseña'.
l_direction = 'Dirección FTP'.
l_strlen = STRLEN( l_password ).
* Realizamos la conexión al FTP
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
SOURCE = l_password
sourcelen = l_strlen
key = l_scr_key
IMPORTING
destination = l_password.
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = l_login
password = l_password
host = l_direction
rfc_destination = l_rfc_dst
IMPORTING
handle = l_handle
EXCEPTIONS
not_connected = 1.
IF sy-subrc = 0.
REFRESH: mtab_data.
* Listamos los ficheros en el ftp
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = l_handle
command = 'ls'
TABLES
data = mtab_data
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
* Marcamos el directorio local sobre el que vamos a trabajar y copiar los ficheros
local = '\\Ruta\Carpeta_Ficheros\'.
CONCATENATE 'lcd' local INTO cmd SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = l_handle
command = cmd
TABLES
data = mtab_lcd
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
* Leemos los ficheros en el ftp
LOOP AT mtab_ficheros.
REFRESH: mtab_fich,
mtab_rename,
mtab_get.
CALL FUNCTION 'FTP_SERVER_TO_R3'
EXPORTING
handle = l_handle
fname = mtab_ficheros-fichero
character_mode = 'X'
TABLES
text = mtab_fich
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
* Copiamos el archivo al directorio marcado
CONCATENATE 'get' mtab_ficheros-fichero INTO cmd SEPARATED BY ' '.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = l_handle
command = cmd
TABLES
data = mtab_get
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
* Borramos los ficheros leidos
CONCATENATE 'del' mtab_ficheros-fichero INTO cad SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = l_handle
command = cad
TABLES
data = mtab_del
EXCEPTIONS
command_error = 1
tcpip_error = 2.
ENDLOOP.
* Cerramos la conexión con el FTP
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = l_handle
EXCEPTIONS
OTHERS = 1.
ENDIF.
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
SOURCE = l_password
sourcelen = l_strlen
key = l_scr_key
IMPORTING
destination = l_password.
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = l_login
password = l_password
host = l_direction
rfc_destination = l_rfc_dst
IMPORTING
handle = l_handle
EXCEPTIONS
not_connected = 1.
IF sy-subrc = 0.
REFRESH: mtab_data.
* Listamos los ficheros en el ftp
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = l_handle
command = 'ls'
TABLES
data = mtab_data
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
* Marcamos el directorio local sobre el que vamos a trabajar y copiar los ficheros
local = '\\Ruta\Carpeta_Ficheros\'.
CONCATENATE 'lcd' local INTO cmd SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = l_handle
command = cmd
TABLES
data = mtab_lcd
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
* Leemos los ficheros en el ftp
LOOP AT mtab_ficheros.
REFRESH: mtab_fich,
mtab_rename,
mtab_get.
CALL FUNCTION 'FTP_SERVER_TO_R3'
EXPORTING
handle = l_handle
fname = mtab_ficheros-fichero
character_mode = 'X'
TABLES
text = mtab_fich
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
* Copiamos el archivo al directorio marcado
CONCATENATE 'get' mtab_ficheros-fichero INTO cmd SEPARATED BY ' '.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = l_handle
command = cmd
TABLES
data = mtab_get
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
* Borramos los ficheros leidos
CONCATENATE 'del' mtab_ficheros-fichero INTO cad SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = l_handle
command = cad
TABLES
data = mtab_del
EXCEPTIONS
command_error = 1
tcpip_error = 2.
ENDLOOP.
* Cerramos la conexión con el FTP
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = l_handle
EXCEPTIONS
OTHERS = 1.
ENDIF.
Muy bien
ResponderEliminar