Página 1 de 1

TOleauto - Componente instalado ?

Publicado: Sab Sep 09, 2023 6:06 pm
por Claudio C
Estimados:
Me conecto a un servicio de factura electronica. Lo hago mediante:
oWSAA:=TOleAuto():New("WSAA")

Todo funciona ok, Pero necesito chequear si el componente esta instalado en el equipo (para capturar el error cuando este en produccion la aplicacion).

Si instancio un componente inexistente, por ejemplo:
oWSAA:=TOleAuto():New("WS???AA")

no hay, TRY CATCH , ON ERROR (de la clase) o errorhandler que capture el hecho de que el componente no existe.
No encontre cual podria ser la variable de instancia del objeto Ole enn cada caso
Ole.png
Ole.png (15.02 KiB) Visto 1504 veces
En un viejo post encontré: "Empty( oOle:__hObj ) devuelve .T. si no se ha podido instanciar."
Pero tampoco funcionó ( este post es de la era en que xailer estaba en xHarbour)

Cualquier ayuda, link o pista sera bienvenido.
Claudio

Re: TOleauto - Componente instalado ? [fin]

Publicado: Lun Sep 11, 2023 3:20 pm
por Claudio C
Me respondo a mi mismo. Quizá a alguien le sirva.
ToleAuto no tiene método o propiedad que indique si el objeto instanciado se vinculó o no a una dll registrada en la PC ( o al menos yo no pude encontrarlo )
Lo que sí pude hacer es una solicitud al objeto a manipular, (luego de crear el ole). Ahí sí, cuando el objeto ole es válido, funciona y si no se instanció, entra al catch.
CatchOle 2023-09-11 100936.png
CatchOle 2023-09-11 100936.png (20.54 KiB) Visto 1482 veces
La línea que produce el 'catch' es:
ok := ::oWSAA:ObtenerTagXml('test') donde instancio un metodo del objeto ole

Muy primitivo pero, aparentemente, funciona.

NOTA: sobre el área izquierda, el debug muestra el mensaje exacto de lo que pasa ¿ Puede capturarse ese mensaje?

Re: TOleauto - Componente instalado ?

Publicado: Lun Sep 11, 2023 4:07 pm
por ignacio

Código: Seleccionar todo

TRY
  ....
  lOk := .t.
CATCH
  lOk := .f.
END
Saludo

Re: TOleauto - Componente instalado ?

Publicado: Lun Sep 11, 2023 8:05 pm
por jfgimenez
Claudio,

el comando CATCH puede recibir un objeto error:

Código: Seleccionar todo

LOCAL oError
...
TRY
   ...
CATCH oError
   MsgError( oError:Description )
END