Está en la página 1de 9

http://iseriesvenezuela.blogspot.com.

Utilidad prototipo para cambiar el código fuente en forma automática


http://iseriesvenezuela.blogspot.com

Prototipo. Utilidad para reemplazar en forma masiva un string por otro en uno o varios
fuentes RPG/CLP/RPGLE.

Este prototipo es adaptable a incorporar compilaciones masivas, o inclusiones de rutinas


o llamados a rutinas de uso común entre varios programas. Se presenta este breve
prototipo a fin de clarificar varias preguntas que he recibido sobre “como es posible
modificar el código fuente de uno o varios programas desarrollando otro programa que
realice esta actualización”
El prototipo está inconcluso en algunas de sus partes para que el analista lo complete o
no según sus necesidades.

Autora: Liliana Suárez. E-mail: rpg.iseries@gmail.com


http://iseriesvenezuela.blogspot.com.
Utilidad prototipo para cambiar el código fuente en forma automática
Este prototipo está compuesto por dos programas. Un programa tipo CLP que presenta
la pantalla que el analista debe llenar de acuerdo con la definición de librerías y
archivos que serán tomadas en cuenta en el proceso. Un programa RPG que realiza las
actualizaciones de los fuentes.
La pantalla es la siguiente.

SRCPF de los miembros a cambiar: se refiere al archivo de fuentes: QRPGSRC,


QCLSRC, etc. Donde residen los programas fuentes que serán actualizados.
Librería del SRCPF se refiere a la librería que contiene el SRCPF explicado
anteriormente.

Archivo trabajo-Lista Miembros: se refiere al nombre de un archivo de salida que el


analista debe darle a la aplicación para que ésta pueda descargar data intermedia
requerida para generar el proceso de actualización. Puede ser cualquier nombre.

Librería de trabajo: La librería donde reside el archivo anteriormente especificado por


el analista.

Generar/refrescar lista de miembros: El proceso puede ejecutarse varias veces sobre el


mismo srcpf. En cada ejecución el número de fuentes puede variar. Pueden haber
nuevos programas fuentes, entonces la lista de miembros generada en la ejecución
anterior estaría desactualizada para este nuevo proceso. El analista en este caso debe
colocar ‘S’, es decir el proceso volvera a calcular la lista de fuentes a procesar. Ser
recomienda colocar ‘S’ por omisión.

Autora: Liliana Suárez. E-mail: rpg.iseries@gmail.com


http://iseriesvenezuela.blogspot.com.
Utilidad prototipo para cambiar el código fuente en forma automática
Interactivo/Batch: se coloca ‘I’ para interactivo y ‘B’ para batch. La utility por ahora
solo procesa Interactivo. Puede el analista copiar el mismo proceso y someterlo
agregando las instrucciones en el programa CLP que se requieran.

Miembro a convertir: Se rellena este campo con el nombre del fuente a modificar si se
va a procesar solamente un fuente. Si es un conjunto de fuentes del archivo SRCPF
(qrpgsrc, etc) entonces se deja en blanco este campo.

Texto viejo: coloque el texto que será reemplazado en el proceso (por ejemplo, la
palabra HOLA)

Texto nuevo: coloque el texto nuevo que será colocado en el lugar del texto viejo. (Por
ejemplo, la palabra CHAO)

Al terminar de ejecutarse el proceso, todos los fuentes donde existía la palabra


‘HOLA’ ahora tendrán la palabra ‘CHAO’

Pueden descargar el CLP, LA PANTALLA y el RPG en el siguiente enlace:

http://www.megaupload.com/?d=771NS5R4

Puede observarse un botón de “GRABAR” que aunque esta creado, no está operativo.
Actualmente el proceso se ejecuta y actualiza sin necesidad de presionar el botón
GRABAR.

Si el analista considera necesario generar una versión de prueba que no actualice los
fuentes sino que genere un listado o archivo de salida para verificar como sería la
actualización antes de realizarla efectivamente, puede condicionar la actualización de
los fuentes a presionar el Botón GRABAR y el ENTER a la ejecución de prueba.

Autora: Liliana Suárez. E-mail: rpg.iseries@gmail.com


http://iseriesvenezuela.blogspot.com.
Utilidad prototipo para cambiar el código fuente en forma automática

Se transcribe el código fuente de la utilidad a continuación a manera de conservar


