Reporte de la Conferencia DevEssentials 06.06.2004 –
Sesión mañana
Por Amby
A pesar de ser domingo en la mañana, cuando eran las
8.00 AM, estaba el salón lleno para comenzar la segunda jornada de trabajo
de la Conferencia DevEssentials 2004
Planes de Microsoft. Perspectivas para el
desarrollador. Por Dave Schmitt – Especialista principal de tecnologías
en Microsoft.
El Sr. Schmitt comentó sobre la estrategia y hoja de
ruta presente y futura en la que está trabajando y basando su estrategia
Microsoft. Comenzó diciendo que Microsoft es por y para los usuarios, por y
para los desarrolladores de aplicaciones. Microsoft está interesada en las
perspectivas, proyectos, roles y comunidades de desarrolladores, porque de
ellos depende su negocio.
Expresó el concepto de .Net Enterprise Union como
Usuarios + Operaciones + Ventas + Suministros + Ingeniería, en estos
aspectos incluyó temas como Servicios Web XML, la transmisión y el rol de
experiencias, la seguridad en la red.
Estrategia de Microsoft: Está enfocada en dos
puntos fundamentales:
Usuarios: Proporcionar un soporte
fuerte, especialmente para los nuevos usuarios, fomentar trabajo en las
comunidades para aplicar los productos y técnicas más novedosas y trabajar
de forma constante, al lado del usuario de productos Microsoft.
Negocios: Propicia la interoperabilidad
y la inclusión de herramientas de terceros (add-ins propios)
Productos: Microsoft tiene una gran gama
de productos que comprenden casi todos los tipos de dispositivos (device) y
cubren casi todos los tipos de aplicaciones.
Muchos productos son bloques de negocio, son
componentes programables.
Muchos productos son plataformas, soportan productos
de otros
La estrategia de productos / plataformas está
unificada; pero… está limitada por la tecnología actual y .Net necesita
superar estas limitaciones.
Sobre la hoja de ruta comentó brevemente:
2003
VS.Net,
Windows Server 2003, MS Office, VS Office Tools WSE 2.0
En Octubre 2003 –
Conferencia de desarrolladores
2004
Yukon, Widbey
2005
Longhorn, Orcas
De ambos se espera sacar
una Beta en 2005, con libre descarga y el producto en 2006
Sobre los desarrolladores en .Net comentó que
actualmente hay un incremento considerable de desarrolladores .Net, que
cada vez más se adopta la plataforma .Net en nuevos desarrollos. Mostró
varios estudios comparativos donde se ve la curva que muestra este
incremento.
Hizo un breve resumen de Whidbey. Lo definió
como el corazón de la tecnología.Net. El lenguaje, IDE y las nuevas
características aportan más comodidades al programador, por simplificar la
programación, ayuda en captura de errores, mejoras en cuanto a
productividad y seguridad, simplifica el desarrollo para los llamados Smart
Clients.
Habló sobre las mejoras de ASP.Net 2.0, productividad,
extensibilidad, modelos consistentes para almacenar y para Interfaz de
usuario. Tiene significativas extensiones o sustituciones de subsistemas
significativos, con fácil adaptación al entorno existente. Con relación a
la Interfaz de usuarios: cómodos controles, fácil adaptación a las
características de interfaz de Longhorn, mejoras en la administración de
configuraciones, ya que introduce API de configuración que ofrece acceso de
lectura/escritura a las aplicaciones y otras.
Comentó sobre la Interoperatibilidad entre las
versiones actuales y las futuras que se están desarrollando. Según
Microsoft “Nadie lo hace mejor” (Nobody does it Better)
Hizo un resumen sobre las características de
Longhorn.
-
Soporta toda la tecnología anterior, porque tendrá una fuerte
compatibilidad.
-
Es la futura versión de Windows.
-
Va a introducir un Manager OS API.
-
Está enfocado en tres áreas primarias:
o
presentación (Avalón – introduce método unificado para
Interfaz de usuario)
o
Datos (Win FS)
o
Comunicaciones (Indigo)
Para finalizar, resume diciendo que:
-
.Net está diseñado para múltiples lenguajes
-
Visual Studio soporta múltiples compiladores
-
Todos los lenguajes Inter-operan con .Net
Pues hasta aquí, un breve resumen de lo expresado… ¿y
dónde está el Fox? … Pues, … no está, ya lo vemos y no está por dos
razones, primero porque DevEssentials en una Conferencia con tres tópicos
que son Fox, SQL y .Net y esta conferencia estaba dedicada a los
especialistas en .Net. Otra razón es que el ponente estaba repitiendo la
sesión que había ofrecido en un público eminentemente .Net, por lo que se
disculpó al no tener información sobre Visual FoxPro. Y … aunque ya sabemos
que la información sobre VFP la tenemos de primera mano del Product
Manager, Ken Levy, de todas formas, les dejo la dirección de correo
electrónico ofrecido por Dave Schmitt – Especialista principal de
tecnologías en Microsoft, para todo aquel que desee comunicarse y obtener
información.
dschmitt@microsoft.com
Pues, … seguimos, café en mano, vamos en busca de un
tema muy importante, vamos a escuchar sobre Office Automation, de la mano
de una experta – Tamar Granor. Voy con su libro, Microsoft Office
Automation, recién comprado, para pedirle una firmita.
Office Automation avanzada
(Advanced Office Automation) Tamar Granor Microsoft Most Valuable
Professional (VFP)
Tamar Granor ha expuesto temas de Automation en varias
oportunidades en Conferencias de desarrolladores, parece como si todo
estuviera dicho, nos comenta que comenzar a emplear Automation no resulta
complicado, las tareas cotidianas se pueden programar desde VFP, lo que
está debidamente comentado y documentado, el objeto ahora es más bien ver
las tareas más complejas, que incluyen las respuestas a eventos de Office,
situaciones como abandono de sesión, caídas de servidor, etc
Existen diferencias entre los componentes de Office
que hay que tener en cuenta, porque afecta el proceso de Automation desde
VFP.
1.- Al instanciar y crear múltiples
instancias mientras Excel y Word permiten crear múltiples instancias,
PowerPoint y Outlook están restringidas a únicas instancias. Las
implicaciones de estas diferencias están dadas a las referencias que se
hacen desde VFP, para múltiples instancias, múltiples referencias, para
PowerPoint y Outlook se pierde la referencia anterior por la nueva que se
está creando.
Muestra como si probamos crear una instancia de
PowerPoint vía Automation y otra desde la interfaz de Windows, en la lista
de tareas de Windows, vemos que aparece una sola instancia de PowerPoint,
así que … cuidado que tiene trampa, no son todos iguales.
2.- Al salir de Word, PowerPoint o
Outlook el ejecutable se cierra; pero en Excel, queda aun en memoria, hasta
que se libere la variable que creó la referencia al mismo. Esto es
importante ya que requiere comprobaciones en el código.
IF VARTYPE(oWord) = "O" AND
TYPE("oWord.Name") = "C"
* El servidor está
funcionando
ENDIF
Esto… no funciona en Excel, para ello Tamar nos
propone el siguiente código, donde emplea una propiedad
lShouldBeVisible, la que
hay que verificar ante cualquier acción relacionada con el servidor:
LOCAL lReturn
IF IsNull(oXL)
* No hay servidor instanciado
lReturn = .F.
ELSE
* Compara el valor Visible actual, para
explorar la visibilidad
IF oXL.Visible =
lShouldBeVisible
* Coinciden, quiere decir que el servidor está abierto y funciona bien
lReturn = .T.
ELSE
* No coinciden, quiere decir que
* es possible que el usuario abandonó la
sesión.
lReturn = .F.
ENDIF
ENDIF
RETURN lReturn
3.- Visibilidad en Power Point, no se
puede acceder muchas de sus propiedades si no está visible (Ej.
ActivePresentation), y una vez que se hizo visible no se puede ocultar,
este comando da error:
oPowerPoint.Visible = .F.
4.- Plantillas
en Excel y PowerPoint, al crear un documento, simplemente hace una copia de
la plantilla como punto de partida, en Word, por su parte, un documento
nuevo contiene copias de los estilos y las macros de la plantilla. Esto
significa que al hacer cambios en la plantilla estarán reflejados en los
documentos que se basen en ellas.
Cierre de servidores
Pasamos al tema de servidores que se han cerrado por
causas de código ineficiente, acción del usuario, fallas del sistema
operativo, etc. Tamar, emplea varias APIs de Windows para:
-
Buscar cada instancia de la aplicación
-
Verificar si aun está o no visible
-
Si no está visible, la detiene
Aquí les dejo el código:
FUNCTION KillApp
*=================================================
* Program: KillApp.PRG
* Purpose: Cierra cualquier instancia
invisible de una aplicación
* Author: Tamar E. Granor
* Copyright: (c) 2002 Tamar E.
Granor
* Last revision: 04/16/02
* Parameters: tcClassName -
the classname of the app to close
* Returns: Cantidad de
instancias cerradas; -1, si es parámetro problems
*=================================================
#DEFINE GW_CHILD 5
#DEFINE GW_HWNDNEXT 2
#DEFINE WM_CLOSE 0x10
LPARAMETERS tcClassName
ASSERT VARTYPE(tcClassName) =
"C" AND NOT EMPTY(tcClassName) ;
MESSAGE "KillApp: Es necesario pasar el
nombre de la clase de la aplicación a cerrar"
IF VARTYPE(tcClassName) <> "C"
OR EMPTY(tcClassName)
ERROR 11
RETURN -1
ENDIF
DECLARE LONG GetDesktopWindow IN
win32api
DECLARE LONG GetWindow IN
WIN32API LONG hWnd, LONG wCmd
DECLARE LONG IsWindowVisible IN
WIN32API LONG hWnd
DECLARE LONG GetClassName IN
WIN32API LONG hWnd, STRING lpClassName, LONG nMaxCount
DECLARE LONG PostMessage IN
WIN32API LONG hwnd, LONG wMsg, LONG wParam, LONG lParam
LOCAL lnDesktopHWnd, lnHWnd,
lnOldHWnd, lcClass, lnLen, nClosedCount
lnDesktopHWnd =
GetDesktopWindow()
lnHWnd = GetWindow(
lnDesktopHWnd, GW_CHILD)
lnClosedCount = 0
DO WHILE lnHWnd <> 0
lcClass = SPACE(256)
lnLen = GetClassName( lnHWnd,
@lcClass, 256)
lnOldHWnd = lnHWnd
lnHWnd = GetWindow(lnOldHWnd,
GW_HWNDNEXT)
IF UPPER(LEFT(lcClass,
lnLen)) = UPPER(tcClassName)
lnVisible =
IsWindowVisible(lnOldHWnd)
IF lnVisible = 0
PostMessage( lnOldHWnd,
WM_CLOSE, 0, 0)
lnClosedCount =
lnClosedCount + 1
ENDIF
ENDIF
ENDDO
RETURN lnClosedCount
Un ejemplo concreto para Word podría ser:
FUNCTION KillWord
*=================================================
* Program: KILLWord.PRG
* Purpose: Cierr cualquier instancia
invisible de Microsoft Word
* Author: Tamar E. Granor
* Copyright: (c) 2002 Tamar E.
Granor
* Last revision: 05/10/2002
* Parameters: (None)
* Returns: Cantidad de
instancias cerradas
*=================================================
LOCAL lnKilled
lnKilled = KillApp("OpusApp")
RETURN lnKilled
Ortografía
Luego ejemplificó como trabajar la ortografía desde
varios componentes de Office. Sobre este tema vemos que:
-
VFP no trae control ortográfico
-
No se puede utilizar el motor de control de ortografía fuera de las
aplicaciones Office, como un producto stand-alone, sólo se puede desde
dentro de las aplicaciones.
-
Existen
varias posibilidades de solucionar, por ejemplo: utilizando el método
CheckSpelling (para
resultados del tipo Verdadero/Falso), y otra es con el método
GetSpellingSuggestions
(para correcciones)
Trabajar con propiedades de los
documentos
Todas las aplicaciones Office
permiten trabajar con propiedades para sus documentos y permiten definir
propiedades personalizadas, aunque la forma de mostrarlas varía entre las
aplicaciones. Es muy importante el trabajo que se hace con las colecciones,
lo cual tiene matices en dependencia de la aplicación Office de que se
trate. Sobre esto hay que tener en cuenta que los elementos hacen una copia
de las colecciones y los cambios no impactan al original.
Responder a eventos de Office
Existen dos métodos para
trabajar con los eventos de Office.
El primero, función
EventHandler() es útil sólo cuando sabe que su aplicación VFP se está
ejecutando cuando el usuario está trabajando en Office. Para ello es
necesario, utilizar el Examinador de objetos para encontrar la interfaz,
luego se arrastra desde allí para crear un esqueleto del código, instanciar
la clase manipuladora de eventos (event handler class) y el servidor y
enlazar con EventHandler().
El segundo método puede
utilizarse también cuando no haya aplicación VFP en ejecución, para ellos
es necesario crear un add-in, que es un documento especial en estas
aplicaciones, que contiene código, pueden ser cargados interactivamente o
via Automation.
Un manipulador de eventos
add-ins necesita dos componentes: Una clase que contenga el código del
manipulador de eventos y un código aparte que conecte esa clase con la
aplicación, que es justo lo que hace el EventHandler().
Entonces, es necesario, crear
un add-in con código VBA en el editor Visual Basic, utilizar Automation
para abrir un servidor y cargar un add-in y luego enlazarlo a los datos VFP
via ADO u objeto COM.
Puede esta forma hemos visto
como Automation es mucho más que crear, abrir, imprimir, guardar y cerrar
documentos… nos queda como siempre mucho por seguir estudiando…. Me voy con
mi libro firmado por la autora y la ilusión de leerlo lo más pronto posible
para profundizar en estos temas.
… Voy en busca de otro café… el
tema ahora es más sencillo…
De nuevo con Cathy Pountney,
esta vez para comentar sobre trucos y experiencias con el IDE de VFP y les
aseguro que habrá para todos… Antes de comenzar le pido a Cathy haga una
foto de los asistentes a su sesión, que como siempre está llena hasta el
tope.
Secretos ocultos del IDE de VFP – (Hidden
Secrets of the VFP IDE) Cathy Pountney
Por Amby
Nos confiesa que siempre empieza por los informes, es
que Cathy es una apasionada al tema, ya lo vimos ayer, es una experta, ha
escrito mucho sobre el Generador de Informes y lo explica con verdadera
pasión, veamos:
Diseñador de informes.
- Navegar entre objetos - En VFP 8,
puede navegar entre los controles de un informe simplemente utilizando
Tab para el control siguiente y Shift+Tab para el control anterior.
- Modificar una etiqueta existente -
Seleccione el objeto y luego presione Ctrl+E, lo que activa el modo
edición.
- Selección múltiple entre objetos –
Para VFP 9.0, tenemos el cuadro de diálogo Selección Múltiple, que deja
establecer las propiedades Imprimir cuando (Print when) y
Protección (Protection) para los objetos que han sido seleccionados,
todos los selecciondos de una sola vez, ¡¡¡ Bien !!! Si se desea
establecer las propiedades para todos, Ctrl.+A y ya está. Aquí, un
detalle más …, la opción Ordenar por (Sort by), permite ordenar
por Tipo (Type) o Localización (Location) dentro del informe
Diseñador de formularios
-
Llegar a los objetos dentro de los
contenedores – Esto me
gustó mucho, ahorra tiempo. Con Ctrl+Clic sobre un objeto VFP “pasa por
encima” del contenedor y nos permite tomar el control del objeto que está
dentro. Hay más, si existen contenedores dentro de otros contenedores,
puede utilizar Ctrl+Shift+Clic para profundizar aun más en el
nivel.
- Controles ListBox y
ComboBox El carácter “\” tiene significado
especial para habilitare inhabilitar elementos entre otros.
- Controles Grid – Cuando está dentro
del grid, Tab mueve el cursor entre sus columnas, utilice Ctrl+Tab para
navegar hacia el control posterior al grid o Ctrl+Shift+Tab el control
anterior.
Editor – El editor es el sitio donde solemos
pasar más tiempo, de ahí la importancia de aplicar estos trucos y ahorrar
el mayor tiempo posible.
- Vista de documento – Para navegar a
través de elementos de la lista, Ctrl+PageUp y Ctrl+PageDown. No necesita
saltar a la Vista de documentos, navegar por el, y luego saltar al
programa.
- Marcadores – Para mí esto es
novedoso, el empleo de marcadores para, saltar entre diferentes secciones
de código, para ello, hay que marcar la ubicación existente presionando
Alt+Shift+F2. Luego, ir al otro código
que necesita mirar y al finalizar, presionar F2 ó Shift+F2 para regresar
al código anterior
- Cuadro de diálogo Buscar - Al
utilizar el carácter “\” no buscará el carácter de barra inversa, en su
lugar, provocará que el diálogo Buscar busque otros caracteres
especiales. Hay varias combinaciones: \t, \r, \n, \\, Ah y les cuento que
“\r” y “\n” tienen algunas trampas. Desde este mismo cuadro de diálogo
se permite el uso de caracteres comodines, que fueron ejemplificados por
Cathy.
- Operadores expansión, Se cumple que:
cVar++ y barra espaciadora se convierte en cVar = cVar + 1, ¿lo sabían?
Pues yo no y me ha parecido muy bueno, ahorra tiempo y evita muchos
problemas de errores de escritura.
Ventana Propiedades
Esta ventana ha tenido muchas mejoras en la nueva
versión de VFP, 9.0, incluyendo una ficha nueva, Favoritos (Favorities).
Además hay varios aspectos que se pueden personalizar:
-
Fuente (Font) – Clic derecho – Font y se abre el
cuadro de diálogo para seleccionar la fuente
-
Colores – Se pueden establecer diferentes colores de
fuente, que identifiques los diferentes tipos de Propiedades, métodos y
eventos (ActiveX, Propiedades no predeterminadas, propiedades instanciadas,
propiedades custom)
Nos habló también de las ventanas Comandos, y
Examinar se detuvo en algunos comandos, habló del Depurador,
que debatimos ayer, con su IntelliSense incluido en la versión 9.0, el
Task Pane e IntelliSense, que veremos mañana y describió el
resto de las nuevas herramientas que aparecen en el IDE de VFP a partir de
versión 8.0.
¿Sabían que al presionar
Mayúscula y seleccionar el menú Archivos cambia la opción Cerrar
por Cerrar todo y Ocultar
por Ocultar todo? Por su parte Mayúsculas + Formato – Fuente
cambia la fuente de la pantalla, por tanto, cambia la fuente de la pantalla
de VFP.
Es muy útil saber que a partir de
VFP 8, el Administrador de proyectos permite Arrastrar y soltar
múltiples archivos a la vez. Además, el Administrador de proyectos es
suficientemente inteligente como para colocar cada archivo en su ficha
correspondiente, en dependencia de la extensión del archivo. ¡Qué bien!
RTF – En VFP 9.0 el portapapeles mantiene el
formato de texto enriquecido Rich-Text-Format (RTF). Ahora al copiar del
editor de códigos de programa a un
Archivo de Word se mantendrán los colores.
En la versión 9.0 puede definir el formato de fuente –
Font - para el Administración de proyectos – Clic derecho y Fuente (Font) …
dice Cathy que esto es muy bueno, para nosotros que nos estamos haciendo
viejos, y ahora podemos agrandar la letra y ver mejor
J
SYS(1037) – Antes de VFP 9.0 el valor
retornado no era significativo, ahora se le ha incorporado un nuevo
parámetro con valor devuelto que tiene información útil al desarrollador.
Por ejemplo:
SYS(1037,1) – Si el área de trabajo actual contiene
una estructura que coincida con una estructura de FRX se abre el cuadro de
diálogo Configuración de página, en caso contrario, devuelve cero. Si se
abre el cuadro de diálogo devuelve 1 / 0 en dependencia de la acción del
usuario, entonces:
0 – El usuario canceló o
la estructura no es válida
1 – El usuario seleccionó
OK, el FRX se actualizó correctamente.
Ahora si que estamos
acabando, sólo dos pinceladas que nos deja Cathy con ese estupendo buen
humor que tiene.
- Programas libres de errores - ¿Saben
que escribir programas libres de errores, es muy fácil con VFP? Escriban:
ON
ERROR * (Por supuesto, esto no significa que sus programas están
libres de fallas. Significa solamente que no se emitirán mensajes de
error por el sistema).
-
No salir de VFP
- Si no quiere salir de VFP, escriba
ON SHUTDOWN *.
No importa, cuánto se esfuerce, no
podrá salir de VFP. Para reparar los daños, escriba:
ON SHUTDOWN
Esta sesión ha estado interesante y divertida,
les he dejado sólo un resumen, el texto completo sobre estos temas aparece
traducido y publicado en PortalFox. Vea más detalles en los siguientes
enlaces:
http://www.portalfox.com/article.php?sid=1043 y
http://www.portalfox.com/article.php?sid=1044 Además el texto íntegro
de esta presentación que incluye estas y nuevas características para VFP
9.0 estará traducido próximamente en PortalFox, así que … lo mejor es
mantenerse en contacto.
Bueno, un receso para comer que nos queda mucho por
aprender todavía.
Hasta aquí el reporte de la sesión de la mañana.
Espero que sea de utilidad,
Saludos,
Ana
www.amby.net
|