utility rpg replace

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: [email protected]

Upload: lilisustar

Post on 30-Mar-2015

818 views

Category:

Documents


2 download

DESCRIPTION

Utilidad para reemplazar en forma masiva un string por otro en uno o varios fuentes RPG/CLP/RPGLE.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”

TRANSCRIPT

Page 1: Utility Rpg Replace

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: [email protected]

Page 2: Utility Rpg Replace

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: [email protected]

Page 3: Utility Rpg Replace

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: [email protected]

Page 4: Utility Rpg Replace

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: [email protected]

Page 5: Utility Rpg Replace

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: [email protected]

Page 6: Utility Rpg Replace

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: [email protected]

Page 7: Utility Rpg Replace

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: [email protected]

Page 8: Utility Rpg Replace

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: [email protected]

Page 9: Utility Rpg Replace

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.comEmail: [email protected]

Autora: Liliana Suárez. E-mail: [email protected]