8 de noviembre de 2014

Automatizando Visual FoxPro

Así como podemos controlar otras aplicaciones desde Visual FoxPro mediante automatización, también podemos controlar Visual FoxPro desde otras aplicaciones utilizando a VFP como un servidor de automatización.

Existen muchos escritos sobre como automatizar aplicaciones como Excel, Word, Outlook, etc. desde Visual FoxPro como cliente de automatización, pero quizás algo que muchos desconozcan, es que Visual FoxPro también es un servidor de automatización. ¿Que quiero decir con esto?. Que cualquier aplicación que permita automatización puede crear una instancia de Visual FoxPro y ejecutar comandos de Visual FoxPro.

Comenzar con lo conocido

Para comenzar utilizaremos a Visual FoxPro como cliente, como lo hicimos ya muchas veces, y crearemos una nueva instancia de Visual FoxPro con la siguiente sentencia:
loVFP = CREATEOBJECT("VisualFoxPro.Application")
Una vez creado el objeto Application de Visual FoxPro, con la ayuda de IntelliSense, una ventana emergente nos mostrará las Propiedades y los Métodos de este objeto al escribir lo siguiente:
loVFP.    
Si en la PC tenemos instaldas mas de una versión de Visual FoxPro, podemos especificar cual versión vamos a instanciar, como lo muestra el siguiente código:
*-- Visual FoxPro 9.0
loVFPx = CREATEOBJECT("VisualFoxPro.Application.9")
? loVFPx.Version
loVFPx.Quit

*-- Visual FoxPro 8.0
loVFPx = CREATEOBJECT("VisualFoxPro.Application.8")
? loVFPx.Version
loVFPx.Quit

*-- Visual FoxPro 7.0
loVFPx = CREATEOBJECT("VisualFoxPro.Application.7")
? loVFPx.Version
loVFPx.Quit

*-- Visual FoxPro 6.0
loVFPx = CREATEOBJECT("VisualFoxPro.Application.6")
? loVFPx.Version
loVFPx.Quit

Conocer los métodos y las propiedades

Algunos de los métodos disponibles del objeto Application de Visual Fox y que podemos ejecutar son:
  • DoCmd
Ejecuta un comando de Visual FoxPro para la instancia de la aplicación Visual FoxPro.
loVFP.DoCmd("USE (HOME(2)+'Northwind\Customers')")
  • Eval
Evalua y retorna el resultado de una expresión en la instancia de la aplicación Visual FoxPro.
? loVFP.Eval("CompanyName")
  • SetVar
Crea una variable y le asigna un valor en la instancia de la aplicación Visual FoxPro.
loVFP.SetVar("lcNombre","PortalFox")
? loVFP.Eval("lcNombre")
  • RequestData
Retorna una matriz que contiene los datos de una tabla abierta en la instancia de la aplicación Visual FoxPro.
laArray = loVFP.RequestData("Customers",2)
DISPLAY MEMORY LIKE laArray
  • DataToClip
Copia como texto al portapapeles un conjunto de registros de una tabla abierta en la instancia de la aplicación Visual FoxPro.
loVFP.DataToClip("Customers",2,3)
? ClipText
  • Quit
Finaliza la instancia de la aplicación Visual FoxPro.
loVFP.Quit
Algunas de la propiedades del objeto Application de VFP y que podemos consultar o modificar son:
? loVFP.Version 
? loVFP.StartMode
loVFP.Caption = "Instanciado de otra aplicacion"
loVFP.Visible = .T.
La variable del sistema _VFP hace referencia al objeto aplicación de la instancia actual de Visual FoxPro, y podemos ejecutar sus métodos y modificar sus propiedades:
_VFP.Caption = "Instancia Actual de VFP"
_VFP.DoCmd("_Screen.BackColor = RGB(255,255,192)")
? _VFP.Version

Instanciando Visual FoxPro desde Excel

El siguiente ejemplo, nos muestra como podemos crear una instancia de Visual FoxPor desde Excel, abrir una tabla, e importar sus datos en una hoja de Excel.

Copie el siguiente código escrito en VBA (Visual Basic for Applications), insertelo en un módulo de Excel y ejecutelo:

Sub ImportarDeVFP()
   Dim loVFP As Object, lnReg As Integer
   Set loVFP = CreateObject("VisualFoxPro.Application")
   loVFP.DoCmd ("OPEN DATABASE (HOME(2)+'Northwind\Northwind')")
   loVFP.DoCmd ("SELECT * FROM Customers INTO CURSOR MiCursor")
   lnReg = loVFP.DataToClip("MiCursor", , 3)
   Range("A1").Select
   ActiveSheet.Paste
   Cells.Select
   Cells.EntireColumn.AutoFit
   loVFP.Quit
   Set loVFP = Nothing
   MsgBox (lnReg & " Registros copiados")
End Sub

Para terminar

Con este último ejemplo podemos ver que a veces es mas simple programar otra aplicación para controlar a Visual FoxPro y obtener datos, que hacerlo todo desde Visual FoxPro. Uds. verán el camino a tomar para dar solución a los requerimientos de los usuarios.

Hasta la próxima.

Luis María Guayán

1 comentario :

  1. Es posible tener acceso a las propiedades y métodos de una aplicación vfp desde otra aplicación vfp?, por ejemplo, cambiar el título de un formulario de la aplicación1 desde la aplicación2

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.