Esto lo puedes hacer usando la opción 54 desde la pantalla Trabajar con Miembros utilizando PDM y pulsando F13 para procesar toda la lista de fuentes, pero sería de manera interactiva y tendríamos que pulsar Enter a cada momento. Es necesario hacerlo de manera Batch si es que se tratan de muchos fuentes.
Para comparar las versiones de fuentes (ya sean programas, archivos, etc.) de dos librerías diferentes utilizamos el comando CMPPFM desde un programa CL y monitoreamos los mensajes del sistema.
1.- Generamos en archivo la lista de miembros del archivo fuente que vamos a comparar con la librería de producción
DSPFD FILE(MILIBRERIA/QRPGLESRC) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(MILIBRERIA/FUENTES)
2.- Generamos 2 archivos idénticos al anterior para depositar en ellos los fuentes diferentes y los fuentes que no existan en alguna de las 2 librerías.
CRTDUPOBJ OBJ(FUENTES) FROMLIB(JUANVASQ1) OBJTYPE(*FILE) NEWOBJ(DIFERENTES)
CRTDUPOBJ OBJ(FUENTES) FROMLIB(JUANVASQ1) OBJTYPE(*FILE) NEWOBJ(NOEXISTEN)
3.- Procesamos la lista de fuentes y comparamos los fuentes con el comando CMPPFM. Al haber una diferencia el sistema envía un mensaje informativo de código SPC6002 el cual lo “capturamos” y evaluamos para grabar en el archivo DIFERENTES.
4.- Monitoreamos los mensaje de excepción y los evaluamos para controlar los fuentes que no existan (Lo grabamos en archivo NO EXISTEN)
Aquí el fuente del programa.
PGM PARM(&LIBDESA &SRCDESA &LIBPROD &SRCPROD) DCL VAR(&LIBDESA) TYPE(*CHAR) LEN(10) DCL VAR(&SRCDESA) TYPE(*CHAR) LEN(10) DCL VAR(&LIBPROD) TYPE(*CHAR) LEN(10) DCL VAR(&SRCPROD) TYPE(*CHAR) LEN(10) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCLF FILE(QTEMP/FUENTES) DLTF FILE(QTEMP/FUENTES) MONMSG MSGID(CPF2105) DSPFD FILE(&LIBDESA/&SRCDESA) TYPE(*MBRLIST) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/FUENTES) CRTDUPOBJ OBJ(FUENTES) FROMLIB(QTEMP) OBJTYPE(*FILE) + TOLIB(&LIBDESA) NEWOBJ(DIFERENTES) CRTDUPOBJ OBJ(FUENTES) FROMLIB(QTEMP) OBJTYPE(*FILE) + TOLIB(&LIBDESA) NEWOBJ(NOEXISTEN) LOOP: /* Lee Archivo que contiene la lista de Fuentes */ RCVF MONMSG MSGID(CPF0864) EXEC(RETURN) /* Compara fuentes de ambas librerias */ CMPPFM NEWFILE(&MLLIB/&MLFILE) NEWMBR(&MLNAME) + OLDFILE(&LIBPROD/&SRCPROD) + OLDMBR(&MLNAME) OUTPUT(*OUTFILE) + OUTFILE(QTEMP/SALIDA) MONMSG MSGID(SPC5003 SPC5005 SPC5010 SPC5034) RCVMSG MSGTYPE(*LAST) MSGID(&MSGID) /* Si no encuentra fuente en alguna libreria */ IF COND(&MSGID *EQ 'SPC5003' *OR &MSGID *EQ + 'SPC5005' *OR &MSGID *EQ 'SPC5010' *OR + &MSGID *EQ 'SPC5034') THEN(CPYF + FROMFILE(QTEMP/FUENTES) + TOFILE(&LIBDESA/NOEXISTEN) MBROPT(*ADD) + INCREL((*IF MLNAME *EQ &MLNAME))) /* Si encuentra diferencia copia el registro */ /* a archivo de diferencias */ IF COND(&MSGID *EQ 'SPC6002') THEN(CPYF + FROMFILE(QTEMP/FUENTES) + TOFILE(&LIBDESA/DIFERENTES) MBROPT(*ADD) + INCREL((*IF MLNAME *EQ &MLNAME))) GOTO CMDLBL(LOOP) ENDPGM |
Parámetros:
LIBDESA – Librería de desarrollo
SRCDESA – Archivo fuente de desarrollo
LIBPROD – Librería de Producción
SRCPROD – Archivo fuente de Producción
CALL MILIBRERIA/COMPARA PARM(‘MILIBRERIA’ ‘QRPGLESRC’ ‘PRODUCCION’ ‘QRPGLESRC’)
Nota: Para la compilación del programa, previamente, crear el archivo FUENTES, luego puede ser eliminado.
Si queremos saber que fuentes son idénticos, solo bastará crear un archivo que contenga los fuentes similares. Monitoreamos el códigos de mensaje SPC6001 y grabamos al archivo el registro.
No hay comentarios:
Publicar un comentario