Gestión de errores WebFOCUS

125 views
Skip to first unread message

Mikel Gómez

unread,
Oct 4, 2006, 10:11:37 AM10/4/06
to Foros focus
Ahí va... Un pequeño módulo de ejemplo de gestión de errores WebFOCUS.
Preparado para colocar como -INCLUDE tras informes, mantenimientos u
otros puntos estratégicos de procedimientos WebFOCUS...

-* pfmikerr.fex - 2006.05.25 - Mikel Gómez - Gestión de errores.
-* _____________________________________________________________________
-* Módulo..........: PFMIKERR
-* Versión.........: 2.01 - 2006.05.25 (1.0 - 2003.06.06)
-* Autor...........: Mikel Gómez
-* Descripción.....: Gestión general de errores.
-* Comentarios.....: Utilización como -INCLUDE en puntos estratégicos.
-* Tablas..........: No.
-* Parámetros......: Se tratan las variables (opcionales):
-* ................: &MODULO - Módulo de llamada.
-* ................: &ERROR - Código de error.
-* ................: &MENSAJE - Mensaje de error o de salida.
-* ................: &MENSAJE1..5 - Otros mensajes de salida.
-* ................:
-* ................: Y las variables de sistema:
-* ................: &FOCERRNUM - Código de error FOCUS.
-* ................: &RETCODE - Código retorno S.O. o S.G.B.D.
-* ................: &LINES - Líneas de salida.
-* ................: &RECORDS - Registros leídos.
-* ................:
-* ................: Variables de salida:
-* ................: &ERROR - Código de error (0 = no error)
-* ................: &MENSAJE1..5 - Mensajes de salida.
-* ................: Fichero MENSAJES previamente asignado.
-* ................:
-* Actualizaciones.:
-* 2006.00.00 - Mikel - Añadido FEXERR.
-* 2006.05.25 - Mikel - Revisión general.
-* 2006.05.25 - Mikel - Eliminación de particularidades de aplicación.
-* _____________________________________________________________________

-MIKERRINI
-TYPE PFMIKERR - Control de errores.

-* Obtención de valores de variables relacionadas con errores.
-DEFAULT &WRETCODE = '&RETCODE.EVAL' ;
-DEFAULT &WFOCERRNUM = '&FOCERRNUM.EVAL' ;
-DEFAULT &WLINES = '&LINES.EVAL' ;
-DEFAULT &WRECORDS = '&RECORDS.EVAL' ;
-DEFAULT &REGISTROS = 5000 ;

-* Visualización de códigos de error.
-TYPE PFMIKERR - &|RETCODE..........: &WRETCODE
-TYPE PFMIKERR - &|FOCERRNUM........: &WFOCERRNUM
-TYPE PFMIKERR - &|LINES............: &WLINES
-TYPE PFMIKERR - &|RECORDS..........: &WRECORDS

-* Variables de entrada.
-* &FOCFOCEXEC incluye un p.guión bajo al principio en muchas versiones.
-DEFAULT &MODULO = ' ' ;
-SET &MODULO = IF &MODULO EQ ' ' THEN &FOCFOCEXEC.EVAL ELSE &MODULO ;

-* Variables de entrada/salida.
-DEFAULT &ERROR = ' ' ;
-DEFAULT &MENSAJE = ' ' ;
-DEFAULT &MENSAJE1 = ' ' ;
-DEFAULT &MENSAJE2 = ' ' ;
-DEFAULT &MENSAJE3 = ' ' ;
-DEFAULT &MENSAJE4 = ' ' ;
-DEFAULT &MENSAJE5 = ' ' ;

-* Discriminación de tipo de error.
-* Atención: &RETCODE=1|2 no necesariamente implica error.
-* Atención: Depend. de aplicación &FOCERROR antes/después de &RETCODE.

-SET ERRTIP =
- IF &ERROR NE ' ' THEN 'APL' ELSE
- IF &MENSAJE NE ' ' THEN 'APL' ELSE
- IF &WFOCERRNUM EQ 9 THEN 'FOC' ELSE
- IF &WRETCODE GT 2 THEN 'SIS' ELSE
- IF &WRETCODE LT -1 THEN 'SIS' ELSE
- IF &WFOCERRNUM NE 0 THEN 'FOC' ELSE
- IF &WLINES EQ 0 THEN 'TAB' ELSE
- IF &REGISTROS NE 0 AND
- &WRECORDS GE &REGISTROS THEN 'REG' ELSE
- ' ' ;
-* Si no se ha detectado existencia de errores, no se hace nada más.
-IF &ERRTIP EQ ' ' THEN GOTO MIKERRSAL ;

-SET &ERRDES = DECODE &ERRTIP (
- 'APL' 'Error de aplicación.'
- 'SIS' 'Error de sistema.'
- 'FOC' 'Error WebFOCUS.'
- 'TAB' 'Error en petición de datos.'
- 'REG' 'Demasiada información solicitada.'
- ELSE ' ')

