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