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:
Post a Comment