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.

Friday, April 24, 2009

Monitoreo de Errores en RPG: Código de operación extendido. (2/4)









Anteriormente vimos como monitorear errores sobre la operación de un archivo utilizando indicadores de error y una estructura definida con la palabra clave INFDS.

Los indicadores de error no solo se utilizan para monitorear operaciones sobre archivos hay otras operaciones que también admiten monitoreo de error. La tabla de errores de esas operaciones (que no son sobre un archivo) es distinta y requiere el uso de una estructura de datos denominada PSDS que en un artículo previo la aplicamos para determinar quien estaba bloqueando el registro de un archivo. No en este artículo pero si en uno posterior se extenderá la explicación del uso de la estructura PSDS.

Las operaciones en RPG que permiten indicadores de error también permiten un código de operación extendido, utilizando una parámetro ‘E’. La operación CALLP también permite un extensor ‘E’ aunque no permite asociar un indicador de error. Esto provee dos métodos en ILE RPG para manipular errores a tiempo de ejecución. Para una misma operación se utiliza o un indicador de error o un extensor ‘E’ pero no ambos. Es decir, se puede utilizar esto:

RECORDKEY CHAIN(E) FILEREC 90

O esto:

RECORDKEY CHAIN FILEREC 9091

Si un indicador de error ‘E’ es especificado en una operación pero el error que ocurre no está relacionado directamente con la operación (por ejemplo un índice fuera de rango en un arreglo o matriz), cualquier indicador de error o extensor ‘E’ será ignorado. El error debe ser tratado como un error de programa con un PSDS como veremos en el siguiente artículo.

Para habilitar el manejo de indicadores de error, debes especificar un indicador en las posiciones 73-74 para los siguientes códigos de operación. (Excepto para el CALLP)

Tabla de operaciones que admiten código extendido.

ACQ (e) | ADDDUR (e) | ALLOC (e) |CALL (e)
-----------------------------------------------------------
CALLB(d e) | CALLP (e m/r)1 |CHAIN (e n) |CHECK (e)
-----------------------------------------------------------
CHECKR (e) | CLOSE (e) |COMMIT (e) |DEALLOC(e/n)
------------------------------------------------------------
DELETE (e) | DSPLY (e) |EXFMT (e) |EXTRCT (e)
------------------------------------------------------------
FEOD (e) | IN (e) |NEXT (e) |OCCUR (e)
------------------------------------------------------------
OPEN (e) | OUT (e) |POST (e) |READ (e n)
------------------------------------------------------------
READC (e) | READE (e n) |READP (e n) |READPE (e n)
------------------------------------------------------------
REALLOC (e) | REL (e) |RESET (e) |ROLBK (e)
------------------------------------------------------------
SCAN (e) | SETGT (e) |SETLL (e) |SUBDUR (e)
-------------------------------------------------------------
SUBST (e p) | TEST (e d/t/z) |UNLOCK (e) |UPDATE (e)
-------------------------------------------------------------
WRITE (e) | XLATE (e p)
-------------------------------------------------------------


Utilizando indicadores, si ocurre un error en la instrucción el indicador es colocado en ON, la estructura de datos apropiada (PSDS ó INFDS) es actualizada y se prosigue con la siguiente instrucción del programa. Puedes preguntar por el indicador para determinar cual acción tomar, como fue explicado en el articulo anterior de esta serie de monitoreo de errores.

Las nuevas File Built-in Functions en RPG 4, sustituyen la necesidad de realizar declaraciones de las Estructuras de Datos INFDS y PSDS en el programa.

¿Qué hace el parámetro ‘E’?
– Coloca el %ERROR en off
– Si ocurre un error en la instrucción coloca en ON el %ERROR y continúa con la próxima instrucción

Observa que no se utilizan indicadores.

C ClienteKey Chain(E) Cliente
C if %ERROR
C Select
C When %STATUS = 1221
C exsr Update-sin-read-previo
C When %STATUS = 1218
C exsr Registro-bloqueado
C endSL
C ELSE
C if %FOUND( Clientes )
C exsr Loquesea
C endif
C endif


Los códigos de error, (para este ejemplo: 1221 y 1218) no han variado en RPG 4, son los mismos códigos contenidos en la lista de monitoreo de errores para operaciones sobre archivos que se utilizaban en RPG III.


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: