GLGDW 2003
Inicio

KeyNote

Domingo 12/10

Lunes 13/10

Martes 14/10

Miércoles 15/10

 

... a Conferencias

 
Anuncios




 
© PortalFox

GLGDW 2003

Conferencias 12 de Octubre

  • Creando y usando Generadores en el mundo real (Builders)
  • Implementando una Fabrica de Archivos (File Factory)

Creando y Usando Generadores en el mundo real (Builders)

Presentado por: Rick Schummer
Geeks and Gurus,Inc.
Microsft MVP,Certificado Microsoft CPA

Muchos de nosotros conocemos y hemos usado los Builder o generadores de Visual FoxPro, entre los que se puede contar los generadores de OptionsGroups, Grids, ListBoxes, etc., dichos generadores vienen instalados por defecto en el VFP, en esta sesión Rick demostró como se pueden usar los generadores una herramienta que aumenta la productividad.

Como introducción se dieron los siguientes puntos de sobre lo que es un Builder:

  • No es un wizard, ya que a diferencia de estos, los generadores son re-entrantes, ya que desde un generador puedes ejecutar otro generador y este a su vez llamar a su propio generador y así hasta donde se tenga pensado.
  • Los generadores son herramientas que nos ayudan a crear aplicaciones.
  • Pueden usarse para reducir la exposición de propiedades especificas, así como proveer un conjunto de valores validos para los mismos.
Shummer demostró las capacidades de los generadores las que en lo particular desconocía, lo son: agregar y remover propiedades y métodos, agregar y remover objetos, cambiar los valores de las propiedades y código dentro de los métodos de los objetos seleccionados.

Se demostraron las distintas formas de implementar los builders, desde la forma mas sencilla (por ejemplo, para establecer propiedades estándares de los controles) hasta las mas complicadas que pudiera uno imaginarse (como juntar distintos objetos para alinearlos, cambiarles el nombre, y poner DataSources).

De la misma manera se presentaron las funciones básicas para implementar un generador, entre las que se encuentra:

  • AselObject()
  • SYS(1270)
  • AMouseObj()
  • WriteMethod
  • ReadMethod
  • WriteExpresion
  • ReadExpresion
  • ResetToDefault
  • y un largo etcétera.
Se demostraron las opciones para hacer generadores entre las que se encuentran su generación desde cero, teniendo con ello algunas ventajas y desventajas:
 
A favor
En contra
  • Se tiene mayor “control” de lo que se puede hacer.
  • Son fáciles de integrar dentro de los generadores existentes.
  • Pueden ser basados en PRGs, VCXs, SCXs, APP.
  • Pueden ser personalizados sin necesidad de ajustarlos en una arquitectura predefinida
  • Son educacionales, es decir se aprende mucha programación a la hora de intentar crearlos.
  • Es mucho trabajo a realizar
  • Se deben crear generadores individuales para cada tipo de clase a implementar.

La segunda opción mostrada fue del uso del BuilderB también llamado Generador de Generadores (buena idea, no?), con este generador se pueden crear generadores para clases propias, muy útiles para cuando se prepararan estas funciones. Mostró las cuestiones a favor y en contra del BuilderB:
 
A favor
En contra
  • El uso de su framework reduce mucho el trabajo
  • Interfase de usuario consistente
  • Extensible
  • Fácil de aprender
  • Integrado dentro de Visual FoxPro
  • Es necesario crear un builder para cada una de las clases o conjunto de clase
  • Es necesario aprender el framework

Otro generador mostrado fue el BuilderD, el cual, en lo general tiene las mismas funciones que el anterior solo que con alguna complicación extra ya que esta basado en su propio Framework y esta orientado a Metadatos, es decir, todo esta basado en tablas base, que a su vez generan registros maestros que son utilizados para generar los generadores. Se expusieron sus ventajas y desventajas:
 
A favor
En contra
  • El framework utilizado reduce el trabajo a realizar
  • Interfase de usuario consistente
  • Menor código expuesto debido a que esta orientado a datos.
  • También es extensible.
  • Incluido en VFP
  • Es necesario aprender del Framework
  • Es menos flexible
  • Dolores de cabeza adicionales (distribución de metadatos).