-* Redirección en función del tipo de error.
-TYPE PFMIKERR - Tipo de error.....: &ERRTIP - &ERRDES
-GOTO MIKERR&ERRTIP.EVAL

-* _____________________________________________________________________
-* _____________________________________________________________________
-* Tratamiento de los distintos tipos de error.

-* _____________________________________________________________________
-* Error o mensaje controlado de aplicación.

-MIKERRAPL
-* Se supone que en este caso...
-* las variables de errores ya vienen con valores.
-GOTO MIKERRSAL

-* _____________________________________________________________________
-* Error FOCUS.

-MIKERRFOC
-SET &ERROR = 'ERRMIK' | &WFOCERRNUM ;
-SET &MENSAJE1 = 'ERROR WEB FOCUS' ;
-SET &MENSAJE2 = 'Código de error ' | &WFOCERRNUM ;
-SET &MENSAJE3 = FEXERR(&WFOCERRNUM, 'A72') ;
-SET &MENSAJE4 = 'Producido en el módulo ' | &MODULO ;
-SET &MENSAJE5 = 'Consulte con el administrador del sistema' ;
-GOTO MIKERRSAL

-* _____________________________________________________________________
-* Error de sistema o DB2.

-MIKERRSIS
-SET &WRETCODE = LJUST(&WRETCODE.LENGTH, &WRETCODE, &WRETCODE) ;
-SET &WRETCODE = TRUNCATE(&WRETCODE) ;
-SET &ERROR = DECODE &WRETCODE (
- '8' 'ERRMIKRC8'
- '-204' 'ERRMIKRC204'
- '-551' 'ERRMIKRC551'
- '-803' 'ERRMIKRC803'
- '-922' 'ERRMIKRC922'
- '15925333' 'ERRMIKRC15925333'
- '15925334' 'ERRMIKRC15925334'
- '15925266' 'ERRMIKRC15925266'
- ELSE 'ERRMIKDB&WRETCODE.EVAL' ) ;

-SET &MENSAJE1 = DECODE &WRETCODE (
- '8' 'Error en acceso a datos'
- '-204' 'Tabla no encontrada.'
- '-551' 'Usuario no autorizado a tabla.'
- '-803' 'Clave duplicada.'
- '-922' 'WebFOCUS no autorizado a plan.'
- '15925333' 'Conexión a DB2 no disponible.'
- '15925334' 'Acceso a DB2 no disponible.'
- '15925266' 'Conexión DB2 incorrecta.'
- ELSE 'Error en acceso a datos.') ;

-SET &MENSAJE2 = 'Código de retorno ' | &WRETCODE ;
-SET &MENSAJE3 = 'Producido en el módulo ' | &MODULO ;
-SET &MENSAJE5 = 'Consulte con el administrador del sistema.' ;
-GOTO MIKERRSAL

-* _____________________________________________________________________
-* Salida de informe no disponible.

-MIKERRTAB
-SET &ERROR = 'ERRMIK01' ;
-SET &MENSAJE1 = 'INFORME SIN DATOS.' ;
-SET &MENSAJE2 = ' ' ;
-SET &MENSAJE3 = 'No existen datos para la selección realizada.' ;
-SET &MENSAJE4 = ' ' ;
-GOTO MIKERRSAL

-* _____________________________________________________________________
-* Salida de informe no disponible.

-MIKERRREG
-SET &ERROR = 'ERRMIK02' ;
-SET &MENSAJE1 = 'Se ha solicitado demasiada información.' ;
-SET &MENSAJE2 = ' ' ;
-SET &MENSAJE3 = 'Afine un poco más los filtros de selección.' ;
-SET &MENSAJE4 = ' ' ;

-* _____________________________________________________________________
-* _____________________________________________________________________
-* Salida de mensajes.

-MIKERRSAL
-IF &ERROR EQ ' ' THEN GOTO MIKERRFIN ;

-* Asignación lógica de fichero de salida de mensajes.
FILEDEF ERRORES DISK errores.htm
-RUN

-TYPE PFMIKERR - ...................
-TYPE PFMIKERR - Código error......: &ERROR

-* Bucle de lectura de mensajes y escritura/visualización.
-SET &I = 0 ;
-REPEAT MIKERRSALBUC 5 TIMES
-SET &I = &I + 1 ;
-TYPE PFMIKERR - Mensaje &I ........: &MENSAJE.&I
-WRITE ERRORES &MENSAJE <br/>
-MIKERRSALBUC

-* HTMLFORM ERRORES
-* _____________________________________________________________________

-MIKERRFIN

-* Eliminación de variables de trabajo iniciales.
-SET &WRETCODE = ;
-SET &WFOCERRNUM = ;
-SET &WLINES = ;
-SET &WRECORDS = ;

pfmikerr.fex
Reply all
Reply to author
Forward
0 new messages