Resumen VB y EXTRA   (2 mensajes )

Extra tiene un OLE Server que está muy bien y es fácil de usar. En la ayuda de Extra verás en 'Contenido' un ítem llamado 'Ayuda para la automatización OLE' donde encontrarás toda la teoría que se necesita para trabajar con EXTRA.

Para encontrar ejemplos, existe un truco: utilizar el grabador de macros de Extra para registrar varias operaciones de navegación por el host, y usar luego el Editor de Macros de Extra para ver el código que se ha generado. Este código es precisamente Extra Basic, y es perfectamente compatible con VB, hasta el punto de que si haces Copy Paste y lo insertas en un proyecto de VB funciona perfectamente.

Otra cosa: si quieres usar Extra en un proyecto VB, tendrás que referenciar el OLE Server de Extra en VB. Esto se hace vía menu: Proyecto - Referencias, marcando el elemento 'Attachmate Extra 6.2 Object Library' (la versión puede ser diferente). Una vez hecho esto, verás a través del examinador de objetos (F2) la librería EXTRA, con todos sus objetos y métodos.

Por último: Extra no soporta (hasta donde yo sé) la vinculación temprana, es decir, no te deja hacer

Dim x as EXTRA.ExtraSystem
Dim y as EXTRA.ExtraSession

Set x = New EXTRA.ExtraSystem
Set y = x.Sessions.Open("MiSesión.edp")

sino que tienes que declarar un objeto genérico

Dim x as Object
Dim y as Object
set x = CreateObject("Extra.System")
Set y = x.Sessions.Open("MiSesión.edp")

Esta segunda manera te impide usar la ayuda en línea de VB (la que te visualiza los métodos de un objeto al poner el punto), de modo que un truco es utilizar la primera sintaxis para disponer de la ayuda (mientras escribes código) y cambiar a la segunda para compilar y ejecutar.

Hace más de diez años que trabajo con HLLAPI (lo que había antes de EXTRA), de hecho tengo incluso una librería que permite acceder desde CLIPPER a las sesiones HLLAPI; por tanto creo que se algo de este tema y puedo decir que el OLE Server de EXTRA es un gran avance sobre las antiguas API; mucho más cómodo de usar y bastante fiable. De todos modos, programar el acceso a host es un tema bastante complejo, ya que al fin y al cabo dependes de un ordenador remoto que puede colgarse, temporizar, enviar cosas raras...

Mucha paciencia y buena suerte

Diego Buendía
Barcelona, Spain

Yo trabaje en banco Rio con VB y Extra para poder automatizar varias cargas de datos en una base AS/400. Todas las maquinas del banco tenian Extra asi que era lo ideal. La version con la que trabaje era la 6.3, sin embargo el help y el type library con el que venia (con el que hacia yo referencia en VB) era de la version 6.2 (no se porque), por lo que algunas funciones estaban mal documentadas y todo volaba por los aires (todo fue cuestion de prueba y error). El producto final fue bastante robusto igual.
Lo que dice Diego es verdad, el Extra no soporta early binding, declaraciones explícitas de objetos, sino late binding.
Aqui va un pequeñito código de esa epoca que desempolve y comente para que tengas un ejemplito:

'Dimensionas todo 'As Object' ----> Late binding
Dim OExtraSys As Object
Dim OSes As Object
Dim OScr As Object

'Creas un objeto session que vendria ser como el objeto Application cuando instancias word, excel, etc. desde VB
Set OExtraSys = CreateObject("EXTRA.System")

'Creas una sesion y la abris, pasando como parametro el path de un archivo .edp
'que especifica las caracteristicas de la misma; es el archivo que te crea cuando
'creas una session nueva y haces 'save as....' desde el menu file
Set OSes = OExtraSys.Sessions.Open("c:\program files\extra!\Sessions\Session2.edp")
'Seteas el time out en milisegundos (pasado este tiempo, si no recibió respuesta del host
'al hacerle algun requerimiento de informacion levanta un error.)
OExtraSys.TimeoutValue = 3000

'Creas una instancia de una pantalla comun del Extra dentro de la session para leer la informacion
Set OScr = OSes.Screen
OSes.Activate

'Podes trabajar con esta estando visible o no
OSes.Visible = True
Despues tenes los metodos del objeto Screen para trabajar con el texto de la pantalla

with OSes
    .PutString "texto", 5, 32 'inserta un cadena en una fila y columna especificada

    .MoveTo 5, 32 'mueve el cursor a una posicion determinada

    .SendKeys ("texto tipeado") 'emula el tipeo de teclas

    .SendKeys ("") ' las teclas especiales se ponen entre <..>

    .GetString(22, 2, 22) 'te devuelve un variant (ojo! no un string) conteniendo la cantidad de caracteres
    'especificados a partir de una fila y columna especificada

    .WaitForString("NRO.CUENTA INEXISTENTE", 22, 2) 'espera (como maximo lo que le pusiste en time out)
    'a que en una posicion determinada aparezca el string que le pasas. Es lo que mas vas a usar para saber
    'cuando te llego respuesta del host

end with


Bueno, espero que te sirva y mucha suerte....


Gustavo Ansaldi




Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com