Sábado 15 de Octubre - Jornada de la mañana
PorAmby
Temas:
Creando
aplicaciones N-Capas con Visual FoxPro por Toni Feltman
Usos interesantes
para los ReportListeners por Doug Hennig
¿Cómo crear interfaces de usuario basadas en web con ASP.NET para
aplicaciones VFP? por Cathi Gero
Después del día que disfrutamos ayer, agotador; pero, sin dudas, muy
emocionante, nos encaminamos a la Universidad Estatal de Arizona con la
ilusión de aprender cosas nuevas y pasar un día repleto de emociones. Para
hoy en la mañana, tengo previsto aprender con Toni Feltman aspectos de la
programación n Capas, luego, no pienso perderme detalle de las
aplicaciones interesantes que le ha encontrado Doug Hennig a los
reportlisteners y para finalizar la sesión de la mañana voy a escuchar, de
Cathi Gero, cómo combinar VFP y .NET, creando interfaces de usuario con
ASP.NET para las aplicaciones VFP. Suena bien, tópicos diferentes, todos de
actualidad, apuro mi café del desayuno que comparto esta vez con Doug
Hennig y ... empezamos.
Coincido con Esparta en la sesión
Creando
aplicaciones N-Capas con Visual FoxPro (Building N-Tier
Applications with Visual FoxPro) que nos imparte Toni Feltman. La
forma más sencilla en que se puede explicar un desarrollo n Capas sería
diciendo que es la separación de varias porciones de la aplicación en capas
separadas. Es decir, el código de nuestra aplicación está separado según su
funcionalidad. Esto lo podemos ver a través del esquema:

Para lograr este desarrollo bastaría trabajar con VFP, aunque, desde
luego el empleo de COM, COM+, DCOM, etc también se basa en esta metodología
de trabajo. Toni Feltman introduce el tema de la funcionalidad de cada capa
y nos lleva a lo que ella llama un enfoque más actual, en el que el esquema
queda de la siguiente forma:

