Hola invitado         31 Jul, 2010 - 07:49
Menú principal
 
Ads
 
Patrocinadores
 
Anuncios
 
© 2009 PortalFox
El Administrador de panel de tareas de Visual FoxPro 8.0 visto por dentro (2/2) lecturas 10616
 Enviado por amby en Miércoles, 17 Marzo, 2004
Artículos Segunda y última parte del artículo "Inside the Visual FoxPro 8.0 Task Pane Manager" de Beth Massi, traducido al español por Ana María Bisbé York (Madrid, España) para PortalFox.

El Administrador de panel de tareas de Visual FoxPro 8.0 visto por dentro (Parte 2/2)

Autor: Beth Massi (http://www.BethMassi.com)

Texto original:
-- Inside the Visual FoxPro 8.0 Task Pane Manager -- Abril 2003
http://msdn.microsoft.com/library/en-us/dnfoxgen8/html/vfp8_taskpanemgr.asp

Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para: PortalFox (http://www.portalfox.com)

Se aplica a: Visual FoxPro 8.0


... Continuación

Arquitectura del Panel de tareas

La aplicación Administración del panel de tareas reside en la carpeta raíz (HOME()) de Visual FoxPro y se llama Taskpane.app. Como ha visto ya, el contenido específico de cada panel se guarda en el caché del panel y el Administrador del panel de tareas lo lee para cargar los paneles. El caché contiene archivos estáticos necesarios para ejecutar el panel y el contenido bajado de Internet, en dependencia del tipo de panel y su funcionalidad. De forma predeterminada, el caché del panel está localizada debajo de la carpeta de trabajo HOME(7)+ TaskPane\. Paneles individuales guardan archivos en carpetas basadas en un único ID: HOME(7)+ Taskpane\PaneCache\+IDUnicoPanel . Por ejemplo, de forma predeterminada el Panel Ejemplos de soluciones almacena sus archivos en: \Documents and Settings\UserName\Application Data\Microsoft\Visual FoxPro 8\TaskPane\PaneCache\Microsoft.Solutions\.

Puede cambiar la carpeta de trabajo del Administrador del Panel de tareas y la carpeta del caché del panel desde el botón Options (Opciones) del Administrador del panel de tareas. La aplicación Administrador del panel de tareas lee además las tablas TaskPane.dbf y PaneContent.dbf localizadas en el directorio de trabajo y que almacenan información sobre los paneles instalados y sus sub-secciones de contenido. Al modificar paneles desde el formulario Panel de personalización, se modifican los datos en estas tablas.

La variable del sistema _TASKPANE especifica la ruta y el nombre del archivo para el Administrador del panel de tareas. De forma predeterminada, este camino es la carpeta raíz de Visual FoxPro, y el archivo es TaskPane.app. Sin embargo, puede especificar una ruta y nombre de archivo para _TASKPANE en la ficha Localización de archivos en el cuadro de diálogo Opciones de Visual FoxPro.

Puede pasar un parámetro de cadena al Administrador del panel de tareas que es el ID único del panel, para abrirlo automáticamente.

DO (_TASKPANE) WITH "MICROSOFT.FILER"

Puede pasar además, una opción “-s” para abrir directamente el formulario del Panel de personalización

DO (_TASKPANE) WITH "-s"

Adicionalmente, cuando se abre el Administrador del panel de tareas en el IDE del Visual FoxPro, la variable global _oTaskPane es expuesta.

Todo el código fuente de la aplicación Administrador del panel de tareas está incluido en el archivo Xsource.zip contenido en la carpeta \Tools\XSource\ bajo la carpeta raíz de Visual FoxPro.

Generar paneles con contenido enriquecido.

El Administrador del panel de tareas puede generar paneles que contengan controles Visual FoxPro referidos como contenido enriquecido. Puede ver un par de ejemplos sobre esto: El panel Buscador de ficheros y el panel Buscaminas. Para crear un panel con controles Visual FoxPro, se hereda de las clases incluidas en el Administrador del panel de tareas llamado PaneContainer. Esta clase está disponible cuando el Administrador del panel de tareas se está ejecutando, por tanto no necesita ser distribuida. Puede además modificar el código del panel directamente desde el formulario del Panel de Personalización. Puede hacer esta clase disponible en la carpeta TaskPane en el archivo Xsource.zip.

La clase base de PaneContainer es una clase Container. Puede colocar cualquier tipo de control dentro del panel. No es necesario sobre-escribir ningún método de la clase PaneContainer, pero hay algunos métodos útiles que hay que resaltar.

OnRender(oPane, oContent): Este método es llamado cuando el contenedor es generado. Pasa los objetos oPane y oContent. El objeto oPane mantiene instancia de datos para el panel de tarea que es generada en el Administrador del Panel de tareas, mientras el objeto oContent guarda las referencias a una sección contenida en particular. Debido a que existe una sola sección contenida para los paneles con contenido enriquecido, este método es llamado sólo una vez en la clase PaneContainer. Sin embargo, los objetos oPane y oContent están disponibles también cuando se generan paneles HTML y XML, los que pueden contener múltiples sub-secciones de contenido.

El objeto Pane tiene las siguientes propiedades:

PropiedadDescripción
PaneTableEl nombre de la tabla que guarda el metadato del panel (TaskPane.dbf)
PaneContentTableEl nombre de la tabla que guarda el metadato del contenido del panel (PaneContent.dbf)
CacheDirLa ruta a la carpeta de trabajo del panel de tareas del usuario
CacheHomeDirLa ruta a la carpeta de trabajo del caché del panel de tareas del usuario

El objeto Content tiene los siguientes métodos y propiedades importantes:

GetOption(cOptionName, xDefaultValue): Este método, devuelve el valor de una opción especificada en el panel de tareas Opciones para la sección de contenido. Con este método, puede especificar opcionalmente el valor predeterminado a devolver si la opción está vacía. Todos los valores de las opciones son devueltos como cadena, a menos que xDefaultValue especifique un tipo de dato diferente, en cuyo caso el valor resultante será convertido al tipo de dato antes de ser devuelto.

PropiedadDescripción
CacheDirNombre de la carpeta del caché del panel del usuario
ContentTileNombre de la sección de contenido
UniqueIDIdentificador único de la sesión de contenido
TaskPaneIDIdentificador único del panel al que pertenece la sección de contenido
UserDato del usuario que está contenido en el campo User de la tabla PaneContent

OnResize(): Este método es llamado cuando la ventana del Administrador del panel de tareas se redimensiona. Permite redimensionar los controles del panel contenedor.

OnKeyPress(nKeyCode, nShiftAltCtrl): Este método es llamado cuando el panel tiene el foco y se ha presionado una tecla. Es igual al evento KeyPress de un formulario. Escriba código en este método para atrapar las pulsaciones de teclas desde el panel. Si controla las pulsaciones de teclas (keystroke) y luego devuelve .F. (Falso), esa pulsación no será procesada por el Administrador del panel de tareas. En caso contrario, devuelve .T. (Verdadero) para que funcione normalmente. Por ejemplo:

FUNCTION OnKeyPress(nKeyCode, nShiftAltCtrl)
   IF nKeyCode == 27
      MESSAGEBOX("Ha sido presionada la tecla Escape")
      RETURN .F.
   ELSE
      RETURN .T.
   ENDIF
ENDFUNC

Generar Paneles con contenido HTML / XML

El administrador del panel de tareas puede generar paneles que contengan contenidos XML y HTML utilizando el control ActiveX Explorer Web Browser. Este control muestra el contenido HTML o XML que ha sido creado por el panel basado en la configuración del formulario de Panel de personalización. Existen muchas vías para crear paneles HTML y XML; pero estos paneles típicamente guardan contenido de múltiples orígenes de datos tales como archivos estáticos o tablas en la PC local, archivos en Internet / Intranet, Servicios Web XML, o datos generados desde código. Esto muestra los datos en un único panel. Se hace primeramente creando sub-secciones de contenido y definiendo los métodos de obtención de datos de cada uno desde la ficha Data (Datos) en el formulario del panel de personalización.
Normalmente este dato es devuelto como XML; pero también puede ser HTML o texto estático. Entonces, puede especificar opcionalmente una transformación, que es la manera de cambiar el formato de los datos. La transformación se define típicamente como XSLT y transforma los datos a formato HTML o formato XML estándar. Luego, estas sub-secciones de contenido pueden ser mostradas en su propia área del panel o mostradas juntas, dependiendo de la transformación final.

La vía para que trabajen los procesos de generación es que el dato contenido para cada sección es obtenido como está especificado en la ficha Data (Datos) del formulario del panel de personalización y es transformado como se especifica en la ficha Transform Data (Transformar datos). El dato resultante, para todas las sub-secciones, es colocado en la raíz del contenido y su transformación final es ejecutada antes de que el panel sea mostrado. La figura 11 bosqueja el orden de los pasos involucrados en el proceso de generación para un panel con tres sub-secciones de contenido.


Figura 11 El proceso de generación para un panel XML o HTML con tres sub-secciones de contenido definidas.

Internamente, el Administrador del panel de tareas crea datos fusionados desde todas las secciones de datos transformados que son utilizados como dato para la raíz. El formato del dato depende de cómo el contenido es especificado en la ficha Data (Datos) del contenido raíz. De forma predeterminada, el cuadro combinado Source (Origen) en la ficha Data (Datos) es establecido a Static Text (Texto estático) y se especifica lo siguiente:

<!-- CONTENT -->

Esto indica que internamente el formato del dato fusionado es una concatenación de todas las sub-secciones de contenido, Por ejemplo, si cada sub-sección creada antes produce el siguiente dato después de su transformación:

Esta es mi sección <b>X</b>

Donde X es el número de sección, que finaliza cuando el siguiente dato fusionado como el dato en el contenido raíz:

Esta es mi sección <b>1</b>
Esta es mi sección <b>2</b>
Esta es mi sección <b>3</b>

Entonces, si se especifica, la transformación final de la raíz se aplica a este dato. La transformación final opera típicamente en datos XML devueltos desde las sub-secciones. En este caso, puede definir elementos raíz XML y colocar la concatenación de sub-secciones y datos entre estas etiquetas.

<MyRootData>
   <!-- CONTENT --> 
</MyRootData>

Por ejemplo, si cada sub-sección produce el siguiente dato:

<MySubsectionData>Esta es mi sección X</MySubsectionData>

Donde X es el número de la sección, que finaliza cuando el siguiente dato fusionado como el dato del contenido raíz:

<MyRootData>
   <MySubsectionData> Esta es mi sección 1</MySubsectionData>
   <MySubsectionData> Esta es mi sección 2</MySubsectionData>
   <MySubsectionData> Esta es mi sección 3</MySubsectionData>
</MyRootData>

Entonces, si se especifica, la transformación final de la raíz es aplicada a este dato. Los paneles Comunidades y Administrador de entorno utilizan datos fusionados de esta manera.

Puede especificar además que el formato de los datos fusionados debe ser expresado como XML en lugar de una simple concatenación especificando lo siguiente como un dato de la raíz:

<MyRootData>
   <!-- XMLCONTENT --> 
</MyRootData>

En este caso, el dato fusionado interno es un fragmento XML que se coloca entre la raíz XML que define. El fragmento XML para una única sub-sección tiene el formato siguiente:

<PaneContent id="uniqueid">
   <PaneTitle>Content Subsection Title</PaneTitle>
   <HTMLText>
      <![CDATA[Aquí es donde es colocada su sub-sección de contenido transformada]]>
   </HTMLText>
</PaneContent>

Por ejemplo, si cada sub-sección produjo el siguiente dato después de su transformación:

Esta es mi sección <b>X</b>

Donde X es el número de esta sección, puede finalizar con el siguiente dato fusionado como el dato para el contenido raíz:

<MyRootData>
  <PaneContent id="uniqueid1">
   <PaneTitle>Sección 1</PaneTitle>
   <HTMLText>
     <![CDATA[Esta es mi sección <b>1</b>]]>
   </HTMLText>
  </PaneContent>
  <PaneContent id="uniqueid2">
   <PaneTitle>Sección 2</PaneTitle>
   <HTMLText>
     <![CDATA[Esta es mi sección <b>2</b>]]>
   </HTMLText>
  </PaneContent>
  <PaneContent id="uniqueid3">
   <PaneTitle>Sección 3</PaneTitle>
   <HTMLText>
     <![CDATA[Esta es mi sección <b>3</b>]]>
   </HTMLText>
  </PaneContent>

</MyRootData>

Entonces, si está especificado, la transformación final se especifica en este dato. Esta técnica está utilizada en los paneles Inicio, Ejemplos de soluciones, y Servicios Web. Note una cosa: no se desoriente por el nombre del elemento <HTML Text>. El dato aquí no tiene que ser HTML, aunque generalmente lo es. Este elemento representa datos desde la sub-sección con independencia del formato, con lo cual tiene total flexibilidad en la vía que define su contenido. Su cabeza puede girar hasta este punto; pero verá ejemplos utilizando datos fusionados desde sub-secciones de contenido al crear paneles de tareas HTML y XML.

Usar Manipuladores integrados. (Built-In Handlers)

Los manipuladores, son la vía para hacer que corra el código de Visual FoxPro. Permiten especificar el código a ejecutar cuando se hace clic sobre los hipervínculos en un panel y los hipervínculos comienzan con vfps:. Ya ha visto ejemplos de esto al crear un panel estático HTML que muestra hiperenlaces que abren ventana examinar. Por ejemplo:

<a href="vfps:linkto?url=http://www.algunsitio.com/">Click Me</a>

La sintaxis vfps:linkto?url= llama al manipulador integrado que abre la ventana examinar en una URL especificada. Los siguientes manipuladores están integrados en el Administrador del panel de tareas y pueden ser utilizados directamente desde hiperenlaces en su panel de tareas:

vfps:refresh: Refresca el panel.
Example: vfps:refresh

vfps:linkto: Abre la ventana examinar en una URL determinada.
Parameters: url=cUrl
Example: vfps:linkto?url=http://msdn.microsoft.com/vfoxpro/

vfps:gotopane: Activa un panel específico en el Administrador del panel de tareas. Parameters: uniqueid=cPaneUniqueID
Example: vfps:gotopane?uniqueid=Microsoft.start

vfps:help: Muestra la ayuda para un tópico o ID específico.
Parameters: ID=cTopicID, Topic=cTopicName
Examples: vfps:help?id=1231106
vfps:help?Topic=_taskpane

vfps:options: Muestra el panel de tareas Opciones para un panel.
Parameters: uniqueid=cPaneUniqueID
Example: vfps:options?uniqueid=Microsoft.Start

vfps:message: Muestra un cuadro de mensaje informativo.
Parameters: msg=cMessage
Example: vfps:message?msg = Este es un mensaje

Además, si Refresh está incluido como parámetro el panel es refrescado siempre después de la llamada. Esto es útil cuando el resultado del vínculo puede afectar al contenido del panel, entonces debe ser forzado el refresh. Refresh puede combinarse con otros parámetros, tales como:

vfps:message?msg=Este es un mensaje&refresh

Refresh puede combinarse con otros parámetros en los manipuladores personalizados también.

Codificar Manipuladores personalizados

Los manipuladores personalizados, son aquellos que escribe el desarrollador. Están definidos en la ficha Handler Code (Código del manipulador) del formulario del Panel de personalización. Puede crear acciones personalizadas y manipularlas desde aquí con código de Visual FoxPro. Por ejemplo, para ejecutar el siguiente manipulador debe especificar su propio código del manipulador:

<a href="vfps:Action?Param1=Value1&Param2=Value2">Este es mi manipulador</a> 

Cualquier acción que no pueda ser controlada por manipuladores integrados al Administrador del panel de tareas se pasa a su código para manipulador. Al especificar código para manipulador, se pasan los siguientes parámetros:

LPARAMETERS cAction, oParameters, oBrowser, oContent 

cAction: La acción del texto luego de vfps: y antes de cualquier parámetro. En el ejemplo precedente la acción es Action.

oParameters: Colección de parámetros especificados. Para devolver un valor puede utilizar la sintaxis habitual Item(x) syntax, o puede llamar a la función GetParam con el nombre del parámetro:
Value1 = oParameters.GetParam("Param1")

La ventaja de utilizar GetParam es que envuelve la llamada en un TRY/CATCH de tal forma que no obtiene error si no existe el parámetro.

oBrowser: Guarda la referencia de objeto al objeto Window en el examinador de controles del panel como tal. Puede utilizarlo para acceder a métodos y propiedades DHTML si fuera necesario, por ejemplo:
oBrowser.document.all("SearchResults").style.display = "none"

oContent: Guarda la referencia a la definición del panel de contenido, de tal forma que pueda obtener los valores de las opciones y la carpeta de caché del panel especificado en Opciones del Administrador del panel de tareas. Es el mismo objeto que se pasa con el método OnRender para los paneles con contenido enriquecido.

Los manipuladores personalizados se utilizan en los paneles de tareas de Microsoft para abrir archivos y ejecutar aplicaciones. Por ejemplo, de un vistazo al siguiente código de manipulador para el panel Inicio:

LPARAMETERS cAction, oParameters, oBrowser, oContent
LOCAL cFilename
m.cFilename = oParameters.GetParam("filename")
DO CASE
    CASE m.cAction == "doapplication"
        IF EMPTY(m.cFilename)
            m.cFilename = oParameters.GetParam("appname")
        ENDIF
        IF !EMPTY(m.cFilename)
            DO &cFilename
        ENDIF
    CASE m.cAction == "doform"
        IF !EMPTY(m.cFilename)
            DO FORM &cFilename
        ENDIF
ENDCASE 

Este código, define manipuladores para dos acciones personalizadas: doApplication y doForm. FileName (nombre de archivo) y/o appName (nombre de la aplicación) se pasa como un parámetro y se utiliza para ejecutar la aplicación en el formulario. Si necesita esta funcionalidad en su panel, puede copiar este código en su código de manipulador.

Mostrar Mensajes de error

Los mensajes de error se muestran en los paneles HTML y XML como una zona colapsable / expandible en la parte superior del panel. El Administrador del panel de tareas automáticamente muestra un error cuando se encuentran problemas de conectividad con contenido de Internet y los Servicios Web XML.

Adicionalmente, en los paneles de Microsoft, la configuración de errores se muestra cuando no se ha especificado información para una opción que el panel necesita. Por ejemplo, el panel Comunidades necesita verificar la contraseña (password) y nombre de usuario de Universal Thread para acceder a sus noticias. Si la opción Universal Threath News (Noticias Universal Threath) está seleccionada, debe suministrar su nombre de usuario y palabra de paso. Si no lo hace, el panel mostrará un mensaje en la parte superior del área del panel. (Figura 12)


Figura 12 Los mensajes de error se muestran si se detectan problemas de conectividad con Internet o si no está especificada información necesaria en las opciones del panel.

Puede mostrar errores personalizados, cuando el origen del dato contenido es especificado en la ficha Data (Datos) del formulario del panel Personalización está establecido a Script. En este caso, el objeto oContent se pasa al código script y puede utilizar un método LogError para mostrar un mensaje de error personalizado. Por ejemplo, el código siguiente trata de utilizar una tabla que no existe y muestra un error titulado My Error con un mensaje de excepción, y crea además un vínculo Options (Opciones) que abre el panel opciones para la sección de contenido específica:

LPARAMETERS oContent
LOCAL cXML
TRY
    USE Sometable IN 0 SHARED
    CURSORTOXML(Sometable, cXML)
CATCH TO exc
    oContent.LogError("My Error", exc.Message, "Options", ;
                  "vfps:options?uniqueid=Massi.contentsection1")
    cXML = ""
FINALLY
    IF USED("Sometable")
        USE IN SomeTable
    ENDIF
ENDTRY
Return cXML

Especificar Opciones de panel

Las opciones de panel, para todos los paneles instalados se muestran en Opciones del Administrador del panel de tareas haciendo clic en el árbol a la izquierda en el panel de categorías. Si existen opciones para el panel o las sub-secciones de contenido del panel, se muestran a la derecha.

Puede especificar un dato de opción, para una sección de contenido de un panel particular en la ficha Opciones, con el formulario panel de Personalización. Para los tipos de paneles XML y HTML, las opciones pueden ser especificadas sólo en sub-secciones de contenido. Para páginas Web y controles de Visual FoxPro las opciones son especificadas en la raíz de la sección de contenido. Al crear una opción en la ficha Option (Opciones), especifica el nombre de opción en el código, el tipo de control que puede crear y el encabezado que puede mostrar en el panel de tareas Opciones. Puede especificar además valores asociados a las propiedades comunes con la opción del control del control que ha creado InputMask, PasswordChar, Width, o alguna otra propiedad que necesita para asignar agregando nuevas propieddaes en la lista.

Puede acceder a los valores de estas opciones en código a través del método GetOption del objeto Content.

Value = oContent.GetOption(cOptionName, xDefaultValue)

Con este método, puede especificar opcionalmente el valor predeterminado para devolver si la opción está vacía. Todos los valores de las opciones son devueltos como cadena, a menos que se especifique un tipo de dato diferente en xDefaultValue. En este caso, el valor resultante se convierte previamente al tipo de dato.

Los valores de opciones pueden ser accedidos también en las llamadas del método o URL en la ficha Data, de esta forma:

##optionname##

Donde optionname es el nombre de una opción del panel. Esto fusiona el valor en la llamada antes de ejecutarla. Por ejemplo, en la ficha Data (Datos) si especifica que el Source (Origen) es WebService (Servicio Web), puede utilizar los valores de opción en el campo método:
MyWebMethod(##myoption##)

Si el método Web espera un parámetro de cadena, enciérrelo entre comillas:

MyWebMethod("##myoption##") 

Ahora que entiende la arquitectura básica y las características de generación del Administrador del panel de tareas, es el momento de crear paneles avanzados. Creará paneles configurados HTML y XML que muestren contenido desde archivos de Internet, Servicios Web XML y datos XML generados con código Visual FoxPro.

Técnicas avanzadas

Como ya probablemente ha notado, existen muchas vías para crear un panel de tareas. En esta sección, generará un panel de tareas HTML complejo que llama un servicio Web XML, trae contenido dinámico de un archivo de Internet y ejecuta código de manipulador personalizado.

Llamar a un Servicio Web XML.

Para que su primera sub-sección de contenido de un panel, llame a un Servicio Web XML. Puede llamar fácilmente a un servicio Web XML desde el panel de tareas para obtener y mostrar contenido. Por ejemplo, si tiene una intranet en la compañía que proporciona información cooperativa a través de un Servicio Web XML, puede fácilmente servir de interfaz dentro del panel de tareas. De esta misma manera, el creador del servicio Web XML puede publicar paneles de tareas de Visual FoxPro que conecten con sus servicios. Por ejemplo, puede llamar a un servicio Web .NET XML de publicidad disponible que obtiene la información del stock basado en símbolo de stock. Es un buen ejemplo de utilización de información de opciones personalizadas en un panel que quiere coleccionar el símbolo desde Opciones del Panel de tareas.

En el formulario del Panel de personalización, haga clic en el botón New (Nuevo) de la barra de herramientas, y escriba su vendor name (nombre de proveedor), el nombre del panel My HTML, y seleccione HTML como el tipo de panel. La sección de contenido de la raíz del panel My HTML es mostrada en el contenido raíz. Haga clic en el botón Add (Añadir) en la barra de herramientas Content y escriba My Stock Quote en el nombre de la sección de contenido. Puede introducir además un identificador único. En este caso utilice MASSI.QUOTE como el ID único para esta sub-sección. En la ficha Data (Datos), para la Source (Fuente) seleccione Web Service (Servicio Web). Llamar un Servicio Web XML de esta forma es sencillo. El Administrador del panel de tareas manipula internamente la configuración del proxy adecuado para el desarrollador. Sin embargo, si necesita un control más fino el SOAP preguntas y respuestas, puede seleccionar Script como el origen y entrar el código manualmente. En este caso puede seleccionar la casilla de verificación en la parte inferior de la ficha Data (Datos), "Source of this content is from the Internet," lo cual indica que el Administrador del panel de tareas puede mostrar opciones ocultas para la sub-sección del panel en el panel de tareas Opciones.

En el campo WSDL URL , entre la localización del archivo WSDL utilizando el siguiente servicio:

http://www.webservicex.net/stockquote.asmx?WSDL

Debido a que es un servicio Web, puede explorar el servicio navegando su examinador a:

http://www.webservicex.net/stockquote.asmx

Este servicio tiene un método llamado GetQuote que acepta un símbolo de stock como una cadena. Crea una opción para entrar el símbolo de stock en el campo Method como sigue:

GetQuote("##stocksymbol##")

Para crear la opción, seleccione la ficha Opciones, y haga clic en New (Nuevo) para crear una nueva opción. En el cuadro de diálogo que aparece entre el option name (nombre de la opción), "stocksymbol," y caption (encabezado) "Stock Symbol" (Figura 13).


Figura 13. Puede crear opciones de panel personalizadas desde la ficha Opciones para su panel.

Ahora puede especificar la transformación. Este servicio Web XML devuelve información de existencias con formato XML. Por ejemplo, llamar el método GetQuote y pasarle un parámetro de MSFT devuelve lo siguiente:

<StockQuotes>
   <Stock>
      <Symbol>MSFT</Symbol>
      <Last>23.60</Last>
      <Date>2/26/2003</Date>
      <Time>4:01pm</Time>
      <Change>-0.59</Change>
      <Open>24.08</Open>
      <High>24.47</High>
      <Low>23.58</Low>
      <Volume>57314560</Volume>
      <MktCap>252.6B</MktCap>
      <PreviousClose>24.19</PreviousClose>
      <PercentageChange>-2.44%</PercentageChange>
      <AnnRange>20.705 - 32.50</AnnRange>
      <Earns>0.87</Earns>
      <P-E>27.80</P-E>
      <Name>MICROSOFT CP</Name>
   </Stock>
</StockQuotes>

Para mostrar esto en un panel HTML, puede especificar una transformación a un HTML. Puede hacer esto mediante código, o puede utilizar XSLT. Ese código o XSLT puede venir de una localización de Internet, un archivo en su PC, o incluso otro Servicio Web. Para este ejemplo, utilice texto estático y escriba el estilo XSLT definición de hoja. En la ficha Transform Data (Transformación de datos), seleccione XSL como Type (Tipo) y Source (Fuente) como Static Text (Texto estático). El siguiente estilo de hoja transforma solo el elemento siguiente: Name, Symbol, Last, Change y PercentageChange

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="StockQuotes">
    <TABLE BORDER="0" >
      <xsl:apply-templates select="Stock"/>
    </TABLE>
</xsl:template>
<xsl:template match="Stock">
   <TR>
      <TD>Company</TD>
      <TD>: <xsl:value-of select="Name"/></TD>
   </TR>
   <TR>
      <TD>Symbol</TD>
      <TD>: <xsl:value-of select="Symbol"/></TD>
   </TR>
   <TR>
      <TD>Last</TD>
      <TD>: <xsl:value-of select="Last"/></TD>
   </TR>
   <TR>
      <TD>Change</TD>
      <TD>: <xsl:value-of select="Change"/></TD>
   </TR>
   <TR>
      <TD>Change %</TD>
      <TD>: <xsl:value-of select="PercentageChange"/></TD>
   </TR>
   <TR>
      <TD colspan="2"><a href="vfps:options?uniqueid=MASSI.QUOTE">Change Symbol</a></TD>
   </TR>
</xsl:template>
</xsl:stylesheet>

Este estilo de ficha transforma el XML en una tabla HTML. Este HTML es justamente un fragmento de un panel entero. Si lo re-llama, el panel transforma todas las sub-secciones de datos antes de correr su transformación final. En este caso, la transformación final crea un documento HTML entero. Para mostrar las sub-secciones de la definición del panel en sus propias secciones, puede especificar que el dato fusionado desde la sub-sección sea colocado en formato XML. Debe definir la transformación final de tal forma que pueda ver el panel final de salida como ha generado el resto de las secciones.

Seleccione el nodo contenido raíz My HTML desde el árbol contenido, y seleccione la ficha Data (Datos). Seleccione Static Text (Texto estático) como Source (Origen) y luego introduzca la siguiente información:

<VFPData>
   <!-- XMLCONTENT -->
</VFPData>

En la ficha Transform Data (Transformar datos), seleccione XLS como el Type (Tipo) y seleccione Static Text (Texto estático) como Source (Origen). Luego introduzca la final transformación:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" /> 
<xsl:template match="VFPData">
<HTML>
<TITLE></TITLE>
<HEAD>
<STYLE>
  BODY {
     font-family:verdana;
   font-size:9pt;
   }  
  TD  {font-size:9pt}
  TD.TableTitle
     { 
     font-family: Verdana; 
     font-size: 9pt; 
     font-weight: bold; 
     background-color: #0066CC; 
     padding:2px;
     color: #FFFFFF
     }
  TABLE { margin-bottom:12px  }
</STYLE>
</HEAD>
<BODY>
   <TABLE BORDER="0" width="100%" cellpadding="0" cellspacing="0" >
   <xsl:for-each select="PaneContent">
   <TR><TD class="TableTitle"><xsl:value-of select="PaneTitle" disable-output-escaping="no"/></TD></TR>
   <TR><TD ><xsl:value-of select="HTMLText" disable-output-escaping="yes"/></TD></TR>
   </xsl:for-each>
   </TABLE>   
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

Esto define tanto el estilo, para este panel como las salidas de cada uno de los nombres de las secciones contenidas y sus datos transformados. En caso de la sección My Store Quote, los datos transformados es una tabla HTML. Haga clic en Apply (Aplicar) en la parte inferior del formulario del panel de personalización y abra el panel Opciones del Administrador del panel de tareas. Seleccione el panel My HTML desde el árbol y seleccione la categoría My Stock Quote category. Entre un símbolo de stock en el cuadro de texto y haga clic en OK. Navegue por su panel de tareas, y verá la información de Existencias. Notará que existe un vínculo al panel de tareas Opciones para saltar a la opción Stock Symbol directamente desde el panel utilizando un manipulador integrado (Figura 14).


Figura 14 Puede llamar fácilmente un Servicio Web y especificar opciones personalizadas para sus sub- secciones de panel.

Mostrar información dinámica

En la siguiente sección, va a leer el dato desde un archivo de Internet. Esta técnica puede ser una alternativa de llamar un Servicio Web XML si el contenido cambia con menos frecuencia o la información es fácilmente creada por la persona, en lugar de por el PC. Por ejemplo, los vendedores de herramientas, pueden proporcionar vínculos con Ayuda en línea y recursos, papeles blancos y artículos, o su sitio Web comercial al crear un archivo en Internet y hacer que el panel lea ese archivo. Cuando los vínculos son actualizados, la información es actualizada en todos los paneles de los desarrolladores. Microsoft utiliza esta técnica para mostrar información dinámica en los paneles Start (Inicio), Solution Samples (Ejemplos de soluciones) y Servicios Web XML.

Por ejemplo, cree un archivo XML que muestre vínculos con un vendedor de herramientas ficticio llamado “Cool Tools”. El archivo se llama Coolinfo.xml y contiene la siguiente información:

<?xml version='1.0' encoding='windows-1252' standalone='no'?>
<VFPData>
   <content>
      <name>Cool Tools Home Page</name>
         <link>
            <![CDATA[vfps:linkto?url=http://www.massitools.com/default.htm]]>
         </link>
      <desc>Take a tour of all the Cool Tool products!</desc>
   </content>
   <content>
      <name>Cool Tools Reference</name>
         <link>
            <![CDATA[vfps:linkto?url=http://www.massitools.com/help.htm]]>
         </link>
      <desc>Access the Cool Tools Help file.</desc>
   </content>
   <content>
      <name>Cool Tools News</name>
         <link>
            <![CDATA[vfps:linkto?url=http://www.massitools.com/news.htm]]>
         </link>
      <desc>Get the most up-to-date information on Cool Tools.</desc>
   </content>
</VFPData>

Existen tres nodos de contenido definidos en el archivo XML, que contienen una breve descripción y las URLs a las páginas Web de Internet (las URLs en este ejemplo no existen). Este archivo vive teóricamente en el sitio Web comercial de Cool Tools. Por supuesto, este sitio no existe, entonces para este ejemplo puede localizar el archivo en su propio sitio Web o servidor Web local. Sin embargo, el archivo en realidad no tiene que ser un servidor Web. Puede ser localizado en una red compartida, o puede localizarlo en su disco duro local. Tenga en mente que este archivo no se distribuye con el panel de tareas, por lo que colóquelo en su disco duro sólo para hacer las pruebas.

Para establecer la sub-sección de contenido dinámico, haga clic en el botón Add (Añadir) en la barra de herramienta de Contenido y nómbrelo "What's New with Cool Tools." (“¿Qué es lo nuevo con Cool Tools”?) Luego, abra la ficha Data (Datos) y seleccione la URL para el Source (Origen). En el cuadro de texto, entre la URL al archivo:

http://www.massitools.com/coolinfo.xml

Si coloca el fichero en su disco local C con propósitos de pruebas, escriba lo siguiente en el cuadro de texto:

file://c:/coolinfo.xml

Ahora especifique la transformación de este dato en el HTML. Abra la ficha Transform Data (Transformar Datos), seleccione XSL como tipo y Texto Estático como el Source (Origen), y entre la siguiente transformación XSL

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="VFPData">
   <table border="0" width="100%" cellpadding="2" cellspacing="0" >
      <xsl:apply-templates />
   </table>
</xsl:template>
<xsl:template match="content" name="contents">
   <xsl:variable name="linkvar" select="link"/>
   <tr>
<td>               
      <a href="{$linkvar}"><xsl:value-of select="name"/></a>
      </td>
   </tr>   
   <tr>
<td class="description"> 
      <xsl:text>-    </xsl:text><xsl:value-of select="desc"/> 
   </td>
   </tr>   
</xsl:template>
</xsl:stylesheet>

Esto transforma el XML a una tabla HTML que es utilizada en la transformación final del contenido raíz. Ahora el contenido XML contenido en el archivo Coolinfo.xml es descargado de la localización especificada y oculta en dependencia de la configuración del Administrador del panel de tareas. De esta forma si la conexión no puede ser establecida después, se utiliza la copia caché. Si la URL no puede ser alcanzada la primera vez que abra el panel, puede especificar el dato XML predeterminado a mostrar en la ficha Default Data (Datos predeterminados). Típicamente, sólo copie el contenido de los archivos en línea dentro del cuadro de edición (editbox) ficha. Sin embargo, puede colocar cualquier dato debido a que tiene el mismo formato que el archivo offline así que la transformación trabajará correctamente.

Haga clic en Apply (Aplicar), y el panel refresca y muestra la nueva “What's New with Cool Tools" (Figura 15). Puede mirar el contenido XML mostrado en el panel. Si modifica el archivo Coolinfo.xml y hace clic en el botón Refresh (Refrescar) en el Administrador del panel de tareas, la sección contenido se actualiza. Esta es una de las vías que puede empujar contenido dinámico a los escritorios de usuario.


Figura 15 Puede crear sub-secciones del panel de tareas que muestren contenido dinámico desde archivos en Internet.

Utilizar Manipuladores personalizados e interactuar con el examinador (Browser)

Llame ahora el manipulador personalizado desde el hipervínculo y manipule el HTML en el panel desde su código utilizando el objeto browser. Cree el vínculo que reinicia el Internet Information Server en su PC local. Debido a que este proceso puede tomar varios minutos, los mensajes de estado en el panel mientras los servicios IIS son parados y reiniciados nuevamente. Llame a la utilidad en línea del IIS - (iisreset) para hacerlo.

Primero, cree una nueva sub-sección de contenido llamada Utilities. En la ficha Data (Datos), seleccione Static Text (Texto Estático) como Source (Origen). Entre el siguiente código HTML:

<a href="vfps:runbatch?utility=iisreset">Restart IIS</a>
<BR>
<span id=status></span>

Especifica un manipulador personalizado runbath y pasa un parámetro a la utilidad iisreset. Este dato también contiene un elemento vacío <SPAN> que puede utilizar para mostrar mensajes de estado en el panel. En la ficha Handler Code (Código de manipulador) especifique el código a ejecutar cuando se selecciona este enlace.

LPARAMETERS cAction, oParameters, oBrowser, oContent
LOCAL cUtility
cUtility = oParameters.GetParam("utility")
DO CASE
CASE cAction == "runbatch"
   oBrowser.document.all.status.innerText = "Restarting IIS, please wait..."
   RUN &cUtility 
   oBrowser.document.all.status.innerText = "IIS has been restarted."
ENDCASE

Para este ejemplo, puede especificar también el manipulador como iisreset y hard-cod el comando RUN. Sin embargo este proceso demuestra cómo los parámetros devueltos desde el objeto parámetro utilizando el método GetParam. Note además que la actualización de los paneles se realizan por la configuración de la propiedad innerText del elemento <SPAM> al referirse a su ID, estatus. Puede utilizar el objeto oBrowser para acceder al Document Object Model (DOM) y utilizar HTML Dinámico para manipular el panel que hace lo que usted desea. Debido a que está en realidad ejecutando código Visual FoxPro, también tiene acceso a cualquier característica de Visual FoxPro como normalmente lo haría.

Esto le brinda un punto muy importante. Al instalar paneles de tareas desde otros, asegúrese de que confía en el panel del proveedor. Como puede ver, después que un panel de tareas es instalado, puede ejecutar código Visual FoxPro en su contexto de seguridad – entonces, tenga cuidado. Si su plan es convertirse en suministrador de paneles de Internet, debe firmar digitalmente sus descargas. Distribuir paneles dentro de la comunidad de desarrolladores no es más o menos peligroso que intercambiar algún otro código – sólo asegúrese de quien se lo está enviando.

Ahora haga clic en Apply (Aplicar) y el panel refresca para mostrar nuestra nueva sección Utilities. Haga clic en Reset IIS para ejecutar la utilidad de comando e línea iisreset. Note como los mensajes de estado se muestran en el panel (Figura 16).


Figura 16 Puede ejecutar código de manipulador personalizado para realizar cualquier acción desde hipervínculos en sus paneles de tareas.

Si su código de manipulador es largo o complejo puede llamar en su lugar a un programa o biblioteca de clases. En este caso, su manipulador llama al comando DO (o NEWOBJECT) que especifique un nombre de archivo que incluye en su caché de panel. Por ejemplo, puede introducir el siguiente código:

LPARAMETERS cAction, oParameters, oBrowser, oContent
LOCAL cUtility
DO CASE
cUtility = oParameters.GetParam("utility")
CASE cAction == "runbatch"
oUtil = NEWOBJECT("MyUtilities", oContent.CacheDir + "myutilities.prg")
   oUtil.RestartIIS 
ENDCASE

Agregue el archivo (en este ejemplo, Myutilities.prg) seleccionando la opción View Files (Ver archivos) en el formulario panel de Personalización y haga clic en Add (Agregar) en la barra de herramienta Archivos. De un vistazo al panel Soluciones de ejemplos y verá un ejemplo de esta técnica.

Publicar e instalar Paneles de tareas

El formulario del panel de Personalización hace que publicar un panel de tareas sea una tarea muy sencilla. Publicar un panel significa justamente que el contenido del panel y sus archivos son empaquetados en un paquete de distribución. Este paquete es un archivo XML que permite una distribución sencilla e instalación de paneles en Administradores de paneles de otros desarrolladores. Para publicar un panel, seleccione el nombre del panel, y haga clic en el botón Publish (Publicar) en la barra de herramientas del panel. Se pregunta de qué forma exactamente lo quiere publicar. Puede publicar paneles enteros o sólo secciones que deben ser actualizadas (Figura 17).


Figura 17 Puede publicar paneles enteros o solamente secciones de paneles que tenga adaptados.

De forma pre-determinada aparecen seleccionados Publish all content in pane (Publicar todo el contenido del panel) y Publish files associated with the pane (Publicar archivos asociados con el panel). Esto indica que todas las secciones de los paneles y todos los archivos en el caché del panel se empaquetan en un archico XML de instalación del panel. Si selecciona Publish select content only (Publicar sólo el contenido seleccionado) los datos y archivos relativos a las secciones contenidas que se seleccionan de la lista se colocan en el archivo XML. Si selecciona Publish files common to all panes (Publicar los archivos comunes a todos los paneles), todos los archivos en la raíz del caché también se publican. Estos archivos se utilizan por el Administrador del panel de tareas para formatear errores y presentar mensajes de estado, así que no es necesario que seleccione esta casilla de verificación a menos que haya modificado o agregado esos archivos. Haga clic en OK, y seleccione un nombre y localización para el panel de instalación archivo XML. Ahora solo ese archivo XML necesita ser distribuido con otros usuarios para instalar y actualizar paneles en el Administrador del panel de tareas.

Para instalar un nuevo panel de tareas, abra Options (Opciones) del Administrador del panel de tareas y seleccione Task Pane Manager> Customize (Personalizar) desde el árbol y haga clic en el botón Install Pane (Instalar panel). Navegue por el paquete de distribución (panename.xml) y haga clic en OK. El panel aparece al inicio de la lista.

Conclusiones

Los paneles de tareas proporcionan numerosas posibilidades. Ayudan al intercambio de comunidades de desarrolladores de información vital y abre la puerta a terceras partes para proporcionar herramientas de Visual FoxPro más integradas. Los paneles de tareas están establecidos para generar XML/XSLT, HTML Dinámicos, mostrar páginas Web enteras en Internet, y llamar fácilmente Servicios Web XML. Pueden además ejecutar código enriquecido en Visual FoxPro. Por consiguiente, si no está familiarizado con los lenguajes de marcas, puede sólo crear fácilmente paneles escritos en Visual FoxPro.
 


Nota de la traductora:

Deseo expresar mi agradecimiento al grupo de compañeros de PortalFox por la ayuda prestada en la corrección de este artículo. Especialmente agradezco a Antonio Muñoz de Burgos y Caravaca (www.emans.com), por el tiempo dedicado a la revisión del mismo, su valiosa cooperación y sus aportes.


 Versión imprimible  
El Administrador de panel de tareas de Visual FoxPro 8.0 visto por dentro (2/2) | Entrar/Crear una cuenta | 5 Comentarios
Los comentarios son propiedad de sus respectivos autores.
No somos responsables de su contenido.

Re: El Administrador de panel de tareas de Visual FoxPro 8.0 visto por dentro (2/2)


por PabloRoca (pablorocaX@mvps.org) en 17 Mar, 2004 - 03:09
(Información del usuario  | Enviar un mensaje http://www.portalfox.com)
Felicidades Ana.

Muy buenos artículos y traducción.

  • Re: Re: El Administrador de panel de tareas de Visual FoxPro 8.0 visto por dentro (2/


    por eMans en 18 Mar, 2004 - 03:17
    (Información del usuario | Enviar un mensaje
    Magnifica traducción ;-)

    Antonio Muñoz de Burgos

    [ No se permiten comentarios a los usuarios anónimos. Por favor, Inicia tu cuenta o registrate ]

  • Muchas Gracias !!


    por amby en 19 Mar, 2004 - 10:17
    (Información del usuario  | Enviar un mensaje http://)
    Pablo, Jorge, Luis Ma y Antonio:

    Bueno... tuve comentaristas ¡¡ de lujo !! para este trabajo.

    Muchísimas gracias a ustedes, es un privilegio poder hacer algo en apoyo a todo lo que vienen realizando durante tantos años.

    Especial agradecimiento a Antonio, por la paciencia que me tuvo y la doble revisión que hizo del artículo, sus aportes fueron muy valiosos.

    Gracias chicos,

    Saludos,

    Ana




    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-2010 PortalFox. Todos los derechos reservados.