Documente Academic
Documente Profesional
Documente Cultură
Para averiguar ms sobre cmo construir aplicaciones distribuidas sobre HTTP ver
el artculo siguiente: Building distributed applications over HTTP with
wwIPStuff
Los clientes "gordos" vienen teniendo una mala fama como una tecnologa
obsoleta que no puede ser escalada. Mientras que esto puede ser cierto, es
tambin un hecho que la vasta mayora de las aplicaciones contina siendo
independientes o son aplicaciones de red que corren en mquinas cliente. Las
aplicaciones comerciales a menudo necesitan la flexibilidad que no pueden tener
sin un entorno de un cliente rico y la funcionalidad de base de datos que usa
funcionalidad local para proveer este entorno.
En este contexto, este artculo discute maneras para que puedas aprovechar las
tecnologas de Internet sin abandonar la flexibilidad y la funcionalidad a la que
ests acostumbrado con Visual FoxPro.
Mejorando las aplicaciones existentes.
El primer y ms sencillo paso para la integracin con Internet es la mejora de las
aplicaciones existentes agregando funcionalidades bsicas de Internet:
Shell API
Correo electrnico SMTP
FTP
Programacin bsica para acceso Web
La Shell API
FUNCTION ShellExec
LPARAMETER lcLink, lcAction, lcParms
lcAction = IIF(EMPTY(lcAction), "Open", lcAction)
lcParms = IIF(EMPTY(lcParms), "", lcParms)
DECLARE INTEGER ShellExecute ;
IN SHELL32.dll ;
INTEGER nWinHandle, ;
STRING cOperation, ;
STRING cFileName, ;
STRING cParameters, ;
STRING cDirectory, ;
INTEGER nShowWindow
DECLARE INTEGER FindWindow ;
IN WIN32API ;
STRING cNull,STRING cWinName
RETURN ShellExecute(FindWindow(0, _SCREEN.caption), ;
lcAction, lcLink, ;
lcParms, SYS(2023), 1)
y prueba los siguientes enlaces (ajusta el paso como sea necesario):
ShellExec("http://www.west-wind.com/")
ShellExec(ftp://ftp.west-wind.com/)
La primera de las instrucciones provoca que el cdigo HTML del sitio West Wind
se abra en tu editor HTML favorito (si tienes uno configurado), listo para la edicin.
El ltimo ejecuta Microsoft Word e imprime el documento solicitado.
Adicionalmente, la API hace fcil mostrar HTML en tus aplicaciones, ya sea desde
un archivo o una cadena de texto. He aqu una til y pequea funcin que usa
ShellExecute para mostrar un texto HTML en el explorador:
FUNCTION ShowHTML
LPARAMETERS lcHTML, lcFile, loWebBrowser
lcHTML = IIF(EMPTY(lcHTML), "", lcHTML)
lcFile = IIF(EMPTY(lcFile), SYS(2023) + "\_HTMLView.htm",lcFile)
STRTOFILE(lcHTML, lcFile)
IF VARTYPE(loWebBrowser) = "O"
*** Si se pas un objeto browser usarlo
*** en lugar de una ventana externa del browser
loWebBrowser.Navigate(lcFile)
ELSE
ShellExecute(lcFile)
ENDIF
RETURN
Puedes simplemente pasar cualquier cadena HTML a esta funcin y la interpretar
en el explorador que emerger abierto. Si tienes una instancia existente de un
objeto WebBrowser o de un objeto IE COM (ms sobre esto ms adelante),
puedes interpretar el HTML dentro de ese objeto en lugar de una ventana externa
controlada por ShellExecute.
Tambin puedes llamar a la interfase COM de la Shell API para acceder a toda
clase de interesantes funcionalidades de Windows:
o = CREATEOBJECT("Shell.Application")
o.Open("http://www.west-wind.com/")
*** Dispara en forma modal los dilogos Windows
o.SetTime()
o.FindFiles()
o.ShutDownWindows()
o.FileRun()
o.ControlPanelItem("Network")
"Open" trabaja prcticamente igual que un llamado a la ShellExecute API, slo que
siempre usa el verbo de accin Open. No hay una opcin Edit o Print, de manera
que tienes que usar ShellExecute para esas operaciones. No obstante, la Shell
API tambin incluye el acceso a la mayora de las operaciones del escritorio
Windowspero ten presente que todas estas operaciones requieren algn tipo de
intervencin del usuario. Estos mtodos muestra dilogos en los cuales el usuario
debe llenar informacin o pinchar sobre un botn para continuar. Qu tiene todo
esto que ver con Internet?. No muchopero puedes encontrar tiles estas
operaciones relacionadas.
Los protocolos Internet de wwIPStuff
Nota que SMTP es un protocolo basado en servidor, lo que significa que los
mensajes enviados a l estn presentados pero no necesariamente son
procesados inmediatamente. Esto significa que, aun si la llamada sincrnica
SendMail() retorna un cdigo de estado bueno, no hay garanta que el mensaje de
correo electrnico haya llegado realmente a su destinatario. La nica manera de
averiguar por una direccin de correo electrnico no vlida o por una casilla de
correo cerrada es el correo de retorno que arribar en tu propia casilla.
Transferencias FTP
Para trabajar alrededor de este problema, est FTPGetEx(), que soporta llamadas
a mtodos de evento que te permiten cancelar una descarga y manejar una
visualizacin de estado en pantalla. Para hacerlo, debes crear una subclase de
wwFTP o arrastrarla sobre un formulario para implementar el mtodo
OnFTPBufferUpdate(). El cdigo completo es similar a ste:
SET CLASSLIB TO wwIPStuff additive
SET PROCEDURE TO wwUtils additive
PUBLIC o
o = CREATEOBJECT("myFTP")
WAIT WINDOW NOWAIT "Alt-x to abort download..."
ON KEY LABEL ALT-X o.lCancelDownload = .T.
IF o.FTPConnect("ftp.west-wind.com") # 0
? o.nError
? o.cErrorMsg
RETURN
ENDIF
IF o.FtpGetFileEx("wconnect.zip","c: empwconnect.zip") # 0
? o.nError
? o.cErrorMsg
RETURN
ENDIF
ON KEY LABEL ALT-X
RETURN
DEFINE CLASS myFtp AS wwFTP
FUNCTION OnFTPBufferUpdate
LPARAMETER lnBytesDownloaded, lnBufferReads, lcCurrentChunk
DO CASE
CASE lnBufferReads > 0
WAIT WINDOW "Bytes read: " + TRANSFORM(lnBytesDownloaded) NOWAIT
*** DoEvents
*** Manejar eventos de la interfase de usuario como el click de un Botn Cancelar
CASE lnBufferReads = -1
WAIT WINDOW "Download aborted..." TIMEOUT 2
ENDCASE
RETURN
ENDDEFINE
Aqu estoy usando el comando Alt-X ON KEY LABEL para capturar una
cancelacin de la descarga definiendo la bandera del objeto FTP
lCancelDownload a .T. Cuando esta bandera es verdadera, el cdigo FTP termina
cuando el prximo bloque de datos est por ser aceptado.
USE www.west-wind.comd$webappswwdemoguest.dbf
Una vez que la conexin inicial se ha establecido y la tabla est abierta a travs de
ella, la operacin es razonablemente rpida pero depende del tamao del archivo
de datos. Si el ndice es pequeo y se usa cach local, las bsquedas pueden ser
muy rpidas. No obstante, si el ndice no es descargado completamente podrs
observar largas demoras a medida que VFP trae ms informacin del ndice para
efectuar la bsqueda. Sobre conexiones lentas, el indexado de VFP y la
optimizacin Rushmore que lo requiere puede convertirse en una desventaja al
requerir que sean descargados inicialmente ms datos que los necesarios.
Aqu puedes ver el problema con una herramienta de base de datos basada en
archivos como VFP lleva a cabo todo su procesamiento en el lado cliente, de
manera que cuando los datos estn en el lado servidor con una conexin lenta, el
cliente necesita traer toda la informacin necesaria para realizar las bsquedas y
obtener los datos requeridos. Esto puede requerir cantidades significativas de
datos localmente causando un incremento de trfico sobre la conexin de red. En
este escenario en que SQL Server realiza el procesamiento en el servidor y luego
retorna slo el resultado, es mucho ms eficiente. Analizar esto en la siguiente
seccin.
Otra cuestin relacionada es la seguridad de datos. Una vez que ests conectado
y la informacin se est transfiriendo sobre la conexin Internet, esos datos no
estn encriptados de ninguna manera. Esto significa que cualquiera con un
analizador de protocolo puede capturar los datos desde el cable.
Usando SQL Server sobre TCP/IP
Justamente como puedes acceder a archivos DBF sobre Internet tambin puedes
acceder a SQL Server de la misma manera. Si ests usando Microsoft SQL Server
puedes configurar ese servidor para usar TCP/IP como su protocolo de red (con
SQL Server 7.0 este es el protocolo por defecto SQL Server 6.5 usa Named
Pipes por defecto y mantendr esa configuracin si es actualizado a 7.0). Una vez
que hayas configurado el servidor con TCP/IP podrs conectarte al servidor como
sigue:
lnHandle = SQLSTRINGCONNECT(driver={SQL Server};server=www.west-
wind.com; + ;
database=Pubs;uid=sa;pwd=;)
SQLEXEC(lnHandle,SELECT * FROM Authors)
BROWSE
Esto tambin trabaja de acuerdo con lo esperado. No obstante, igualmente que
con el acceso directo a una tabla VFP la conexin puede tomar un largo tiempo.
Sobre la misma conexin de discado el tiempo de conexin al servidor es de
alrededor de 1 minuto. Una vez que est establecida la conexin, el SQL Server
remoto corre la consulta y luego retorna slo los resultados sobre Internet. En este
aspecto el acceso es muy eficiente y deberas poder correr consultas bastante
eficientemente aun con una conexin lenta, suponiendo que retornas cantidades
razonables de informacin. Dado que la lentitud proviene primariamente del
tiempo de conexin, querrs configurar tu aplicacin de manera que abra la
conexin al inicio y mantenga esa conexin abierta para todas las consultas
futuras sobre ese servidor. Si usas conexiones persistentes en tus aplicaciones la
velocidad incluso sobre conexiones a Internet lentas puede ser muy buena, ya que
slo se envan las cadenas con la consulta hacia el servidor y se retornan los
conjuntos de resultados desde el servidor.
Hay un par de problemas con este esquema y ambos tienen que ver con la
seguridad. Para permitir el acceso a SQL Server ests esencialmente abriendo
dicho servidor a la Internet. Cualquiera puede acceder ese servidor y
potencialmente deja la posibilidad