Error al intentar acceder a propiedades de oError

damosi
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Error al intentar acceder a propiedades de oError

Post by damosi »

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)
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Prueba a cambiarlo así:

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

Antonio Linares
www.fivetechsoft.com
damosi
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Post by damosi »

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

Post by damosi »

Perdón mi versión de harbour

Harbour Alpha build 45.0 Intl. (Flex)
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Modifica el código así para comprobarlo:

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

Antonio Linares
www.fivetechsoft.com
damosi
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Post by damosi »

Probado, pero mismo resultado,
¿como comprobar si una variable esta definida?
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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

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

Post by Antonio Linares »

> ¿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
metaldrummer
Posts: 113
Joined: Wed Jan 10, 2007 8:43 pm
Location: Coquimbo-Chile
Contact:

Re: Error al intentar acceder a propiedades de oError

Post by metaldrummer »

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

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

Post by damosi »

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

Post by damosi »

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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Entonces prueba:

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

y veamos cual es la clase del objeto
regards, saludos

Antonio Linares
www.fivetechsoft.com
damosi
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Post by damosi »

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

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?
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

> Error BASE/1449 Syntax error: &

Eso parece un error en una macro
regards, saludos

Antonio Linares
www.fivetechsoft.com
damosi
Posts: 35
Joined: Mon Jan 15, 2007 10:46 am

Post by damosi »

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)
Post Reply