Error al intentar acceder a propiedades de oError
Error al intentar acceder a propiedades de oError
Saludos ,
Estoy intentando capturar errores al evaluar expresiones (variable bvalexp), todo funciona ok salvo cuando intento mostrar o acceder al objeto oError para dar detalles de éste. Dado que este código se ejecuta en un programa CGI que interpreta archivos .hrb y devuelve el resultado como un fichero xml simplemente me llega error 502 y eso es porque no llega la respuesta XML simplemente, el XML no llega a generarse.
Sin embargo si quito el oError:Description el programa funciona como debe, es decir, cuando la expresión dada en bvalexp es incorrecta entra en el bloque de recuperación y si no no entra.
Gracias,
bManejadorerror:={ |oError| Break( oError ) }
...
bUltimoManejador:=ERRORBLOCK(bManejadorError)
BEGIN SEQUENCE
if &(Alltrim(bevalexp))
lfiltrar:=.T.
endif
RECOVER USING oError
cResult:="E"
cMsgErr:=MultiLang("Error:")+oError:Description
MensajeXML(cResult,cMsgErr,"",cContent,"")
RETURN
END SEQUENCE
ERRORBLOCK(bUltimoManejador)
Estoy intentando capturar errores al evaluar expresiones (variable bvalexp), todo funciona ok salvo cuando intento mostrar o acceder al objeto oError para dar detalles de éste. Dado que este código se ejecuta en un programa CGI que interpreta archivos .hrb y devuelve el resultado como un fichero xml simplemente me llega error 502 y eso es porque no llega la respuesta XML simplemente, el XML no llega a generarse.
Sin embargo si quito el oError:Description el programa funciona como debe, es decir, cuando la expresión dada en bvalexp es incorrecta entra en el bloque de recuperación y si no no entra.
Gracias,
bManejadorerror:={ |oError| Break( oError ) }
...
bUltimoManejador:=ERRORBLOCK(bManejadorError)
BEGIN SEQUENCE
if &(Alltrim(bevalexp))
lfiltrar:=.T.
endif
RECOVER USING oError
cResult:="E"
cMsgErr:=MultiLang("Error:")+oError:Description
MensajeXML(cResult,cMsgErr,"",cContent,"")
RETURN
END SEQUENCE
ERRORBLOCK(bUltimoManejador)
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Antonio gracias por contestar,
no funciona, he probado con otras propiedades como :Severity, y de otras maneras : Str(len(oError)) Valtype(oError) pero parece como si la variable que apunta al objeto no existiese.
He probado a declarar oError como variable local y como estatica pero ...igual no se me ocurren otras pruebas
no funciona, he probado con otras propiedades como :Severity, y de otras maneras : Str(len(oError)) Valtype(oError) pero parece como si la variable que apunta al objeto no existiese.
He probado a declarar oError como variable local y como estatica pero ...igual no se me ocurren otras pruebas
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- metaldrummer
- Posts: 113
- Joined: Wed Jan 10, 2007 8:43 pm
- Location: Coquimbo-Chile
- Contact:
Re: Error al intentar acceder a propiedades de oError
Y si Intentas con esto?damosi wrote:Saludos ,
Estoy intentando capturar errores al evaluar expresiones (variable bvalexp), todo funciona ok salvo cuando intento mostrar o acceder al objeto oError para dar detalles de éste. Dado que este código se ejecuta en un programa CGI que interpreta archivos .hrb y devuelve el resultado como un fichero xml simplemente me llega error 502 y eso es porque no llega la respuesta XML simplemente, el XML no llega a generarse.
Sin embargo si quito el oError:Description el programa funciona como debe, es decir, cuando la expresión dada en bvalexp es incorrecta entra en el bloque de recuperación y si no no entra.
Gracias,
bManejadorerror:={ |oError| Break( oError ) }
...
bUltimoManejador:=ERRORBLOCK(bManejadorError)
BEGIN SEQUENCE
if &(Alltrim(bevalexp))
lfiltrar:=.T.
endif
RECOVER USING oError
cResult:="E"
cMsgErr:=MultiLang("Error:")+oError:Description
MensajeXML(cResult,cMsgErr,"",cContent,"")
RETURN
END SEQUENCE
ERRORBLOCK(bUltimoManejador)
Code: Select all
TRY
if &(Alltrim(bevalexp))
lfiltrar:=.T.
endif
CATCH oError
cResult:="E"
cMsgErr:=MultiLang("Error:")+oError:Description
MensajeXML(cResult,cMsgErr,"",cContent,"")
RETURN
END
David Lagos S.
Coquimbo-Chile
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Antonio lo he probado, pero cualquier intento de acceder a
propiedades del objeto produce el error.
He realizado alguna prueba (forzando una expresión con error) quitando el manejador de errores y dejando que el intérprete de hrb (llamado clipxnet) lo maneje, la salida es esta:
Estoy pensando que quizás David Arturo Macias (autor de clipxnet) haya "tocado algo" para implementar su función de captura de errores, no lo se. por otro lado ¿es posible impedir la lectura de propiedades de un objeto?
propiedades del objeto produce el error.
He realizado alguna prueba (forzando una expresión con error) quitando el manejador de errores y dejando que el intérprete de hrb (llamado clipxnet) lo maneje, la salida es esta:
Code: Select all
Creacion de archivo, 20070831 11:32:21
********** FECHA: 20070831 11:32:21 Red: LWWB483 **********
Sistema: HClipxNet v0.99
Directorio: C:\Inetpub\wwwroot\
Disco: 59,939,790,848 RAM (KBytes): 125,644 DOS: Windows 2000 5.0.2195 Service Pack 4
Base: (5) CONGRES Fecha: 20070827 Reg: 3/40
Indice: (1) CODIGO
Error BASE/1449 Syntax error: &
Llamado por XMLFILTREPORTGEN(2088)
Llamado por CENTRO(451)
Llamado por MAIN(93)
Llamado por __HRBRUN(0)
Llamado por SGHRBRUN(1640)
Llamado por (b)SGBLOCK(2552)
Llamado por SGCGISCRIPT(1390)
Llamado por MAIN(601)
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Efectivamente, la línea 2088 es :
if &(Alltrim(bevalexp))
donde le paso una expresión a bevalexp que sé va a dar error, para que salte el manejador de errores.
La salida que pegue antes era la que daba clipxnet al capturar el error una vez comentadas las líneas:
//bUltimoManejador:=ERRORBLOCK(bManejadorError)
y
//ERRORBLOCK(bUltimoManejador)
if &(Alltrim(bevalexp))
donde le paso una expresión a bevalexp que sé va a dar error, para que salte el manejador de errores.
La salida que pegue antes era la que daba clipxnet al capturar el error una vez comentadas las líneas:
//bUltimoManejador:=ERRORBLOCK(bManejadorError)
y
//ERRORBLOCK(bUltimoManejador)