Vemos como, en realidad la interfaz de usuario es un Requester - un
solicitante, que hace peticiones. Cuando ocurre una petición desde el
Requester (UI) pasa al Broker (COM, Servicio Web, Capa de Negocio de la
aplicación), que se encarga de "negociar las reglas", verifica quien hizo
la petición, si cumple los requerimientos establecidos y decide si todo
está en orden para entonces, pasarlo a la capa datos. Luego, los datos
enviados por el Provider (VFP, SQL Server, XML)- Suministrador, son
devueltos al Solicitante. El Suministrador es quien se encarga de procesar
los datos a recibir y devolver la información que tiene almacenada.
Vamos a los ejemplos. Como esta sesión la podremos traducir, todos los
ejemplos serán distribuidos. Los ejemplos están muy comentados y nos van a
servir para reproducir una situación específica, aplicando n Capas. La idea
es mostrar como se ejecuta una aplicación separada en capas lógicas. Tony
Feltman se ha concentrado en la capa de negocios. Muestra como el objeto de
negocio realiza el llamado a la capa de datos, estableciendo la conexión y
realizando las peticiones de datos. Por su parte, la capa cliente (UI -
Requester) tiene dos propiedades que indican a qué Broker va a realizar su
petición. Vemos tres posibilidades, desde VFP con 3 capas, luego, la capa
de negocio controlada por un COM (esto, para Interoperabilidad con .NET,
por ejemplo) y luego, pues cambia el COM por un Web Service. Los cambios
en programación son mínimos. Muestra la diferencia que hay entre los
botones de comandos New y Save, mientras New deja que se introduzcan los
datos que actualizan un cursor en local, el botón Save es que actualiza los
datos en la DBC y por tanto, es el encargado de interactuar con esa capa.
Como ventajas de trabajar con n capas podemos ver:
- Aumenta la reutilización de los componentes. El ejemplo más común es
que la interfaz de usuario VFP tenga que ser sustituida por una interfaz
ASP.NET, en este caso, el resto de los componentes se pueden quedar tal y
como están.
- Las aplicaciones pueden responder mejor a los cambios. Al cambiar la
tabla de VFP, por una vista, o una vista remota u otro origen de datos,
no habría que cambiar toda la aplicación, se trata del acceso a aquel
origen, luego las reglas y la interfaz se mantienen.
- Admite que las reglas de negocio y los datos vengan de otras
aplicaciones. A través de interoperabilidad con .NET podemos consumir
objetos creados en aplicaciones ajenas y escritas en lenguaje ajeno.
- Mucho más sencillas de mantener. El cambio en una capa no implica
cambios en todas.
- Requiere mucho esfuerzo en el diseño. No se trata de crear
formularios y soltar controles que tienen una programación determinada.
Se trata de crear objetos con funcionalidades y que se reutilizan en
formularios y otros contenedores. El diseño es fundamental.
- Separar la interfaz de la implementación. Los datos y la interfaz han
de estar separados.
- Escalabilidad. Cuando llega el momento de migrar a un COM o Servicio
Web para trabajar con la misma aplicación en condiciones diferentes, los
cambios serán mínimos, sólo si se diseñó y desarrolló una aplicación n
Capas.
Entre las desventajas que existen al aplicar n Capas podemos citar:
requiere un gran esfuerzo y mayor tiempo al diseño, los modelos de objetos
son más complejos, la curva de aprendizaje es mayor, requiere una
disciplina estricta y es más difícil para depurar.
Para concluir, Tony Feltman comenta que todas las desventajas que se han
visto son para el desarrollador, por tanto es el desarrollador el que
decide aplicar o no este método, que ella considera es el más acertado
desde cualquier punto de vista, sobre todo si se mira a más largo plazo..
Al finalizar la exposición se desarrolló un debate bien interesante,
al analizar las formas más acertadas para el pase de los datos, cuando no
se trata de un registro, sino de un grupo de ellos. Se comentó que en la
forma de trabajar uno de los ejemplo, la capa de negocio que se presentó
simulaba un CursorAdapter y en efecto, fue así. Uno de los participantes
era Esparta Palma, quien mostraba sus experiencias y las dificultades que
había encontrado al implementar las diferentes soluciones. Acordaron
intercambiar mensajes para entre los dos, dar la solución más acertada.
Gracias Tony, estuvo muy interesante.
Volvemos al salón, en los escasos 15 minutos, (que casi nunca lo son,
como ahora que la charla con Toni nos tomó casi todo el tiempo), tenemos el
tiempo justo de tomar un poco de agua, un café y de nuevo a clase, a
disfrutar de la sabiduría de Doug Hennig, que como siempre, estará genial.
Las presentaciones de Doug Henning y Steven Black, así como el Keynote de
esta Conferencia fueron grabados, no se si serán distribuidos y tampoco se
si fueron grabadas otras sesiones.
Pues ... adelante, vamos a ver
Usos interesantes para
los ReportListeners (Cool Uses for ReportListeners) por
Doug Hennig
Doug Hennig recuerda que antes de VFP 9.0 el motor de informes de VFP
era monolítico y que esto felizmente cambió en VFP 9.0. Los aportes
fundamentales nos llegan de la nueva clase ReportListener y algunas de sus
subclase: HTMLListener y XMLlistener. Así como una nueva aplicación XBase
ReportPreview.APP.
La sesión de hoy no va a explicar estas clases, Doug Hennig
recomienda revisar documentos que ya detallan estos temas. Estos artículos
se pueden leer, traducidos al español, y publicados en los siguientes
enlaces:
Extender los informes en VFP 9.0 en tiempo de diseño (Parte 1/2)
(Doug Hennig) Traducción
http://www.portalfox.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=55
Extender los informes en VFP 9.0 en tiempo de diseño (Parte 2/2) (Doug
Hennig) Traducción
http://www.portalfox.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=56
Extender los informes en VFP 9.0 en tiempo de ejecución (Parte 1/3) (Doug
Hennig) Traducción
http://www.portalfox.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=64
Extender los informes en VFP 9.0 en tiempo de ejecución (Parte 2/3) (Doug
Hennig) Traducción
http://www.portalfox.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=65
Extender los informes en VFP 9.0 en tiempo de ejecución (Parte 3/3) (Doug
Hennig) Traducción
http://www.portalfox.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=66
El Generador de informes de VFP 9.0 en acción Parte 1 (Cathy
Pountney) Traducción
http://www.panoramabox.com/GoPub.aspx?IdObj=3337
El Generador de informes de VFP 9.0 en acción Parte 2 (Cathy Pountney)
Traducción
http://www.panoramabox.com/GoPub.aspx?IdObj=3338
El Generador de informes de VFP 9.0 en acción Parte 3 (Cathy Pountney)
Traducción
http://www.portalfox.com/article.php?sid=1656
Lo nuevo del Generador de Informes en VFP 9.0 - Parte 1 (Cathy Pountney)
Traducción
http://www.portalfox.com/article.php?sid=1269
Lo nuevo del Generador de Informes en VFP 9.0 - Parte 2 (Cathy Pountney)
Traducción
http://www.portalfox.com/article.php?sid=1270
Pasamos directamente a los ejemplos.
1.- Enlazar informes con hiperenlaces.
Este
tema fue descrito íntegramente por Doug Hennig en un artículo que ya
tenemos traducido en: "Emplear Hiperenlaces en informes"
http://www.portalfox.com/modules.php?op=modload &name=Sections &file=index
&req=viewarticle &artid=74
En resumen se trata de emplear la clase HTMLListener, la que a su vez es
una subclase de XMLDisplayListener, que es subclase de XMLListener, la que
como sabemos, es subclase de ReportListener. Al indicar que se genere un
tipo de fichero HTML, se genera un XML que aplica un XSL para transformar
el XML en HTML. El XSL agrega una etiqueta al HTML, lo que significa que
el formato HTML admite hiperenlaces. Y no es un juego de palabras, es una
nueva y muy valiosa funcionalidad. Veamos en la figura siguiente los
enlaces "vivos"

