| Categoría : Programación
Autor : Jose Manuel Berrio
Título : Compilar todos los miembros de cualquier
archivo (QRPGSRC, QRPGLESRC, QCLSRC, ...) utilizando
ciclos
Descripción del truco:
El siguiente programa CLLE realiza lo siguiente:
1. Declara un archivo y le asigna un indicador de
apertura.
DCLF FILE(XXLIBRERIA/MIEMBRORPG) OPNID(AR1) 2. Declara variables para trabajar con el archivo
3. Declara las variables generales si se desea enviar
mensajes informativos al usuario. 4. Recupera en nombre del usuario que ejecuta el
proceso. 5. Chequea que exista el archivo declarado en el
paso 1. XXLIBRERIA/MIEMBRORPG.
Si existe lo borra y lo crea de nuevo sino va al
TAG CREAR y lo crea con el comando DSPFD. 6. Valida si el Archivo XXLIBRERIA/MIEMBRORPG tiene
registros con una de las variables declaradas para
trabajar con el archivo, así:
RTVMBRD FILE(XXLIBRERIA/MIEMBRORPG) NBRCURRCD(®ISTROS)
7. Si la variable ®ISTROS es igual Cero(0)
el archivo no tiene registros y va al final del programa
así:
IF COND(®ISTROS *EQ 0) THEN(GOTO CMDLBL(FINAL)) 8. Si la variable ®ISTROS NO es igual Cero(0)
el archivo SI tiene registros y los lee todos utilizando
un ciclo así: /* Leer un registro del Archivo */
RCVF OPNID(AR1) 9. Se monitorea la lectura de los registros del
archivo así:
MONMSG MSGID(CPF0864) EXEC(CHGVAR VAR(&EOF) VALUE(\'1\')) a la Variable &EOF se le asigna el valor de
\'1\' cuando se lea el ULTIMO registro del archivo
y se termina el ciclo que recorre todos los registros
del archivo XXLIBRERIA/MIEMBRORPG) identificado como
OPNID(AR1) 10. El ciclo se realiza así:
DOWHILE COND(&EOF = \'0\')
la variable &EOF controla el fin de archivo.
Notas: -El comando SNDMSG Enviar un mensaje al usuario
indicándole cual programa se va a compilar - En la instrucción:
IF COND(&PRIM *EQ \'RC\' *OR &PRIM *EQ \'RV\'
*OR &PRIM *EQ \'RM\') THEN(DO) se valida se compile
solo aquellos programas que empiecen con las letras
RC. RV ó RM. - En caso de que los programas a compilar sean RPG
o RPGLE y si los programas a compilar sean módulos
se compilan con el comando CRTRPGMOD, sino se compilan
con el comando CRTBNDRPG.
PGM /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + *PROGRAMA: Crea archivo con miembros del archivo Fuente + * y los COMPILA. + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/ /* Declara el archivo y le asigna un indicador de
apertura */
DCLF FILE(XXLIBRERIA/MIEMBRORPG) OPNID(AR1) /* Declara variables para trabajar con el archivo
*/
DCL VAR(®ISTROS) TYPE(*DEC) LEN(10 0) VALUE(0)
DCL VAR(&MLNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&EOF) TYPE(*CHAR) LEN(1) VALUE(\'0\')
DCL VAR(&PRIM) TYPE(*CHAR) LEN(2) /* Declara las variables generales */
DCL VAR(&USUARIO) TYPE(*CHAR) LEN(10) /* Recupera en nombre del usuario que ejecuta el
proceso */
RTVJOBA USER(&USUARIO)
CHGCURLIB CURLIB(XXLIBRERIA) /* Chequea que exista el archivo XXLIBRERIA/MIEMBRORPG
*/
CHKOBJ OBJ(XXLIBRERIA/MIEMBRORPG) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(GOTO CMDLBL(CREAR)) /* Si existe lo borra y lo crea de nuevo sino va
al TAG CREAR y lo crea */
DLTF FILE(XXLIBRERIA/MIEMBRORPG)
MONMSG MSGID(CPF3220) CREAR:
/* Crea el archivo XXLIBRERIA/MIEMBRORPG con todos los programas RPGLE del+
archivo *CURLIB/QRPGLESRC para posteriormente recorrerlo y compilar +
todos los programas */
DSPFD FILE(*CURLIB/QRPGLESRC) TYPE(*MBRLIST) OUTPUT(*OUTFILE) +
OUTFILE(XXLIBRERIA/MIEMBRORPG) /* Compila Programas */
COMPILA:
/* Valida si el Archivo tiene registros */
RTVMBRD FILE(XXLIBRERIA/MIEMBRORPG) NBRCURRCD(®ISTROS)
IF COND(®ISTROS *EQ 0) THEN(GOTO CMDLBL(FINAL)) /* Leer un registro del Archivo */
RCVF OPNID(AR1)
MONMSG MSGID(CPF0864) EXEC(CHGVAR VAR(&EOF) VALUE(\'1\')) DOWHILE COND(&EOF = \'0\') CHGVAR VAR(&PRIM) VALUE(%SST(&AR1_MLNAME
1 2))
IF COND(&PRIM *EQ \'RC\' *OR &PRIM *EQ \'RV\' *OR &PRIM *EQ \'RM\')
THEN(DO) /* Enviar un mensaje de cual programa se va a compilar
*/
SNDMSG MSG(\'Miembro [ \' *CAT &AR1_MLNAME *CAT \' ] Leído +
para compilar\') TOUSR(&USUARIO) +
MSGTYPE(*INFO) /* Compila el Miembro leído del archivo */ /* SI es un Modulo se compila así: */
CRTRPGMOD MODULE(*CURLIB/&AR1_MLNAME) SRCFILE(*CURLIB/QRPGLESRC)
MONMSG MSGID(CPF0000) /* SI es un Programa normal se compila así:
*/
CRTBNDRPG PGM(XXLIBRERIA/AR1_MLNAME) SRCFILE(*CURLIB/QRPGLESRC) MONMSG MSGID(CPF0000)
ENDDO
/* Leer otro registro del Archivo */
RCVF OPNID(AR1)
MONMSG MSGID(CPF0864) EXEC(CHGVAR VAR(&EOF) VALUE(\'1\')) ENDDO
DLTF FILE(XXLIBRERIA/MIEMBRORPG) FINAL:
ENDPGM
Ver
código fuente CL
Fecha 21-07-2005 Tienes algún truco que quieras compartir con todos
los profesionales de Recursos iSeries i5 AS400?. Envianoslo
y si resulta seleccionado te enviaremos un vale de
Amazon por valor de 50$
|