Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

Sunday, April 26, 2009

Monitoreo de Errores en RPG (4/4)



Uso del Monitor group





Continuamos con el monitoreo de errores en RPG.

Este es el útimo articulo de una serie de cuatro.Si no has leído los anteriores posiblemente no se te facilite seguir el contenido de esta entrega.

En la versión V5R1 se introduce un Monitor Group: esto te permite monitorear un conjuntos de instrucciones con errores potenciales, en contraposición al chequeo individual de cada una de ellas. Por otra parte es posible monitorear instrucciones que no permite codigo extendido (E).
El concepto funciona similar a un grupo SELECT, y tiene las siguiente estructura:

Comienza el monitoreo con la palabra clave: MONITOR
Monitor

Conjunto de instrucciones en RPG ha se monitoreadas
C READ archivo
C IF
C ...
C Eval a = b(j)+ 4
C ...
C Etc...

// comienza el monitoreo

On-Error codigoerror1 : codigoerror2 :codigoerror3;
// realizar accion

On-Error *FILE;
// realizar accion

On-Error *PROGRAM;
// realizar accion

On-Error *ALL;
// realizar accion
EndMon;

El siguiente Ejemplo ilustra el uso de Monitor Group:

C MONITOR
C READ ARCHIVO
C IF NOT %EOF
C EVAL Texto = %SUBST(Texto(i) :
C %SCAN('-': Texto(i)) + 3)
C ENDIF

C ON-ERROR 1211
C ... mensaje de error archivo no abierto

C ON-ERROR *FILE
C ... mensaje de error al operar archivo (cualquier error)

C ON-ERROR 00100 : 00121
C ... Error al manipular el indice de un arreglo

C ON-ERROR
C ... Otros errores no contemplados en lo ON-ERROR previos

C ENDMON



Un monitor group trabaja de la siguiente forma:

-EL conjunto de instrucciones a ser monitoreadas se delimita con las palabras
Claves: MONITOR y ENDMON

-Dentro del bloque MONITOR-ENDMON se incluyen todas las instrucciones que desean monitorearse para manejar los errores de excepción.

-Luego del conjunto de instrucciónes a ser monitoreadas se incluyen un conjunto de instrucciones ON-ERROR con el código de error adecuado que deseas monitorear.

Puedes especificar además del código de error las palabras reservadas:

*FILE: para cualquier error sobre una operación I/O de un archivo
*PROGRAM: para cualquier error de excepción en el programa
*ALL: cualquier error de archivo o programa


-Si no ha ocurrido ningún error, el programa continua ejecutando la siguiente sentencia luego del ENDMON.

-Si un error ha sido detectado, el control se pasa a la operación ON-ERROR correspondiente dentro del Monitor Group funcionando igual que el bloque de instrucciones de un SELECT.

-Si se encuentra un ON_ERROR que haga match con el código de error que se ha presentado, se ejecutan las instrucciones especificadas en el ON_ERROR, sino se encuentra, el programa continua con el monitoreo de errores que se haya aplicado por defecto si es que existe. (INFDS, INFSR, (E), etc)

-Los Monitor Group pueden ser anidados.

Cabe destacar que cuando utilizamos INFSR, *PSSR si las rutinas de control de errores no son invocadas explicitamente con un EXSR, el programa no proseguirá con la siguiente sentencia en la que debería ejecutarse luego de monitorear el error y debemos usar GOTO (o algun artificio que provoque el salto a la rutina que deseamos). Con el Monitor Group, el programa continúa con la siguiente sentencia luego del ENDMON.

Otro ejemplo:

FARCHIVO1 UF E K Disk UsrOpn
F......................KINFDS(DSARC)

D SDS
DPgm_Stat *Status

DDSARC DS
CFil_stat *Status

/Free

Monitor;

c = a/b;
Chain Codigo ARCHIVO1;

On-Error 01211;
Dsply 'Intento de Leer un archivo cerrado';

On-Error 00102: 00907
Dsply 'División por cero!';

On-Error *FILE;
Dsply 'Error en operación sobre archivo';

(On-Error *ALL;
Dsply 'Algo pasó';
ExSR *PSSR;

EndMon;
*InLR = *On;
/End-Free


Podemos observar que:

-El código de error que se desea monitorear es colocado en el MONITOR GROUP
Si un error ocurre, el control es pasado al ON-ERROR que haga matching con el código de error que se produjo.
-Si el archivo no está abierto, o una división por cero sucede, un mensaje se mostrará y se procede a continuar con la instrucción siguiente el ENDMON
-Si hay un error específico de archivo o de programa no monitoreado en ON_ERROR la rutina *PSSR es ejecutada.


Si te pareció interesante, reenvialo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.


Autor:  Ing. Liliana Suárez

No comments: