domingo, 9 de noviembre de 2014

Tratar ficheros de un servidor FTP en SAP

En este post os voy a explicar como podemos tratar ficheros que se encuentran almacenados en un servidor FTP.

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.
En el ejemplo voy a copiar los ficheros a través de la AL11. Un paso previo a la copia de los ficheros a nuestra red es que tengamos definida la ruta en SAP a través de la AL11 (Y tengamos los permisos pertinentes para poder hacerlo).

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 ).
* 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.

1 comentario:

Integración SAP

Cuando hablamos de SAP como sistema integrado que cubre toda la casuística de nuestro negocio estamos siendo bastante osados. Casi cualquier...