La versión original sin cambios.

PROGRAM CLP – CLREPLACE

PGM
/*STRING A SUSTITUR = ANTES, STRING NUEVO = DESPUES */
DCL VAR(&ANTES) TYPE(*CHAR) LEN(10)
DCL VAR(&DESPUES) TYPE(*CHAR) LEN(10)

/*ARCHIVO DONDE ESTA LA LISTA DE FUENTES DE UN SRCPF */


DCL VAR(&LISFTES) TYPE(*CHAR) LEN(10) +
VALUE(' ')
/*LIBRERIA DE TRABAJO */
DCL VAR(&WRKLIB) TYPE(*CHAR) LEN(10) +
VALUE(' ')
/*SRCPF DONDE RESIDEN LOS FUENTES A CAMBIAR */
DCL VAR(&FUENTES) TYPE(*CHAR) LEN(10) +
VALUE(' ')
/*LIBRERIA DONDE ESTA EL SRCPF DE LOS FUENTES A CAMBIAR*/
DCL VAR(&LIBFTES) TYPE(*CHAR) LEN(10) +
VALUE(' ')
/*PARA OVERRIDE*/
DCL VAR(&ARCHIVO) TYPE(*CHAR) LEN(10) +
VALUE('ARCHIVO')
DCL VAR(&LISTAMBR) TYPE(*CHAR) LEN(10) +
VALUE('LISTAMBR')
/*ARCHIVO DE PANTALLA*/
DCLF FILE(*LIBL/DSPREPLAC) OPNID(PANT)
/*ARCHIVO DE LISTA DE FUENTES DE UN SRCPF */
DCLF FILE(LISTAMBR) OPNID(LISTA)

/*PROGRAMA PRINCIPAL */

PANTALLA:
SNDRCVF RCDFMT(WIN01) OPNID(PANT)

IF COND(&PANT_SALIR *EQ 1 ) THEN(DO)


