martes, 22 de marzo de 2011

FTP en Batch desde el AS400

Este es un ejemplo de programa por lotes para realizar un FTP desde el Iseries a un servidor Windows NT y “jalar” un archivo para procesarlo en el sistema.

Con el servicio FTP no solo podemos pasar o recoger archivos sino también programas, fuentes, archivos de salvar, etc.

Si vamos a hacerlo de manera batch es necesario saber lo que el proceso hizo en su ejecución, así como revisamos en el spool los archivos QPJOBLOG de los procesos batcheros, los procesos que realizan FTP por lotes también generan estos logs.

El servicio FTP reconoce 2 archivos al momento de ejecutar comandos FTP, el archivo INPUT y OUTPUT (opcional).

El primero contiene las instrucciones para el logeo del usuario (usuario, clave), comandos de direccionamiento (cd, lcd), tipo de transferencia (binaria, ascii, ebcdic, etc) y los comandos de recojo de información (get, put), Asi como también comandos administrativos (ls, del, mkdir, etc).

El segundo archivo (OUTPUT) contiene la información de Log, esta información es muy relevante para analizar posibles fallas en la de transmisión.

Ambos archivos se crean como fuentes de tipo texto, en cualquier archivo fuente. Yo he creado QFTPSRC para contener el archivo INPUT, en mi ejemplo recibirá el nombre del archivo que deseo “bajar” y QFTPLOG para contener el archivo OUTPUT y tendrá el mismo nombre del primero.

Si se especifica una alteración temporal para INPUT o OUTPUT (o para ambos), FTP ejecuta en modalidad por lotes y no presenta la sesión interactiva.

Fuente de comandos FTP - QFTPSRC/FILEPC

Columnas  . . :    1  80                                  
 SEU==>                                                     
        *************** Principio de datos *****************
0001.00 USUARIO  CLAVE                                     
0002.00 lcd milibreria                                     
0003.00 cd carpeta_raiz                                   
0004.00 cd subcarpeta                                      
0005.00 get archivo_texto.txt  FILEPC                      
0007.00 quit                                               
        ****************** Fin de datos ********************

Fuente de LOG FTP - QFTPLOG/FILEPC

Columnas  . . :    1  80                                      Edición         
 SEU==>                                                                         
        *************** Principio de datos *************************************
0001.00 Lectura de entrada del archivo de la alteración temporal especificado. 
0002.00 Conectando con el sistema principal SERVIDOR en la dirección 1.5.10.151
0003.00  utilizando el puerto 21.                                              
0004.00 220 Microsoft FTP Service                                              
0005.00 Entre el ID de inicio de sesión (MIUSUARIO):                           
0006.00 331 Password required for MIUSUARIO.                                   
0007.00 230 User MIUSUARIO logged in.                                          
0008.00 Windows_NT                                                              
0009.00 Entre un submandato FTP.                                               
0010.00 > lcd milibreria                                                       
0011.00 El directorio de trabajo local es MILIBRERIA                           
0012.00 Entre un submandato FTP.                                               
0013.00 > cd carpeta_raiz                                                      
0014.00 250 CWD command successful.                                            
0015.00 Entre un submandato FTP.                                               
0016.00 > cd subcarpeta                                                        
0017.00 250 CWD command successful.                                            
0018.00 Entre un submandato FTP.                                               
0019.00 > get archivo_texto.txt  FILEPC                                        
0020.00 200 PORT subcommand request successful.                                
0021.00 150 Retrieving file archivo_texto.txt.                                 
0022.00 250 File transfer completed successfully.                              
0023.00    529 bytes transferidos en 0.325 segundos. Velocidad de transferencia
0024.00 1.627 KB/seg.                                                
0025.00 Entre un submandato FTP.                                     
0026.00 > quit                                                       
0027.00 221                                                           
        ****************** Fin de datos ******************************


Importante:
-       En el log el servicio ftp devuelto códigos de respuesta, en el ejemplo (pintado de verde) es el mensaje que mas debes monitorear cuando revisas el log del ftp.
-       Si el archivo se encuentra en un directorio diferente a la ruta que indicas en los comandos CD, la trasmisión no será exitosa.
-       Es necesario analizar cada mensaje que muestre el log del ftp. Por ejemplo:

250  Now using naming format "1".    
Indica el formato de denominación de archivo FTP.
AS/400 FTP soporta dos formatos de denominación. Estos formatos de denominación se identifican con 0 y 1. Se describen del modo siguiente:                                                        
0 - Un formato de denominación sólo para los archivos de base de datos del sistema de archivos de biblioteca. Indica al AS/400 cliente y servidor que los nombres de los archivos están en el formato de denominación de archivos FTP original (utilizado por las versiones anteriores a V3R1 de FTP).

GET  MILIBRERIA.LIB/QRPGLESRC.FILE/MIFUENTES.MBR   (REPLACE

1 - Un formato de denominación para todos los sistemas de archivos soportados por FTP. Indica al AS/400 cliente y servidor que los nombres de los archivos se ajustan al convenio de denominación de vía de acceso (introducido en V3R1). 

GET MILIBRERIA/QRPGLESRC.MIFUENTE (REPLACE 


             PGM                                                            

   /* Borra archivo si existe */                
             DLTF       FILE(MILIBRERIA/FILEPC)                                         
                                    
   /* Crea o Limpia Miembros para LOG Ftp */
   /* se limpia para mantener el LOG de la ultima */
   /* transmission del archivo */

                                                                             
             CLRPFM    FILE(MILIBRERIA/QFTPLOG) MBR(FILEPC)                   
             MONMSG    MSGID(CPF3141) EXEC(ADDPFM +                        
                       FILE(MILIBRERIA/QFTPLOG) MBR(FILEPC))                   

             CHGCURLIB  CURLIB(MILIBRERIA)                                  
                                                                           
   /* FTP Archivo al AS400 */                        
                                                                            
             OVRDBF     FILE(INPUT)  TOFILE(MILIBRERIA/QFTPSRC) MBR(FILEPC)   
             OVRDBF     FILE(OUTPUT) TOFILE(MILIBRERIA/QFTPLOG) MBR(FILEPC)   
             FTP        RMTSYS(SERVIDOR)                                       
             DLTOVR     FILE(INPUT OUTPUT)                                 
                                                                           
   /* Chequea si recibio archivo de Servidor */                      
                                                                           
             CHKOBJ     OBJ(MILIBRERIA/FILEPC) OBJTYPE(*FILE)             
             MONMSG     MSGID(CPF9801) EXEC(SNDUSRMSG MSG('ERROR, +
                          ARCHIVO NO SE ENCUENTRA EN SERVIDOR') +  
                          MSGTYPE(*INFO) TOMSGQ(QSYSOPR))              
                                                                           
             ENDPGM                                                     

Para asegurarnos que en el momento de ejecutar el FTP se encuentren los servicio TCP/FTP levantados, debemos incluir en el CL lo siguiente:

            STRTCP                                                 
            MONMSG     MSGID(CPF0000)                              
            STRTCPSVR  SERVER(*FTP)                                
            MONMSG     MSGID(CPF0000)                              
            OVRDBF     FILE(INPUT) TOFILE(LIBMCP/QFTPSRC) +        
                         MBR(FILEPC)                                 
            OVRDBF     FILE(OUTPUT) TOFILE(LIBMCP/QFTPLOG) +       
                         MBR(FILEPC)                                 
            FTP        RMTSYS(SERVIDOR)                           
            DLTOVR     FILE(INPUT OUTPUT)                          
   

No hay comentarios:

Publicar un comentario