8 de diciembre de 2016

VFP9 - Mejoras relativas al Entorno de desarrollo de Visual FoxPro

Toda la interfaz de desarrollo incorporada por VFP está orientada al desarrollo rápido de aplicaciones RAD (Rapid Application Development). La versión 9.0 incorpora cambios y mejoras en muchos de los componentes del IDE de VFP. Me referiré sólo a aquellos que me parecen más relevantes.

Diseñador de clases y formularios

En esta versión hay cambios, por citar algunos:

  • En opciones de menú y títulos de ventanas.
  • El valor inicial a la nueva propiedad se puede introducir directamente. En las imágenes se muestra la diferencia entre el IDE en VFP 8.0 y VFP 9.0
  • Se pueden acoplar formularios, sobre esto recordemos que la posibilidad de acoplar ventanas del sistema comenzó en la versión 7.0, la versión 8.0 aportó el control por programación y ahora la 9.0 permite acoplar ventanas de formularios.

Ventana propiedades

El área donde VFP 9.0 tiene más cambios relativos al Diseño de formularios y clases es sin dudas la ventana Propiedades que incluye cambios como:

  • Iconos que preceden las propiedades, eventos, y métodos (PEM)
  • Posibilidad de una Fuente personalizada, para ello basta con hacer Clic derecho en el panel superior de la ventana Propiedades y seleccionar Font. Aparece el cuadro de diálogo Fuente que nos permite configurar la fuente deseada.
  • Personalizar colores para identificar distintos tipos de PEMs (activex, no predeterminados, de usuario y los instanciados). Para ello es necesario hacer Clic derecho sobre la parte superior de la ventana Propiedades, y seleccionar la opción a la que se desea cambiar el color (ActiveX / Non-default Properties / Custom Properties / Intance Properties Color)

    Estas figuras muestran la diferencia entre las dos últimas versiones.

  • Las propiedades admiten cadenas de más de 255 caracteres
  • La ventana Zoom admite introducir caracteres extendidos en la cadena de propiedades, tales como retornos y avance de línea. Esta ventana está disponible para propiedades cuyos valores puedan ser textos largos. Si hace Clic derecho sobre una propiedad con estas condiciones se muestra en su menú la opción Zoom.
  • Nueva ficha Favoritos es de gran utilidad ya que ahorramos tiempo, teniendo solo los PEMs utilizadas más frecuentemente. Esta ficha no cumple aun con todos los deseos de los desarrolladores. Se han solicitado dos mejoras:
    • Una casilla de verificación desde la ventana de Nueva Propiedad / Nuevo método que permita enviar al nuevo elemento, directamente a la ficha Favoritos.
    • Una opción en el menú contextual que permita eliminar un elemento de la ficha Favoritos, de igual forma que existe una opción que lo agrega.

Esta versión por fin pudo satisfacer dos peticiones muy antiguas de los desarrolladores VFP: La preservación de la capitalización en PEMs de usuario y la ficha Favoritos. Esto se ha logrado a través de una nueva propiedad: _MemberData.

_MemberData - Es una cadena XML que contiene el dato VFP, entre las etiquetas <VFPData> y </VFPData> sólo hay un elemento que se llama memberdata para cada PEM que tenga. A su vez cada elemento tiene un atributo por cada aspecto que se haya configurado para cada PEM.

Los atributos son:

  • Type: Tipo del miembro contenido. Valores posibles "property", "event" o "method"
  • Name: Nombre del miembro contenido Ejemplo: enabled / caption / mipropiedad
  • Display: Forma en que aparece el nombre tanto en la ventana propiedades como en IntelliSense Ej Enabled / Caption / MiPropiedad.
  • Favorities "True": aparece en la ficha Favoritos, en caso contrario, "False"
  • Override (Sobreescribir) "True": ignora el metadato de la clase padre, "False" - hereda el metadato de la clase padre.
  • Script: Código que se ejecuta cuando se selecciona el miembro contenido en la ventana Propiedades.

Veamos un ejemplo:

<VFPData>
<memberdata name="fontbold" type="Property" favorites="True"/>
<memberdata name="caption" type="property" override="True"/>
<memberdata name="comment" type="property" script="INPUTBOX('Comentarios')"/>
<memberdata name="nuevapropiedad" type="property" display="NuevaPropiedad"/>
</VFPData> 

En este ejemplo vemos lo siguiente:

  • Hay 4 propiedades contenidas en este dato: fontbold, caption, nuevapropiedad y comment
  • La propiedad fontbold está en la ficha Favoritos
  • La propiedad caption se puede sobrescribir, no hereda del metadato de su clase padre.
  • La propiedad comment aparece en la ficha Favoritos y tiene un código script asociado, en este caso invoca una función InputBox.
  • La propiedad nueva propiedad se mostrará como NuevaPropiedad
  • Las propiedades fontbold, caption y comment se muestran como FontBold, Caption y Comment, aunque no quede explícitamente expresado en el texto del metadato y esto se debe a que son propiedades nativas de VFP.

Podemos resumir las características y funcionalidades de _MemberData con lo siguiente:

  • MemberData controla la ficha Favoritos
  • La propiedad _MemberData no viene de forma predeterminada, hay que agregarla a los controles. Esto es fácil de hacer agregándola a cada una de las clases base.
  • Está inicialmente vacía, al actualizarla, en una cadena XML, quedan especificadas las propiedades a configurar para ambos tipos de PEMs (nativos o de usuario). El motor MemberData sirve de esta forma, para extender la ficha propiedades, la cual lee el XML y aplica las personalizaciones indicadas.
  • MemberData controla la capitalización de las palabras
  • Está disponible para PEMs nativas y de usuarios
  • Se aplica al formulario o la clase como tal, no a los objetos contenidos. Si el objeto contenido ya tiene una propiedad _memberdata se puede editar. En caso contrario no.
  • Para agregar un PEM a la ficha Favoritos. Con el cursor en el elemento que se desee agregar, hacer Clic derecho y seleccionar la opción del menú Add to Favorities (Agregar a favoritos)
  • Para quitar un elemento de la ficha Favoritos no es tan sencillo como un acceso directo, hay que modificar la cadena XML o cambiarlo en el Editor de Memberdata
  • No admite & para macro sustitución, en su lugar hay que indicar &amp;
  • El generador de MemberData permite la creación automática de la cadena XML
  • VFP 9.0 incluye una utilidad MemberDataEditor.APP que simplifica grandemente todo el trabajo con el del motor MemberData.
  • MemberData es una ventana abierta a la creación de editores de propiedades personalizados. vía la sección Script del XML de _MemberData. Una vez que ha especificado un script para una propiedad de usuario, VFP muestra el botón editor de propiedades a la derecha del cuadro de texto del valor de la propiedad. Este es el mismo botón que muestra VFP para las propiedades nativas, por ejemplo ForeColor. El equipo VFP incorporó un script a la función Caption invocando un InputBox. Aprovechando esta posibilidad se incorporó un editor para la propiedad Anchor que también es Novedad en VFP 9.0 y veremos a continuación.

Ejemplo: el Editor MemberData para la propiedad Comment, a la que se ha agregado con Script.

Resultado en la ventana Propiedades, mostrando el botón editor de propiedades a la derecha del cuadro de texto del valor de la propiedad Comment.

Propiedad Anchor

Para determinar si el control contenido debe ser redimensionado y/o movido en dependencia a los cambios ocurridos en su contenedor y /o a que ejes debe anclarse.

Esta propiedad incluye un editor, para facilitar el cálculo del valor a asignar a esta propiedad. Veamos el aspecto que tiene este editor.

Para trabajar con el editor sólo será necesario hacer Clic en las barras que separan al control del contenedor estableciendo de esta forma el valor numérico que tomará la propiedad. Esta propiedad tiene gran importancia, porque permite lograr de forma nativa una funcionalidad que los desarrolladores estábamos obligados a incorporar por programación.

Mostrar elementos gráficos

Los elementos gráficos: formas y líneas existen desde VFP 3.0; pero siempre ha sido muy limitada su funcionalidad. VFP 90 introdujo varios cambios, entre ellos:

  • Rotar etiquetas – Nueva propiedad Rotation que se aplica a Label, Line y Shape que permite rotar el objeto según los grados que se indiquen. En el caso de Line y Shape sólo es válida si fueron creados con la propiedad PolyPoints.
  • Crear y rotar formas complejas - Los objetos Line y Shape contienen ahora la propiedad PolyPoints que se puede utilizar para especificar una matriz de puntos que determina la línea o forma mostrada. Esta propiedad permite manejar matrices unidimensionales y bidimensionales, en este caso, los elementos impares representan las x y los elementos pares las y.

Auto Completar en cuadros de texto

Esta técnica sigue el rastro de las entradas del usuario en un campo determinado. Es una buena funcionalidad a ofrecer al usuario final que hasta ahora no existía de forma nativa en VFP.

Se ha implementado a través de nuevas propiedades: AutoCompSource, AutoCompTable (para texto y _screen). Estos valores se guardan en una tabla, de forma predeterminada es AutoComp.DBF.

Se puede emplear más de una tabla para autocompletar, la tabla actualmente activa es la que se corresponde con _screen.AutoCompTable. No puede ser una vista o cursor.

Otras novedades

Controlar el foco

En el evento Valid se puede indicar a qué objeto entregar el foco. Notemos que IntelliSense no muestra el nuevo parámetro Object name, en el comando Return; pero si está comentado en la ayuda. Solo para evento Valid.

Ejemplo:

RETURN ThisForm.Pageframe1.Page2
 RETURN ThisForm.Combo1 
Mejoras en combos y listas

Nueva posibilidad Nodefault en el evento DropDown para Combobox. Hace que no se despliegue la lista.

Se pueden ocultar las barras de scroll para listbox. Para ello empleamos la propiedad AutoHideScrollBar que acepta dos valores 0 – siempre visibles (valor predeterminado) y 1- las barras de scroll son sólo visibles si los elementos que componen la lista son más que el espacio para mostrarlos. Veamos el efecto visual que provoca.

Conclusiones Diseñador de clases y formularios

Invertimos gran parte de nuestro tiempo diseñando clases y formularios. Las novedades de esta versión 9.0 redundan en mejoras de productividad, extensibilidad y funcionalidades para trabajar elementos gráficos.

Administrador de proyectos

Los cambios los podemos resumir en:

  • Cambios de presentación: tipo de letra, para ello basta con hacer Clic derecho en el panel superior de la ventana Propiedades y seleccionar Font. Aparece el cuadro de diálogo Fuente que nos permite configurar la fuente deseada.
  • Nuevas opciones en menú contextual, además algunas opciones han sido renombradas o recolocadas. Veamos algunas diferencias en estas imágenes.
  • Hay dos nuevas funcionalidades importantes:
    • poder modificar una librería de clases, archivo VCX (invoca el Examinador de clases). En las figuras siguientes, que representan la misma ficha del Administrador de proyectos en las versiones VFP 8 y VFP 9 se observa como en VFP 9 se encuentra disponible esta opción.

    • obtener el registro (log) de generación del proyecto / aplicación, aunque no termine de generar. Hasta VFP 8.0 al generar un proyecto / aplicación, (ya sea desde el Administrador de proyecto, el comando BUILD o el método Build del objeto Proyect), el registro de errores no se generaba hasta tanto no estuviera terminada la generación. Con lo cual, si la generación era cancelada por VFP o por el desarrollador no quedaba registro de error con sus correspondientes inconvenientes para la rápida depuración y corrección de los mismos. Además, en VFP 9.0, si al Generar tiene el Depurador activo y si está abierta la ventana de salida del Depurador, pues es mejor todavía, porque se muestran allí los errores. Hay una entrada por cada programa, clase, método que se recorre. Veamos un ejemplo:

    • Se pueden arrastrar archivos de cualquier tipo al Administrador de proyectos, quien se encarga de distribuirlos en las fichas correspondientes.

Administrador del Panel de Tareas

Esta utilidad es bastante poco explotada por los desarrolladores VFP, fue incorporada en la versión 8.0. Se recomienda su utilización por los aportes que puedan reportar en cuanto a organización y productividad de trabajo en equipos.

Se le han agregado al panel Entorno de datos las fichas Field mapping y Forms, contiene configuración de entorno, fichero de recursos, clases para enlazar campos y formularios base.

Nuevo panel - Data Explorer

