EssentialFox 2004
Inicio

Pre Conferencias

Sábado Mañana

Sábado Tarde

Domingo Mañana

Domingo Tarde

Lunes Mañana

Lunes Tarde

Galerías

 

... a Conferencias

 
Anuncios






 
© PortalFox

EssentialFox 2004

Reporte de la Conferencia DevEssentials 07.06.2004 – Sesión tarde

Por Amby

La última sesión del última día; pero no será menos interesante. Llego algo justa de tiempo y me toca sentarme lejos, porque la gente está muy interesada en ver qué trae IntelliSense en la nueva versión de VFP.

IntelliSense para aplicaciones (IntelliSense for applications) -  Toni Feltman

Toni Feltman, con esa naturalidad que la caracteriza, comenta que hace un rato, en la sesión de la mañana había llegado a la conclusión de que podía aplicar IntelliSense dentro de su propio IntelliSense, estaba muy contenta con esto y prometió comentarlo en un artículo post Conferencia. La promesa ya está cumplida y el artículo será traducido, ella misma vino a darnos la autorización, gracias Toni!!

Toni cuenta que desde que tuvo en sus manos el VFP 9.0 comenzó a probar las posibilidades que aportaba en temas de IntelliSense para aplicaciones, encontrando que es muy útil, sobre todo porque aporta a los usuarios posibilidades que antes no teníamos.

Las bases de IntelliSense son las siguientes:

1.- Autocorrección.

Muestra un caso de autocorrección, que se le llama también autocompletamiento; pero ella nos comenta que:

-         se trata de autocorrección, tal y como lo aplica MS Office

-         el VFP 9.0 trae AutoComplete en textbox y eso no es lo mismo.

Ej. Escribir en la ventana de comandos MC y barra espaciadora, su resultado es Modify Command

2.- Texto rápido (listas y texto)

Son los casos en que por ejemplo al escribir SET aparece la lista con el resto de combinaciones posibles. Estas listas se llaman Listas de información rápida (Quick Info Lists)

3.- Scripts (pueden ser llamados Plantillas)

Al escribir DOCASE  y luego espacio aparece:

   DO CASE

   CASE   

 

   OTHERWISE

 

   ENDCASE

Ups, pues esto yo no lo sabía!!

IntelliSense en tiempo de ejecución

Toni aclara que a pesar de que el IntelliSense como tal no cambia en la versión 9.0 de VFP, ahora existe IntelliSense dentro de campos memo y en el editor de programa en tiempo de ejecución.

Configuración

En la ventana Modificar propiedades (Edit propierties) de campos memo:

-         Ajuste automático de línea (Word wrap) – desmarcar

-         Colorear la sintaxis (Syntax coloring) – marcar

Hay que ver además los valores para _VFP.EditorOptions.

Como hablamos de IntelliSense a nivel de aplicación hay que diferenciar de IntelliSense en tiempo de desarrollo, la aplicación ha de tener su propia tabla para trabajar su IntelliSense particular. Ver la variable de memoria _FOXCODE.

Pasando estos aspectos, vamos a ver los ejemplos

1.- Autorrección

Recordamos el caso MC = Modif. Command, bin, ahora empleamos una tabla así de sencilla:

Campo

Propósito

Valor/Ejemplo

Type

Indica el tipo de dato para el motor de IntelliSense.

U

Abbrev

El valor escrito

TMF

Expanded

El valor expandido luego que se presiona la barra espaciadora

Toni M. Feltman

Toni propone una vía bien sencilla para permitir al usuario actualizar por si mismo los valores a emplear en su IntelliSense

Solo queda exponer el código para rellenar la tabla AppFoxCode y es el siguiente:

LOCAL ;

     lcAbbrev AS Character, ;

     lcExpanded AS Character

WITH This

     lcAbbrev = .txtReplace.Value

     lcExpanded = .txtWith.Value

ENDWITH

INSERT INTO AppFoxCode ;

     (Type, Abbrev, Expanded, Case, Save) ;

VALUES ;

     ("U", lcAbbrev, lcExpanded, "M", .T.)

