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:
Ejecuta un comando de Visual FoxPro para la instancia de la aplicación Visual FoxPro.
loVFP.DoCmd("USE (HOME(2)+'Northwind\Customers')")
Evalua y retorna el resultado de una expresión en la instancia de la aplicación Visual FoxPro.
? loVFP.Eval("CompanyName")
Crea una variable y le asigna un valor en la instancia de la aplicación Visual FoxPro.
loVFP.SetVar("lcNombre","PortalFox")
? loVFP.Eval("lcNombre")
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
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
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