Error al intentar acceder a propiedades de oError

Error al intentar acceder a propiedades de oError

Postby damosi » Thu Aug 30, 2007 12:11 pm

Saludos :D,
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)
damosi
 
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Postby Antonio Linares » Thu Aug 30, 2007 1:39 pm

Prueba a cambiarlo así:

cMsgErr:=MultiLang("Error:")+ If( ! Empty( oError:Description ), oError:Description, "" )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42151
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby damosi » Thu Aug 30, 2007 3:38 pm

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
damosi
 
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Postby damosi » Thu Aug 30, 2007 3:39 pm

Perdón mi versión de harbour

Harbour Alpha build 45.0 Intl. (Flex)
damosi
 
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Postby Antonio Linares » Thu Aug 30, 2007 5:11 pm

Modifica el código así para comprobarlo:

cMsgErr:=MultiLang("Error:")+ oError:ClassName()
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42151
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby damosi » Thu Aug 30, 2007 5:30 pm

Probado, pero mismo resultado,
¿como comprobar si una variable esta definida?
damosi
 
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Postby Antonio Linares » Thu Aug 30, 2007 7:17 pm

Que valor te devuelve oError:ClassName() ? "nil" ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42151
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Thu Aug 30, 2007 7:18 pm

> ¿como comprobar si una variable esta definida?

Type( "nombre_variable" ) == "U"

Ojo: el nombre de la variable entre comillas!
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42151
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error al intentar acceder a propiedades de oError

Postby metaldrummer » Thu Aug 30, 2007 10:23 pm

damosi wrote:Saludos :D,
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)


Y si Intentas con esto?
Code: Select all  Expand view  RUN
TRY
   if &(Alltrim(bevalexp))
      lfiltrar:=.T.
   endif
CATCH oError
   cResult:="E"
   cMsgErr:=MultiLang("Error:")+oError:Description
   MensajeXML(cResult,cMsgErr,"",cContent,"")
   RETURN
END


Saludos
David Lagos S.
Coquimbo-Chile
User avatar
metaldrummer
 
Posts: 113
Joined: Wed Jan 10, 2007 8:43 pm
Location: Coquimbo-Chile

Postby damosi » Fri Aug 31, 2007 8:00 am

Gracias David,

no compila da error de sintaxis creo que try catch solo funciona en xharbour.
damosi
 
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Postby damosi » Fri Aug 31, 2007 8:46 am

Antonio perdona, me salte tu último post, :lol:
he probado lo que me dijiste y me deja aun más desconcertado pues me devuleve "O" o sea que efectivamente es un objeto.
damosi
 
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Postby Antonio Linares » Fri Aug 31, 2007 9:28 am

Entonces prueba:

cMsgErr:=MultiLang("Error:")+ oError:ClassName()

y veamos cual es la clase del objeto
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42151
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby damosi » Fri Aug 31, 2007 9:40 am

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:

Code: Select all  Expand view  RUN
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)


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?
damosi
 
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Postby Antonio Linares » Fri Aug 31, 2007 11:14 am

> Error BASE/1449 Syntax error: &

Eso parece un error en una macro
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42151
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby damosi » Fri Aug 31, 2007 11:23 am

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)
damosi
 
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 41 guests