GOTO FINAL
ENDDO
/*VALIDA LA PANTALLA */
CHGVAR VAR( &PANT_DSP_ERROR) VALUE(' ')
/* VALIDA LA LIBRERIA DE TRABAJO*/
IF COND(&PANT_WRKLIB *EQ ' ') THEN(DO)
CHGVAR VAR(&PANT_DSP_ERROR) VALUE('COLOQUE la librer¡a +
de Trabajo')
GOTO PANTALLA
ENDDO
CHKOBJ OBJ(&PANT_WRKLIB) OBJTYPE(*LIB)

Autora: Liliana Suárez. E-mail: rpg.iseries@gmail.com


http://iseriesvenezuela.blogspot.com.
Utilidad prototipo para cambiar el código fuente en forma automática
MONMSG MSGID(CPF9801) EXEC(DO)
CHGVAR VAR(&PANT_DSP_ERROR) VALUE('NO existe la librer¡a +
de Trabajo')
GOTO PANTALLA
ENDDO
/* VALIDA LA LIBRERIA DE FUENTES*/
IF COND(&PANT_LIBFTES *EQ ' ') THEN(DO)
CHGVAR VAR(&PANT_DSP_ERROR) VALUE('COLOQUE la librer¡a +
de FUENTES')
GOTO PANTALLA
ENDDO
IF COND(&PANT_FUENTES *EQ ' ') THEN(DO)
CHGVAR VAR(&PANT_DSP_ERROR) VALUE('COLOQUE EL SRCPF
+
FUENTES')
GOTO PANTALLA
ENDDO
CHKOBJ OBJ(&PANT_LIBFTES) OBJTYPE(*LIB)
MONMSG MSGID(CPF9801) EXEC(DO)
CHGVAR VAR(&PANT_DSP_ERROR) VALUE('NO existe la +
librer¡a DE LOS FUENTES')
GOTO PANTALLA
ENDDO
/* VALIDA QUE EXISTE EL SRCPF*/
CHKOBJ OBJ(&PANT_LIBFTES/&PANT_FUENTES)
OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(DO)
CHGVAR VAR(&PANT_DSP_ERROR) VALUE('NO existe EL SRCPF +
DE LOS FUENTES')
GOTO PANTALLA
ENDDO
/* VALIDA LA LIBRERIA DE FUENTES*/
IF COND(&PANT_LISFTES *EQ ' ') THEN(DO)
CHGVAR VAR(&PANT_DSP_ERROR) VALUE('COLOQUE la librer¡a +
de LISTA DE FUENTES')
GOTO PANTALLA
ENDDO
/* SI SE TRATA DE UN SOLO MIEMBRO*/
/* VALIDA QUE EXISTE SU FUENTE */
IF COND(&PANT_MBR *NE ' ') THEN(DO)
CHKOBJ OBJ(&PANT_LIBFTES/&PANT_FUENTES) +
OBJTYPE(*FILE) MBR(&PANT_MBR)
MONMSG MSGID(CPF9801) EXEC(DO)
CHGVAR VAR(&PANT_DSP_ERROR) VALUE('NO existe EL +
MIEMBRO A CONVERTIR')
GOTO PANTALLA
ENDDO
ENDDO

Autora: Liliana Suárez. E-mail: rpg.iseries@gmail.com


http://iseriesvenezuela.blogspot.com.
Utilidad prototipo para cambiar el código fuente en forma automática

/* INTERACTIVO */
IF COND(&PANT_PROCES = 'I') THEN(DO)
CHKOBJ OBJ(QTEMP/ARCHIVO) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(CRTSRCPF +
FILE(QTEMP/ARCHIVO) RCDLEN(112) MBR(ARCHIVO))
/*APLICA SOLO PARA UN FUENTE */
IF COND(&PANT_MBR *NE ' ') THEN(DO)
OVRDBF FILE(&ARCHIVO)
TOFILE(&PANT_LIBFTES/&PANT_FUENTES) +
MBR(&PANT_MBR)
CALL PGM(RPGREPLAC) PARM(&PANT_ANTES
&PANT_DESPUES)
ENDDO

/*APLICA PARA UNA LISTA DE FUENTES*/


IF COND(&PANT_MBR = ' ') THEN(DO)
CHKOBJ OBJ(&PANT_WRKLIB/&PANT_LISFTES) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(DSPFD +
FILE(&PANT_LIBFTES/&PANT_FUENTES) TYPE(*MBRLIST) +
OUTPUT(*OUTFILE)
OUTFILE(&PANT_WRKLIB/&PANT_LISFTES))

IF COND(&PANT_GENLIS = 'S') THEN(DO)


DSPFD FILE(&PANT_LIBFTES/&PANT_FUENTES) +
TYPE(*MBRLIST) OUTPUT(*OUTFILE) +
OUTFILE(&PANT_WRKLIB/&PANT_LISFTES) +
OUTMBR(*FIRST *REPLACE)
ENDDO

OVRDBF FILE(LISTAMBR) +
TOFILE(&PANT_WRKLIB/&PANT_LISFTES) +
MBR(*FIRST)
LEE:

RCVF OPNID(LISTA)
MONMSG MSGID(CPF0864) EXEC(GOTO FINAL)
OVRDBF FILE(&ARCHIVO) +
TOFILE(&LISTA_MLLIB/&LISTA_MLFILE) +
MBR(&LISTA_MLNAME)
CALL PGM(RPGREPLAC) PARM(&PANT_ANTES
&PANT_DESPUES)
GOTO LEE
ENDDO

ENDDO

Autora: Liliana Suárez. E-mail: rpg.iseries@gmail.com


http://iseriesvenezuela.blogspot.com.
Utilidad prototipo para cambiar el código fuente en forma automática
FINAL: ENDPGM

ARCHIVO DE PANTALLA DEL PROGRAMA CLREPLACE (DSPREPLAC)

A*%%TS SD 20110307 171342 LILISU REL-V5R3M0 5722-WDS


A*%%EC
A DSPSIZ(24 80 *DS3)
A CF03(03 'SALIR')
A CF12(12 'CANCELAR')
*-------------------------------------------------------------------------
A R ASUME
A ALTNAME('Y')
A ASSUME
A 1 4' '
A R WIN01
A*%%TS SD 20110307 171342 LILISU REL-V5R3M0 5722-WDS
A WINDOW(3 6 19 55)
A RTNCSRLOC(*MOUSE &FIL &COL)
A OVERLAY
A WDWTITLE((*TEXT ' CONVERSION-REEMPL-
A ZAR') (*COLOR YLW) (*DSPATR RI) *LE-
A FT)
A FIL 3S 0H
A COL 3S 0H
A SALIR 2Y 0B 18 28PSHBTNFLD
A PSHBTNCHC(1 'SALIR')
A GRABR 2Y 0B 18 1PSHBTNFLD
A PSHBTNCHC(1 'GRABAR')
A DSP_ERROR 40A O 16 4DSPATR(HI)
A 2 11'Proceso de Conversi¢n-REEMPLAZO'
A DSPATR(HI)
A 8 3'Libreria de Trabajo:'
A DSPATR(HI)
A WRKLIB 10A B 8 37COMP(NE ' ')
A 7 3'Archivo trabajo- Lista Miembros:'
A DSPATR(HI)
A LISFTES 10A B 7 37COMP(NE ' ')
A 5 3'SRCPF de los miembros a cambiar:'
A DSPATR(HI)
A FUENTES 10A B 5 37COMP(NE ' ')
A 10 3'Interactivo/Batch (I/B).......:'
A DSPATR(HI)
A PROCES 1A B 10 37VALUES('B' 'I')
A 13 3'Texto Viejo....................:'
A DSPATR(HI)
A ANTES 10A B 13 37COMP(NE ' ')
A 14 3'Texto Nuevo....................:'
A DSPATR(HI)
A DESPUES 10A B 14 37COMP(NE ' ')
A 9 3'Generar/refrescar Lista Miembr?:'

Autora: Liliana Suárez. E-mail: rpg.iseries@gmail.com


http://iseriesvenezuela.blogspot.com.
Utilidad prototipo para cambiar el código fuente en forma automática
A DSPATR(HI)
A GENLIS 1A B 9 37VALUES('S' 'N')
A 6 3'Librer¡a del SRCPF.............:'
A DSPATR(HI)
A LIBFTES 10A B 6 37COMP(NE ' ')
A 11 3'Miembro a convertir............:'
A DSPATR(HI)
A MBR 10A B 11 37

PROGRAMA RPG (RPGREPLAC)

× * Aplicaci¢n. . . : Sistema de Facturacion y cobranzas * Ä


× * Versi¢n . . . . : 1.0 * Ä
× * Programa. . . . : RPGREPLACE * Ä
× * Fecha . . . . . . 06/03/2011 * Ä
× * Autor(es) . . . : LilianaSuarez - * Ä
× * Descripci¢n . . : Utilidad que reemplaza en un fuente, un * Ä
× * string por otro * Ä
× *
× * Historial de Modificaciones:
× *
× *----------+-------+---------------+-------------------
× * Fecha | SR ¥ | Programmer | Description
× *-------------------------------------------------------
× * mm/dd/yy
× *-----------------------------------------------------
À h
/if defined(*crtbndrpg)
À h DftActgrp(*no)
À h bnddir('QSYS/QC2LE')
À h actgrp(*new)
/EndIf
À hDebug Option(*SRCSTMT:*NODEBUGIO)
À hDatFmt (*ISO)
À hDftName(CLI072)
À hTimFmt(*HMS)
À hAut(*all)
À hFixNbr(*zoned)
À hText(*srcmbrtxt)
À hDecEdit('0,') DatEdit(*dmy/)
À hCopyRight('Liliana Suarez')
× *
× **************************************************************
farchivo uf e disk rename(archivo:Rutil)
× *
× *
d Pos s 3 0
× *
× *
d RPGREPLAC pr

Autora: Liliana Suárez. E-mail: rpg.iseries@gmail.com


http://iseriesvenezuela.blogspot.com.
Utilidad prototipo para cambiar el código fuente en forma automática
d Santes 10
d Sdespues 10
× *
d RPGREPLAC pi
d Santes 10
d Sdespues 10

/free
× //---------------------------------------------------
× // Proceso Principal
× //---------------------------------------------------
read rutil;

Dow not %eof() ;


Pos = %scan(%trim(Santes):srcdta:1);
If Pos <> *zeros ;
srcdta= %replace(%trim(Sdespues):Srcdta:Pos);
update rutil;
Endif;
read rutil;
Enddo;

*Inlr = *ON;
/end-free

Hasta la próxima…

http://iseriesvenezuela.blogspot.com
Email: rpg.iseries@gmail.com

Autora: Liliana Suárez. E-mail: rpg.iseries@gmail.com

También podría gustarte