Ejemplo 2 – Texto rápido (lista)

Si partimos de la base que la tabla FoxCode actúa de esta forma con SET + barra espaciadora, porque el comando SET aparece con Type = ‘C’, podemos utilizar nuestras combinaciones indicando que el tipo (type) es C, aunque en realidad no sean comandos, solo queremos reproducir el comportamiento. Los campos Abrev. y Expanded cumplen las mismas funciones y dos campos más:

-         Data – campo memo con la lista de todos los valores posibles

-         Cmd – Aquí se guarda el script a ejecutar

Tras unas pruebas, Toni comprobó que puede utilizar el mismo script del cmdhandler que viene en la tabla de IntelliSense de VFP, eso le sirve para manipular la lista que genere el usuario, se trata de lo mismo que antes, reproducir el comportamiento.

Entonces, con un formulario muy parecido y con el siguiente código se alcanza el objetivo:

LOCAL ;

     lcAbbrev AS Character, ;

     lcExpanded AS Character

WITH This

     lcAbbrev = .txtReplace.Value

     lcExpanded = .txtWith.Value

ENDWITH

INSERT INTO AppFoxCode ;

     (Type, Abbrev, Expanded, cmd, Case, Save) ;

VALUES ;

     ("C", lcAbbrev, lcExpanded, [{cmdhandler}],"M", .T.)

Otros ejemplos del uso de IntelliSense en tiempo de ejecución fueron mostrados. Para resumir, Toni comenta con mucho entusiasmo, que ahora tiene herramientas e ideas que le permitirán incluir IntelliSense en muchos más puntos de sus aplicaciones, así que esperemos, en el futuro nuevos y reveladores artículos de Toni sobre estos temas. Por ahora tenemos una idea y un artículo que estará traducido al español en PortalFox.

La verdad es que salí muy entusiasmada, a mí me gustó lo que vi, pensaba en la cara de mis usuarios, a ellos les va a gustar!! Ahora voy a compensar con otro tema de diseño de Bases de datos.

Aplicaciones controladas por datos (Data Driving your application) – Marcia Akins (Microsoft Most Valuable Professional desde 1999)

Marcia se va a referir a la ventaja que tiene que sean los datos quienen manejen la aplicación, independientemente que sean del tipo que sean (escritorio, cliente-servidor, web, etc) Si los datos son el componente clave, la aplicación va a ser más mantenible y más extensible. También se referirá a los metadatos, para implementar estrategias o patrones.

Según Marcia los datos pueden dividirse en:

-         Escenciales, información que no puede ser derivada

-         Procesos, información que puede ser derivada

-         Metadatos, son llamados, los datos sobre los datos (data about data), son los datos que no contienen información de negocio.

Nota: Recordemos que ayer teníamos una clasificación parecida dada por Andy Kramek (esposo de Marcia J) Escenciales, Procesos y Soporte.

La forma de guardar la información, hablando de metadatos y teniendo en cuenta la naturaleza foxera de casi todos los presentes, pues han de ser tablas de VFP; pero se pueden guardar cambiar en archivos INI y los registros de windows.

Ventajas y desventajas

La mayor ventaja es la disminución de cambios de código. Al cambiar las circunstancias lo que cambian son las entradas de datos en una tabla. Esto es casi imprescindible cuando se trabaja en aplicaciones que corren 24 horas, 7 días a la semana, o se trabaja en desarrollos web.

Esta forma de trabajar, nos permite escribir código reutilizable, más genérico, lo que lo hace más extensible y mantenible.

Aquí Marcia nos muestra un ejemplo que han utilizado para el manejo de informes, donde lo que pasan al programa que va a lanzar el comando Report Form es un grupo de parámetros recogidos en una tabla, como son Título del informe, prioridad, nombre del cursor activo, nombre del FRX, etc.

A pesar del avance que ellos tienen en esta materia de controlar la ejecución de las aplicaciones a través de datos, Marcia reconoce que es imposible cubrir de antemano todas las variables posibles, entonces, crean un campo memo llamado “Propiedades” en todas sus tablas metadatos, donde pueden guardar todos los datos adicionales en el formato estándar atributo/valor y luego una función GetProperty() se recupera el valor necesario.

También guardan nombres de métodos que utilizan en determinados informes. Entonces para agregar un nuevo informe solo necesitan:

-         Definir el conjunto de datos (dataset)

-         Crear el FRX

-         Agregar un registro a la tabla Reports

Lo que quiere decir que para nada hay que tocar el código existente, salvo el caso, por supuesto de que tenga un procedimiento especial para calcular.

Pero claro, antes hubo que invertir mucho tiempo de planificación y diseño de estas tablas, es necesario conocer lo que tenemos y prever lo que pudiera ocurrir en el futuro. El código ha de estar muy bien comentado, porque al ser tan genérico no es tan intuitivo como cuando se escribe directamente el nombre de una tabla, campo, etc. Incluso es poco intuitivo para el que lo escribe e intenta leerlo 6 meses después si no ha tenido la previsión de comentarlo muy bien.

Marcia se refiere entonces a los procesos de Importación y Exportación de datos, manejado por datos.

Migraciones de datos

La necesidad de migrar datos desde una estructura a otra cuando los requerimientos de negocio cambian y las estructuras de datos no se corresponden entonces con los nuevos requerimientos.  Este suele ser entonces un proceso de aproximaciones sucesivas, al escribir el código de traspaso, pues generalmente el usuario final, propietario de los datos, recuerda datos que ha olvidado tener en cuenta y que afectan toda la migración y hemos de re-escribir este código varias veces hasta terminar. Marcia aconseja entonces emplear un proceso que sea manejado por datos y no por códigos.

Transferencia de datos

Esto ocurre cuando los sistemas de negocio necesitan comunicarse; pero la estructura de almacenamiento de los datos no es la misma. Aquí viene siendo más o menos el mismo proceder.

Mapeo de campos (Field Mapping)

La construcción del mapa de campos es la clave para cualquier transferencia de datos. El contenido detallado del mapa de campos dependerá de si es una migración o una transferencia; pero en principio son muy similares. Marcia expone un ejemplo que emplearon hace ya muchos años tanto para transferencia como para migración.

Validación de datos desde datos.

Independiente de cuán grande sea la aplicación y su alcance, desde escritorio hasta web, será muy bueno tener las reglas de validación controladas por datos, ya que será mucho más fácil de mantener.

Entonces, la primera cuestión a tener en cuenta es dónde se van a guardar estas validaciones. Como trabajamos con VFP, a partir de la versión 7.0 lo tenemos más fácil con de la introducción de Database Events; pero Marcia continúa recomendando guardarlos en tablas aparte.

Otro problema es cómo guardar estas reglas de validación.  Marcia recomienda utilizar una tabla que se llame por ejemplo BizRules que contenga una lista de los campos, la tabla en que se encuentran, el texto de la regla de validación y l número de error asociado con eso. Mucho cuidado, recomienda tener con la forma de guardar el texto de la regla de validación, porque debe poder retornar un valor lógico que sea en efecto validable. Al tener lista la tabla, pues se crea una clase basada en ella.

Para finalizar Marcia se refirió a temas a una reciente experiencia de cómo controlar a través de datos la producción de HTML. En el proceso de desarrollo estuvo implicado Steven Black quien creó una clase controlada por datos que se encarga de controlar los procesos de reenvío de las listas a las páginas web. La clase Lister, permite mostrar varios tipos de listas, Marcia está toda emocionada, le ha resultado de mucho trabajo y apunta que está basada también en la función EvlTxt escrita hace muchos años por Ken Levy. Esta facilidad ya es nativa en VFP gracias a la función TEXTMERGE()

Marcia es otra de las expertas que pone su trabajo en nuestras para ser traducido y divulgado, ella se siente muy feliz, porque habla algo de español y dice que así lo practica con nosotros.

Bueno… casi el final, el cansancio se hace notar; pero aun nos queda otra que no por ser la última es menos importante.

Ser más productivos con Visual FoxPro (Get more productive with Visual FoxPro) Rick Schummer

Rick se va a basar en aquellos aspectos y herramientas de Visual FoxPro cuyo empleo en nuestro trabajo cotidiano nos reportan mejorar la productividad.

Empieza comentando sobre el Examinador de clases

-         Establecer un archivo predeterminado para abrir el Examinador de clases y evitarse tener que recargarlo una y otra vez, con la clase en el examinador escribir en la ventana de comandos:

_oBrowser.SetDefaultFile() y para quitarlo _oBrowser.ResetDefaultFile() 

-         Establecer la clase predeterminada:

DO (_browser) WITH "MiBiblioteca"," miclase.mimetodo" 

-         Mover y copiar clases entre las Bibliotecas de clases – Usando dos instancias del Examinador de clases, será solo arrastrar y soltar para mover y ctrl.+arrastrar y soltar para copiar 

-         renombrar métodos y propiedades sin tener que abrir la clase – Clic derecho y Renombrar (Rename), se cambia sólo el nombre, no se actualizan todas las referencias al método y/o propiedad, habrá que hacerlo a mano. 

-         abrir y dar mantenimiento a PRG basados en clases (VFP 9.0) – La nueva versión quita la restricción en este aspecto.

Administrador de proyectos

-         Arrastrar y soltar – Se puede arrastrar desde el Explorador de Windows y el propio Administrador de proyectos se encargará de distribuirlos, a partir de las extensiones en sus fichas. Nos archivos con extensiones no nativas de VFP se guardarán en la ficha Otros.

-         Arrastrar de un proyecto a otro – Se pueden arrastrar archivos entre dos o más proyectos, no hay que estar en la misma ficha, los archivos van a la ficha correspondiente. Si el archivo arrastrado está establecido como principal (main) pues VFP preguntará si se desea mantener ese estatus en el proyecto destino.

-         Arrastrar objetos desde un proyecto hasta un diseñador, Ej. Tablas a un diseñador de formularios.

-         Arrastrar desde un proyecto a un editor de programa. Es el mismo procedimiento, se muestra el nombre del objeto arrastrado, desafortunadamente los campos no conservan la referencia a la tabla mitabla.micampo.

-         Abrir una clase en el Examinador de clases (VFP 9.0) – Para ello doble clic en una biblioteca de clases.

-         Cambio de Fuente (VFP 9.0) – no es directamente relacionado con la productividad; pero sin dudas ayuda mucho… ya son varios los que dicen que nos vamos haciendo mayores …J

Examinador de objetos

-         Crear clases plantillas para implementar interfases – Se basa en la capacidad de VFP de responder desde nuestras aplicaciones a eventos en otras aplicaciones. Existe la nueva cláusula IMPLEMENTS de DEFINE CLASS y la función EventHandler()

-         Obtener el nombre del OCX para incluir en el setup de la aplicación: Abra el Examinador de objetos, seleccione un control ActiveX de la lista, se selecciona el nodo raíz, en el panel inferior se muestra información sobre el OCX, nombre, archivo de ayuda, etc

Vimos características del TaskPane; pero ya le dedicamos una sesión, así que le paso por alto.

Sobre el ToolBox

-         Bloques de textos: Permiten arrastrar y soltar texto en el editor de programas. Si marca el texto como TEXTMERGE evaluation text, puede literlmente escribir script VFP TEXTMERGE

-         Controles ActiveX – Al arrastrar controles ActiveX a un editor se crea el correspondiente código CREATEOBJECT(). Ej, al arrastrar el control ActiveX DynaZip  se crea en el editor este código:

Olecontrol = NEWOBJECT("dzactxctrl.dzactxctrl.1", "dzactx.dll") 

que puede ser sencillamente modificado por

LOCAL loZip AS "dzactxctrl.dzactxctrl.1" 

-         Es anclable (dockable) – En VFP 9.0 – Esto no genera productividad pero si posibilita tener una ventana de menos en el escritorio cuando no la estamos utilizando y activarla rápidamente.

Ventana Referencias de código

Sin dudas su objetivo es la productividad, agilizar las búsquedas, permite guardar para regresar a ella, etc. Es una herramienta muy buen para el programador.

Editores