Permite examinar datos y componentes en Bases de datos VFP, Bases de datos SQL Server, tablas libres VFP, o cualquier otro ODBC u OLE DB que emplee una base de datos vía una conexión ADO. Los que están familiarizados con el Administrador corporativo de SQL Server verán muchas similitudes. La ventaja es que esta herramienta trabaja con todos los tipos de datos (no sólo SQL) y está completamente integrada en el IDE de VFP y siguiendo la tradición, es extensible. Esta herramienta ofrece:

  • Una vía para ver información de recursos de datos VFP, SQL Server y ADO
  • Acceso rápido a los datos como tal
  • Mantenimiento centralizado de múltiples bases de datos sin la necesidad de cambiar a diferentes carpetas, servidores o proyectos
  • Posibilidad de ejecutar consultas como hace el Analizador de consultas de SQL
  • Funcionalidad similar al VS Internet Explorer
  • Valor de uso añadido al arrastrar y soltar. - Si arrastramos una tabla de VFP se escribe la sentencia del comando Select SQL. Pero lo bueno de verdad es cuando se arrastra una tabla de una DBC que se encuentra en un servidor SQL. El texto generado, crea la conexión un CursorAdapter, llena sus propiedades, llena el cursor y prepara todo el tratamiento de errores.

Dedicaremos un escrito aparte a comentar sobre el Panel de tareas en general y sobre este nuevo panel en particular.

Ventanas de código

Aunque ninguno de los cambios son revolucionarios, todos ellos simplifican la tarea diaria de escribir el código. Veamos algunas mejoras.

  • IntelliSense funciona en comandos WITH ... ENDWITH y FOR EACH ... ENDFOR cuando se indica la cláusula AS IntelliSense es válido también para WITH THIS
  • Compilación inmediata: Hace que aparezca un indicativo en la medida que vamos escribiendo y desaparece al terminar de escribir correctamente la línea de código. El indicativo se puede configurar desde el Menú Herramientas – Opciones – Ficha Editor – Background compile activa un combobox con las opciones: color rojo / color gris / subrayado / ninguno (esta última es para desactivas esta funcionalidad: Es utilizada por programadores expertos, ya que la compilación inmediata retrasa la productividad.)
  • Imprimir texto seleccionado: Una nueva opción en el rango de impresión, permite imprimir un texto seleccionado o todo el código.
  • Copiar código con formato: El código impreso en documentos Word mantiene la coloración y estilo. El color en la sintaxis se introdujo en VFP 5.0, en 8.0 se agregó la posibilidad de imprimir código a color; pero solo desde VFP. Ahora el código VFP mantiene su coloración y estilo en documentos, lo que facilita la lectura de código en artículos.

Diseñador de Menús

Se han pedido mejoras en el diseñador de menú y el FoxTeam en lugar de presentar un diseñador nuevo ha brindado la posibilidad de extenderlo con las funcionalidades que necesiten los desarrolladores. La nueva variable del sistema _MENUDESIGNER indica la aplicación o ejecutable que se va a invocar para diseñar el menú, de forma predeterminada es el diseñador de menú de VFP. Se puede modificar desde opciones ficha File Location o mediante código de programa.

_MENUDESIGNER = "d:\WLCProjects\DevTools\MenuDesigner\MenuDesigner.exe"
 _MENUDESIGNER = "d:\AMBYprojects\DevTools\MenuDesigner\MenuDesigner.exe"

La ventaja es que restablecer el diseñador de menú es tan sencillo como

_MENUDESIGNER = SPACE(0)
_MENUDESIGNER = SPACE(0) && ó
 _MENUDESIGNER = "" 

A partir de esto, abra y modifique su menú desde el diseñador nativo o el propio, como ha trabajado habitualmente. Este generador debe devolver un valor lógico

Se han implementado los scripts MENUHIT y MENUCONTEXT FoxCode.DBF, que podemos utilizar para interceptar selecciones hechas en el menú del sistema de VFP y para interceptar menús contextuales de VFP respectivamente.

Depurador

En VFP 9.0, funciona IntelliSense dentro del depurador, es de gran ayuda cuando escribimos el nombre de una propiedad en la ventana Examinar.

Misceláneas

  • Dentro de un Browse se agrega la posibilidad de Buscar siguiente (Find Next) con F3
  • Las propiedades Input y Format se han completado con nuevos caracteres:
    • U: sólo caracteres alfabéticos, directamente escritos en mayúsculas
    • W: sólo caracteres alfabéticos, directamente escritos en minúsculas
    • Z: Muestra el valor en blanco, la novedad es que es aplicable a los datos tipo Fecha.

Conclusiones

Pues ya está, hemos trabajado los datos y creado la interfaz, ahora queremos dejarle el resultado de los datos procesados en forma de informes. Por la importancia del tema Informes en VFP 9.0 dedicaremos otro artículo

Saludos,

Ana María Bisbé York
www.amby.net