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 |