En conclusión, esta fue una buena sesión para saber como aprovechar una de las herramientas que provee Visual FoxPro para aumentar la productividad. Me ha gustado tanto el tema, que me ha inspirado para escribir un articulo para que sea expuesto a la comunidad. Ya que como se podrán imaginar, con el poco tiempo que se da por sesión, apenas y da tiempo de ver las pantallas mostradas. Solo se nos mostró que pueden utilizarse la clase _Builder y la aplicación Builder.APP, suficiente explicación?, no lo creo, asi que a esperar el articulo o revisar lo anterior

Implementado la Fabrica de Archivos (File Factory)

Presentado por: Cathy Pountney
Optimal Solutions.
Microsft MVP

Quizás el nombre no sea muy representativo, pero, que es exactamente una fabrica de archivos? Muchas veces se tienen que administrar muchos archivos dentro de las estaciones de los clientes, que pasa si algún archivo básico falta?, se lo volvemos a suministrar, no es así?, que pasa cuando el numero de estaciones se multiplica?, que pasa si le agregamos a esto la administración de versiones?, que pasa si debemos certificar que el archivo dado es exactamente el ultimo que debe ser?. A todas estas preguntas se le tiene una respuesta, administración de archivos, o bien, una Fabrica de Archivos como le llama este MVP Internacional.

La idea de la fabrica de archivos quizás se nos ha ocurrido antes, pero su implementación debe ser bien planeada, Cathy mostró las cualidades de su proyecto:

  • Solo extraer archivos cuando sea necesario.
  • Siempre revisar y buscar las ultimas versiones.
  • Protegerá los usuarios de ellos mismos.
Pountney expuso los métodos básicos de su clase, entre los que se encuentran:
GetFile() Esta es una de las fundamentales dentro de su clase principal, como su nombre lo indica, obtiene el archivo que sea necesario desde el contenedor de archivos, para lograrlo utiliza las siguientes propiedades.
  • tcFileName, nombre del archivo
  • tcFactory, nombre del contenedor
  • tcMandatoryExts, extensión obligatoria
  • tcOptionalExts, extensiones adicionales (ejemplo: FPT, CDX para una extensión obligatoria DBF)
  • tlCloseFactory, cerrar el contenedor después de obtener el archivo
  • tlForceUpdate, obligar a actualizar el archivo.
Lo que en realidad hace esta librería es ayudarse de los parámetros antes mencionados para cumplir su función, entre las que se encuentra:
  • Buscar el archive en la estación de trabajo
    • Si no existe, crearlo
    • Si existe, pero no es la versión actual o tiene algo que no coincide con la versión del contenedor, recrearlo
    • Si existe y todo esta bien, usarlo
  • Regresa la ruta completa del nombre de archivo en la estación de trabajo.
Además de el método GetFile() se tienen otros métodos adicionales:
  • oFileFactory.Update(), actualizar el archivo
  • oFileFactory.Delete(), borrar el archive
  • oFileFactory.CheckUserTable(), actualizar la tabla de usuarios.
Se nos demostró la idea básica del proyecto, entre lo que se encuentra el separar los archivos en secciones lógicas: Contenedor principal, Tablas Modelos, Tablas Principales, y tabla de usuario.
 

El contenedor tiene las siguientes características:
  • Reside en la red, junto con los datos de la aplicación
  • Cada registro representa una Fabrica de archivos (Tabla Principal)
  • Es actualizada por los desarrolladores y distribuida con la aplicación
Esta tabla registra los siguientes campos:
 
Nombre del Campo
Función
FFC_NameEl nombre de la fabrica de archivos a la cual pertenece el registro
FFC_GenPK La ultima llave primaria (Primary Key) usada por la fabrica de archivos
FFC_Comm Comentarios y/o descripción de esta fabrica de archivos

