Conexión FTP desde ABAP - POO

Hola comunidad hoy les quiero presentar un tema que en algún momento les puede solucionar muchos dolores de cabeza cuando se presente el tema.
Les hablo de la conexión FTP (File Transfer Protocol) desde ABAP, que es esto? Simple es la comunicación entre un servidor externo para poder acceder a sus archivos, ver carpetas, etc. Y esta vez vamos a hacer esta interacción desde nuestro programa ABAP a un Servidor externo que tiene como S.O. Windows 7.
Requisitos.
Servidor FTP
Usuario del Servidor FTP
Contraseña de Servidor FTP
Muchas ganas de aprender :D.

Comencemos:

Creamos nuestro programa desde la transacción SE38 o SE80 donde nos acomodemos mejor, en este caso será desde la SE38; Ingresamos el nombre de nuestro programa en este caso se ZFTP001.

Damos clic en crear

Posteriormente nos aparecerá una ventana en la cual asignaremos el título de nuestro programa, así también como el Tipo, Status y Aplicación, como se muestra en la imagen.

Al finalizar damos clic en grabar.

Nos pedirá el paquete en el cual estará guardado nuestro programa, lo ingresamos y terminamos con un ENTER.

Posterior a esto nos pedirá un transporte en donde se almacenará nuestro programa, para esto generaremos un transporte nuevo.
Damos clic en la hoja en blanco “Crear Orden”.

Ingresamos el nombre del transporte y damos ENTER.

En la siguiente ventana se mostrará el nuevo transporte que creamos, solo daremos clic en continuar.

Lista es la hora de programar, en el editor vamos crear 2 includes, uno de ellos para las variables globales y elementos del programa y otro para la implementación de nuestros métodos, esto para tener una programación estructurada y entendible.

Comencemos con el include de las variables globales y elementos del sistema, nuestro include se llamará ZFTP0001_top, el cual ingresaremos en la línea donde dice REPORT (en importante copiar la línea del REPORT antes de eliminarla para evitar problemas).

Una vez escrita la siguiente línea damos doble clic en el para crear el include.

Damos clic en la opción Si de la ventana que aparezca

Posterior le decimos que si deseamos grabar.

Y como es costumbre cada vez que se crea un elemento nuevo es necesario guardarlo en nuestro paquete correspondiente.

Damos clic en la opción guardar.

Ya una vez dentro de nuestro include, pegamos la línea del report que les dije que guardáramos; Ya que si no tiene esta línea el programa jamás funcionara y les mandara error al momento de querer activar el programa

Comenzamos declarando una estructura tal cual como se ve en la imagen.

Posteriormente declaramos las variables globales.

Continuamos con las constantes globales.

Tablas internas para el almacenamiento de la información.

Áreas de trabajo para el manejo de las tablas internas

Y por último la definición de nuestra clase, que será nuestro motor del programa para la buena ejecución del mismo.


*No hago mucho énfasis en cada línea de código que vemos en pantalla ya que cada línea se encuentra correctamente comentada, cualquier duda déjamela saber y con gusto los ayudo :smiley:

Una vez terminada esta parte del include procedemos a guardarlo, y de regresamo a nuestro report en el cual crearemos un nuevo include.

El cual este llamaremos zftp001_mimp, en el cual crearemos la implementación de nuestros métodos y unos que otro perform.

No olvidemos una vez creada la línea del include damos doble clic en el para crear el include y repetimos los pasos antes mencionados con el anterior include.

*Nota cuando se va a crear la implantación de métodos la sintaxis es la siguiente:

CLASS (nombre_de_la_clase) IMPLEMENTATION.
ENDCLASS.

Ya una vez dentro del nuevo include implementaremos de principio de cuenta el método encrypt, el cual como su nombre lo dice, encriptara la contraseña de nuestro servidor remoto para así poder tener una comunicación segura, aparte de que es requerimiento de que la contraseña viaje encriptada o si no, no se podrá hacer la comunicación vía FTP.

SOURCE = se establecera la contraseña con la cual tenemos acceso al servidor FTP
KEY = se estable la llave de encriptación se recomienda sea de 6 cifras
DESTINATION = se establece la variable en la cual va a recibir la contraseña encriptada
DSTLEN = se establece SAPFTA por mero protocolo

Implementación del método connect. Como lo dice su nombre hará la conexión al servidor FTP.

Al ultimo puse una pequeña validación, para que nos muestre un LOG de lo que vaya haciendo nuestro programa.

USER = usuario de nuestro servidor remoto
PASSWORD = se le pasa el password encriptado del método anterior
HOST = se establece la IP de nuestro servidor FTP ‘192.168.90.88’ por ejemplo
RFC_DESTINATION = simpre será SAPFTPA
HANDLE = se establece el manejador devuelto por la misma función el cual indispensable para poder cerrar sesión y envió de comandos.

Este método de lo que se encargará será del envió de nuestros comandos FTP a nuestro servidor.

HANDLE = manejador que obtuvimos del método anterior
COMMANDS = la lista de comando que deseamos ejecutar
DATA = aquí se guardará el resultado de la ejecución de nuestros comandos FTP

Método que finalizara la sesión.

HANDLE = manejador que traemos desde la ejecución del segundo método.

Este método llamado append. Lo usaremos para agregar la lista de comandos a nuestra tabla interna.


Y por último en este INCLUDE agregaremos este PERFORM el cual nos servirá para escribir un pequeño los de nuestras ejecuciones

Lista una vez terminamos lo guardamos y volvemos al principio.

Por ultimo ingresaremos las líneas que tenemos dentro del START-OF-SELECTION y el END-OF-SELECTION

En el cual básicamente estamos mandando llamar a nuestros métodos, así como un loop a la tabla que devuelve la ejecución de nuestros comandos FTP para ver el resultado de nuestra conexión FTP.

Y listo para terminar procedemos con la siguiente secuencia:

Si todo se hizo correctamente veremos el siguiente resultado:

Programa realizado con éxito.

Espero haya sido de su agrado, y de verdad cualquier duda o comentario déjenmelo saber.

Anexo código fuente
https://github.com/SidVal/ABAP/tree/master/codigos/conexion-ftp-desde-abap-poo

Saludos.

24 Me gusta

3 posts fueron trasladados a un nuevo tema: FTP desde ABAP: al ejecutar solo envía 5 de 10

Hola @Alvan1 iba a ver el código que subiste pero me sale caido.
Si es solo código te recomiendo https://gist.github.com (si no quieres crear un repositorio)

1 me gusta

Listo, ahi va el nuevo link:
https://github.com/SidVal/ABAP/tree/master/codigos/conexion-ftp-desde-abap-poo

Saludos colegas.

1 me gusta

Amigos actualizacion del programa FTP:

h_tps://1drv.ms/u/s!Am3VlK1yh9m523Qj5NdvT-NWkRwV

Saludos.

3 Me gusta

Bárbaro, gracias por avisar. Actualicé también el código en el repositorio :thumbsup:

2 Me gusta

Hola que tal soy nuevo en ABAP y me gustaría saber si existe una forma de indicarle el puerto por el que se conecte al servidor FTP?

3 publicaciones han sido separadas a un nuevo tema: Error en FTP_Connection

Hola, alguien sabe que metodo utilizar para subir un archivo xml al servidor en una ruta especificada?