-         Visor de documentos (Document view).  A partir de VFP 7.0 posibilita moverse agilmente por programas largos, incluyendo #DEFINEs, y directivas del procesador (#INCLUDE, #IF, #IFDEF, y #IFNDEFs).que funcionan como marcadores.

-         Presentación de colores para una sección determinada del programa – A partir de VFP 8.0, se puede presentar un trozo de programa de forma independiente a la presentación del resto. Sombrear el texto, clic derecho + presentación.

-         El código que se pega mantiene los colores. (VFP 9.0) Ej pasar del editor de VFP a Word.

-         Compilación de fondo (Background compilation VFP 9.0) – Aquí la opinión de Rick es que a pesar de la utilidad que reporta se ralentiza el trabajo con el editor y espera que haya soluciones antes de la salida definitiva de la versión. Las ventajas están claras, cualquier error salta de inmediato a la vista.

-         Imprimir texto seleccionado (VFP 9.0) Ahora no hay que cortar y pegar un trozo de programa en otro sitio para imprimirlo, ya se puede marcar e imprimir el trozo seleccionado.

Rick pone ejemplos del uso de Marcadores que se introdujeron en la versión 7 y permiten saltar de una página de edición a otra en un punto determinado, Cathy Pountney en sesiones anteriores comentó también este tema.

Las nuevas características de la ventana Propiedades también fueron detalladas y han sido vistas en estos reportes de la Conferencia (ficha favoritos, valor predeterminado para nuevas propiedades, selección de fuentes, tratamiento de colores, dato member, etc).

IntelliSense, a partir de la versión 7.0 es quizás la características que más ha aportado a la productividad, por el ahorro que constituye no tener que ir a la ayuda a recordar la sintaxis de comandos, funciones, etc Este tema ya ha sido descrito, en las sesiones de Cathy Pountney y Toni Feltman. Y el Key Note de Ken Levy cuando presentó las novedades de la versión 9.0

Pasa lo mismo con los generadores y IDE en VFP 9.0 y el Depurador (Debugger), descrito por el propio Rick Shummer en la primera sesión que asistí de esta DevEssentials Conference, que ya termina, porque en efecto, Rick abrió y cerró el ciclo al que yo tuve el privilegio de asistir.

Mis conclusiones

Hasta aquí el resultado de 3 días de Conferencia, divididos en sesiones de mañana y tarde, más una jornada previa. 

No termino sin agradecer una vez más la gentileza de INETA, los SysOps de PortalFox y en especial a Isaac Venegas, por haber posibilitado mi presencia en un evento de tan alta calidad como ha sido la Conferencia DevEssentials Kansas 2004.

Gracias a todos los ponentes por la calidad, estado del arte y maestría con que expusieron sus temas. Han estado inmensos, ha sido muy emocionante haberlos conocido y haber intercambiado. Agradecida también a Alex Feldstein (VFP MVP), por su compañía, apoyo, conocimientos y consejos.

Gracias al fantástico equipo de SysOps de PortalFox (www.PortalFox.com) quienes estuvieron, desde la red, brindando el apoyo y las orientaciones que necesitaba para desarrollar el trabajo allí. Muchas gracias Pablo, LuisMa, Isaac, Esparta y también Gracias!! al resto de los amigos que me acompañaban con sus mensajes: Germán Giraldo, Antonio Muñoz, Carlos Yohn, José Luis Santana y Fernando Puyuelo.

El equipo de PortalFox es además, quien se encarga de hacerles llegar estas notas, el resto de fotos y material recopilado en el formato y secciones que existen en el Portal para esos fines. Gracias chicos!!

El intercambio que se produjo entre profesionales, la cordialidad y accesibilidad de los grandes entre los grandes magos de Oz, hicieron que Dorothy encontrara sus zapatos y regresara a casa con las pilas cargadas de entusiasmo, ganas de seguir y transmitir lo más posible a amigos y colegas.

Espero que los resúmenes sirvan de utilidad, cualquier comentario o sugerencia al respecto será bienvenido.

Muchas gracias a todos.

Saludos,

Ana

www.amby.net

 


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.