Se comprende entonces que dicha tabla es la tabla principal de la fabrica de archivos, con ella además se pueden tener múltiples fabricas, de manera que pueden manejarse un numero bastante grande de contenedores, los cuales podrían ser utilizados por múltiples aplicaciones, haciéndolo bastante flexible para los administradores finales de la aplicación (no es para el manejo de parte de los usuarios) o serie de aplicaciones.

Tablas Maestro

Estas tablas también forman parte del lado servidor, sus características son las siguientes:
  • Reside en la red, junto con los datos del servidor
  • Contiene múltiples registro de detalle, cada uno representando un archive a ser extraído en la estación de trabajo
  • Es actualizado por el desarrollo y distribuido con la aplicación.
Para realizar su labor en la clase, esta entidad contiene la siguiente estructura:
 
Nombre del Campo
Función
FFM_PK La llave primaria
FFM_HDDT Contiene la información sobre si es un registro detalle o encabezado, H=Header, D=Detail
FFM_NameNombre usado para acceder a este archivo en la Fabrica de Archivos
FFM_File Incluye el archive actual almacenado código binario
FFM_GroupGrupo lógico al cual pertenece el archive
FFM_SubdirAlmacena el subdirectorio en el cual será extraído el archivo dentro de la estación de trabajo
FFM_SFileRuta completa y nombre de archivo que fue guardado al ultimo
FFM_SDataSi es encabezado, la ultima fecha que este archivo fue actualizado
Si es un detalle, el Date Stamp asociado con el archive guardado en el registro
FFM_VersnEs el numero de versión
FFM_ObsIndica si el archivo ya es obsoleto
FFM_CommDescripción y comentario de el archivo.

Tablas de Usuario

Del lado del cliente, se tiene la tabla de usuario, sus características y funciones son las siguientes:

  • Reside del lado cliente
  • Contiene un registro de encabezado
  • Contiene múltiples registros de detalle, cada uno representando un archive extraído en la estación
  • Actualizado por la aplicación cuando el usuario la acceda en un momento determinado
A continuación describo los campos y su función dentro del proyecto:
 
Nombre del Campo Función
FFU_PK Llave Primaria

 

FFU_HDDT Si es encabezado (H) si es detalle (D)
FFU_FName (D) El nombre de archive de la Fabrica de archivos del cual fue extraído
FFU_Name (D) El nombre del archivo que fue extraído en la estación
FFU_Group(D) Grupo lógico al cual pertenece el archivo
FFU_Subdir (D) El subdirectorio en el cual fue extraído el archivo.
FFU_Versn El numero de versión
(H) La versión de la tabla modelo al momento de que la tabla de usuario fue creada (o actualizada)
(D) El numero de versión de la tabla maestro al momento de que el archivo fue extraído
FFU_CommLa descripción traída desde la tabla Maestro de la Fabrica de Archivos
FFU_UsrDt(H) La fecha y hora en que esta entidad fue creada o actualizada
(D) La fecha y hora en que el archivo fue extraído en la estación.

Las tablas modelo Maestro y de Usuario es básicamente una copia de la ultima que se encuentra en el servidor y en la estación respectivamente, sirven para recrear la tablas principales en caso de que algo fallara.

Con esta información, se tienen los suficientes elementos para implementar un File Factory, la idea es generar los registros necesario en las tablas maestro, guardar en cada uno de ellos el archivo en cuestión, cuando se le solicite, extraerlo y mandarlo a la estación cliente, al estar todo almacenado en registros se puede muy fácilmente realizar la búsqueda de lo que fuera necesario, revisar la tabla de usuario, ver si hay algún cambio con respecto a la tabla maestro, si es necesario, actualizar, borrar, crear los archivos que fueran, todo esto controlado por cada una de las estaciones, de esta manera se puede tener la seguridad de que todos los archivos pedidos se podrán recuperar. Haciendo el trabajo de administración de archivos relativamente fácil.

Obviamente el trabajo arduo recae en como se programen las clases, pero una vez que se tenga listo, no habrá mucho de que preocuparse.

 

 




Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2007 PortalFox. Todos los derechos reservados.