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 
STRLENl_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.

  
REFRESHmtab_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.

    
REFRESHmtab_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.

No hay comentarios:

Publicar un comentario