En este segundo ejemplo vemos como se pueden encadenar informes a partir
del empleo de hiperenlaces. Al seleccionar un usuario determinado se
muestran sus datos

Doug
Hennig mostró otro ejemplo que emplea también hiperenlaces. En este caso,
trabajó a partir del Panel Navegador creado por Favio Vázquez y que se
puede descargar de
http://ReportListener.com. En este caso, se muestra en el panel de la
izquierda las imágenes de las páginas (las imágenes también se generan a
partir del ReportListener con tipo de salida de formato GIF) y a la derecha
se muestra la vista previa de la página seleccionada.
Ahora vemos otro uso, que al menos para mí, ha sido totalmente nuevo.
Menos mal que podremos traducir y ver con calma todos los ejemplos. No me
canso de agradecer a los que nos autorizan con tanta generosidad.
Doug
Hennig ha creado un DBFListener como subclase de _ReportListener con
ListenerType = 3, para que en realidad no se produzca salida alguna. En su
lugar, se crea una tabla que va a contener el informe generado, es decir,
cada objeto, tipo de objeto, en qué página aparecen y cuales son sus
propiedades. Entonces, aunque aparentemente no ha ocurrido nada, ahora
contamos con un cursor que tiene toda la información y es un cursor, por lo
que admite todo tipo de búsquedas y otras funcionalidades propias de un
cursor. A partir de esto, y controlando los eventos que se realizan sobre
los objetos, el autor creó una nueva subclase SFReportShape que permite
tener información de cuando se ha realizado un evento, por ejemplo Clic,
sobre un objeto de informe. Ahora se puede buscar texto, resaltar texto, en
fin ... menos y menos limitaciones. También mostró un ejemplo con GDI+ para
gráficos ... Excelente !!!!
¿Qué les parece? En inglés se diría "Amazing " y en español diríamos,
en dos palabras "Im - presionante" :) Yo me pregunto ¿hasta dónde se puede
llegar? ... Según Doug Hennig con estas posibilidades no podíamos ni soñar
antes. Y claro que no, en realidad ReportListener ha sido una verdadera
joya que adquirió VFP en su versión 9.0.
Salgo de esta sesión muy contenta, porque las aplicaciones en VFP son
cada vez más potentes y ofrecen cada vez más posibilidades que no tienen
nada que envidiar a otras tecnologías. Aquí no se ha hablado de OCXs que
hay que registrar, ni de productos de terceros, es VFP puro y duro.
¡Muchísimas gracias Doug Hennig! Al primer chance que haya, traduciremos
estos trabajos.
Antes
de disfrutar de la tercera charla de esta mañana, me paso por el salón y me
encuentro con Milind Lele del FoxTeam. Fue un placer conversar con el.
Milind Lele lleva muy poco tiempo en el FoxTeam, y se ha sorprendido mucho
con este evento, por la fraternidad que existe en la Comunidad de
desarrolladores y la pasión que se siente por el VFP. Viene de otras
tecnologías de Microsoft y confiesa que lo vivido en estos días, lo
estimula mucho en su trabajo dentro del MS FoxTeam. Nos hacemos una foto
para el recuerdo y me despido, muy a mi pesar... ya me gustaría seguir
charlando; pero no podemos estar en dos lugares a la vez y en estos
eventos, aunque todo es enriquecedor, "el pollo del arroz con pollo", como
decimos en mi tierra, son las sesiones. Las charlas las podemos dejar para
los raticos como este que van quedando ¿libres?
Ahora vamos a ver
¿Cómo crear interfaces de usuario basadas en web con ASP.NET para
aplicaciones VFP? (How to Build Web-based UI for VFP Applications)
por Cathi Gero
Más que cualquier cosa que se pudiera resumir de esta sesión,
aconsejo que revisen el excelente artículo de Cathy Gero titulado "Using
ASP.NET in Visual Studio .NET with Visual FoxPro 7.0" que se encuentra en:
http://msdn.microsoft.com/library/en-us/dnfoxgen7/html/usingaspnetwithvfp7.asp
Esta sesión no tiene un artículo escrito que podamos traducir, con lo
que si contamos es con los ejemplos a libre descarga desde
http://www.prenia.com/Downloads.htm bajo el título "Visual FoxPro and
.NET Working Together".
Cathy Gero realiza una introducción en la que comenta la importancia de
desarrollar aplicaciones cuya Interfaz de usuario se encuentre disponible
en Internet. Recuerda los inicios de ASP, sus ventajas y desventajas. En
todo momento realiza las comparaciones posibles entre el desarrollo con
ASP.NET y con VFP.
Luego, pasa a hablar sobre ASP.NET, que es sin dudas un salto
cualitativamente superior, permite crear formularios Web y Servicios Web.
ASP.NET utiliza lenguajes de programación totalmente orientados a objeto
(C# y VB.NET), crea código compilado y lo guarda en el servidor. Su
arquitectura es similar a la de formularios Windows.
Entre ASP y ASP.NET hay muchas diferencias en cuanto a rendimiento,
escalabilidad, seguridad, infraestructura para Servicios Web XML, entre
otras.
Una aplicación Web Form incluye:
- Páginas Web
- Archivos de configuración
- Archivos de código (objetos de negocios, imágenes y referencias
externas a ensambladores .NET)
Consta de dos partes: una representación visible de los controles y un
archivo de código que se encuentra detrás. El código puede estar escrito en
VB.NET, generando entonces un archivo extensión VB o escrito en C#, que
genera un archivo extensión cs. De esta forma .NET permite dividir la
interfaz del código. La interfaz admite el trabajo con controles tipo:
HTML, HTML Server y Web Form. Aquí comenta la diferencia en cuanto a la
configuración de los controles, como puede ser el caso del grid de VFP y en
ASP.NET. Cathy Gero explica cómo se desarrollan los eventos. En este
aspecto lo más curioso para mí fue la diferencia que hay con VFP. Resulta
que no se cumple la secuencia LISAG, sino que en .NET primero se ejecuta el
evento Init y luego el Load.
En esta sesión se ejemplifican controles de cada tipo y se trabaja
desde el .NET framework en la creación de varios ejemplos de aplicaciones
empleando ASP.NET. En el sitio Web de Cathy Gero se pueden encontrar gran
cantidad de artículos sobre el trabajo con ASP.NET desde la base.
También se explica que los archivos de configuración utilizados por
ASP.NET permiten que los ficheros sean modificados sin tener que parar y
restaurar el servidor y permiten guardar la configuración sobre el
lenguaje, los errores, la depuración, etc. Así tenemos:
- Machine.config - Guarda la configuración predeterminada para el
Servidor Web
- Web.config - Brinda los parámetros para una aplicación Web en
concreto.
Para finalizar recomienda visitar
http://www.asp.net/default.aspx?tabindex=6&tabid=44
Acaba
el tiempo, ha sido más una sesión de .NET, que una sesión de VFP. Pero de
eso se trataba, de ver cómo podemos crear interfaces en .NET que nos
permitan aplicar reglas de negocio creadas y programadas en VFP. Vale la
pena, y mucho, aprender a combinar estas herramientas, para emplearlas
cuando sea necesario. Tal es así que un grupo de personas se han quedado
para aclarar dudas y pedir opiniones a la experta.
Antes de irme, le pido a Cathy que me dedique su libro ".NET for VFP
Developers", accede (en la foto firmando) y escribe: "Espero que
encuentres útil este libro", ¡ Ya lo creo! Desde enero lo vengo consultando
y me ha sacado de más de un apuro. Nos hacemos otra foto para el recuerdo.
Vamos a comer, a ver qué tal hoy, no se si habrá tiempo libre o algún
otro encuentro como el de ayer ...Esparta me cuenta que estuvo en las
sesiones "Modeling Hierarchies" de Marcia Akins y "Accessing and sharing
data with .NET Web Services" por Rick Strahl, dos gurús de primer nivel y
dos sesiones muy interesantes.
Nos vemos en la próxima entrega, Reporte de la Conferencia Southwest
Fox 2005 - Día 15 de Octubre Jornada de la tarde.
Saludos,
Ana
www.amby.net |