Cómo utilizar gráficos para generar gráficos dinámicamente en el servidor


Resumen


Además de utilizar el componente Web de Microsoft Office Chart como un control de modelo de objetos componentes (COM) hospedado en un formulario, es posible utilizar el componente Web de gráfico como un objeto en memoria no visibles. Este artículo ilustra cómo puede utilizar el componente Chart de Web en un servidor para crear un gráfico representado como una imagen de formato de intercambio de gráficos (GIF). Puede implementar la estrategia que se discute en este artículo para generar las imágenes del gráfico que se pueden utilizar a través de Internet o en empresas con escritorios de clientes heterogénea.

Más información


Con el componente Web Chart, puede crear gráficos utilizando los datos de varios orígenes, tales como matrices, una base de datos, hojas de cálculo o cualquier origen de datos personalizado. Una vez que se crea un gráfico, puede utilizar el método ExportPicture del componente Chart para generar una imagen GIF de ese gráfico.

Para ello, puede modificar el archivo global.asa y crear una página ASP con el código que se muestra en los siguientes pasos.

Pasos para crear el proyecto

  1. Inicie Microsoft Visual InterDev.
  2. Cree un proyecto Web nuevo denominado
    ServerChart y haga clic en el botón siguiente .
  3. Escriba en el servidor que se utiliza para este proyecto Web.
  4. Haga clic en Finalizar para crear el proyecto Web.
  5. (Ratón) en el directorio del proyecto en el servidor (normalmente es C:\Inetpub\wwwroot\ServerChart), seleccione Propiedades y, a continuación, haga clic en la ficha seguridad .
  6. Haga clic en permisosy agregar los permisos de directorio siguientes:
    IUSR_nombreDeServidor: Lectura, escritura, ejecución y eliminar
    Creador: Leer, escribir, ejecutar y eliminar
  7. Haga clic en Aceptar para establecer los permisos.
  8. En el proyecto de Visual InterDev, haga clic en el archivo global.asa y seleccione Obtener copia de trabajo.
  9. Modifique el archivo global.asa para contener la secuencia de comandos siguiente:
    <SCRIPT LANGUAGE=VBScript RUNAT=Server>

    Sub Session_OnStart
    ' Create a FileSystemObject to provide files in the script
    Set Session("FSO") = CreateObject("Scripting.FileSystemObject")

    ' Create a variable that has the number of files created in this session
    Session("n") = 0

    ' Set timeout to be 1 minute
    Session.Timeout = 1
    End Sub

    Sub Session_OnEnd
    ' Delete the files created in this session
    Dim x
    For x = 0 to Session("n")-1
    Session("FSO").DeleteFile Session("sTempFile" & x), True
    Next
    End Sub
    </SCRIPT>
  10. Haga clic en el menú proyecto , seleccione Agregar elemento Weby, a continuación, seleccione Páginas Active Server. Nombre de la página chart.asp.
  11. Modifique el script en chart.asp contenga lo siguiente:
    <%@ language="vbscript" %>
    <html>
    <body>
    <h1>Realtime CPU Utilization by Configurations</h1>

    <FORM action="chart.asp" method=get name=frmChooseOrg>

    <p> Select an Organization to see values for their machines:

    <SELECT name=sOrg>
    <OPTION SELECTED value= 5>Org1</OPTION>
    <OPTION value= 10>Org2</OPTION>
    <OPTION value= 15>Org3</OPTION>

    <OPTION value= 20>Org4</OPTION>
    </SELECT>

    <INPUT type="submit" value="Go"></p>

    </FORM>

    <%

    Dim oChart, c, Categories(5), Vals(5), i, sCaption, nData, nOrg

    ' Get the input value
    nData = Request.QueryString("sOrg")

    'When the page loads the first time, set ndata to 5
    if len(nData) = 0 then nData = 5

    ' Generate random categories and values for the chart
    ' These values can come from some existing data source
    for i = 1 to 5
    Categories(i) = "Machine" & CStr(i)
    Vals(i) = nData * Rnd(100)
    next

    ' Create a Chart Object
    Set oChart = CreateObject("OWC.Chart")
    Set c = oChart.Constants

    ' Set the different parameters for the ChartSpace
    oChart.Border.Color = c.chColorNone

    ' Get Organization number and use it to set the Caption
    nOrg = nData/5
    sCaption = "Current Utilizations for Org"
    sCaption = sCaption & CStr(nOrg)

    ' Add a chart and set parameters for the chart
    oChart.Charts.Add
    oChart.Charts(0).Type = oChart.Constants.chChartTypeColumnClustered
    oChart.Charts(0).SeriesCollection.Add
    oChart.Charts(0).SeriesCollection(0).Caption = sCaption
    oChart.Charts(0).SeriesCollection(0).SetData c.chDimCategories, c.chDataLiteral, Categories
    oChart.Charts(0).SeriesCollection(0).SetData c.chDimValues, c.chDataLiteral, Vals
    oChart.Charts(0).HasLegend = True
    oChart.Charts(0).HasTitle = True

    ' Get a temporary filename to save chart in that file
    sFname = Session("FSO").GetTempName & session.SessionID & ".gif"

    ' Export the chart to the temporary file
    oChart.ExportPicture server.MapPath(sFname), "gif", 600, 512

    ' Create a link to the generated file
    Response.Write "<img src='" & sFname & "'>"

    ' Store the file with its path in the session object for cleanup
    Session("sTempFile" & Session("n")) = Server.MapPath(sFname)

    ' Increment the number of files
    Session("n") = Session("n") + 1

    %>

    </body>
    </html>
  12. Guarde el proyecto.
  13. Haga clic en chart.asp en el Explorador de proyectos y seleccione Ver en el explorador.
Aparecerá la página con un gráfico que contenga la utilización de CPU para varios equipos. Seleccionando diferentes organizaciones, puede ver los diferentes usos.

Al crear varios gráficos basados en distintos conjuntos de datos, cada tabla debe guardarse como un único archivo GIF. En este ejemplo, FileSystemObject de la biblioteca de tiempo de ejecución de secuencias de comandos genera un archivo temporal para la imagen GIF. El archivo se coloca en la misma carpeta que la página ASP, por lo que se puede utilizar el método MapPath del objeto Session para obtener la ubicación del archivo temporal. El nombre del archivo se guarda como una variable de sesión, por lo que se elimina cuando la sesión termina.

Tenga en cuenta que IIS se ejecuta la subrutina Session_OnEnd siempre que la sesión ha caducado. Finaliza la sesión si el cliente no ha solicitado una página dentro de la duración del tiempo de espera, que se establece en uno (1) minuto al principio de la sesión.

Notas adicionales

Actualmente, el único filtro disponible para el método ExportPicture es imágenes "GIF".

El método ExportPicture tiene dos argumentos que permiten indicar las dimensiones en píxeles del gráfico generado. En el código de ejemplo proporcionado, las dimensiones de ancho y alto son modificables. En su lugar, puede utilizar dimensiones que especifica el cliente.

OWC. ProgID del gráfico se aplica a Office Web Components 9.0. Si desea utilizar la versión 10 de los componentes, cambiar el ProgID de OWC. Gráfico a OWC10. ChartSpace o si desea utilizar la versión 11 de los componentes, cambiar el ProgID de OWC. Gráfico OWC11. ChartSpace.

Problemas con el uso del servidor

Debe tener en cuenta que Office 2000 Web Components no están diseñados para uso del servidor, y puede encontrar problemas si utiliza los componentes en un servidor con un gran número de conexiones de usuario simultáneas. Muchos de estos problema se tratan en los componentes Web de Office XP y Office 2003 Web Components y debería considerar el uso de los componentes Web de Office XP o Office 2003 Web Components para soluciones de servidor a gran escala.


Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
317316 INFO: limitaciones de los componentes de Office 2000 Web cuando utilizan Server-Side

Referencias


Programación de Microsoft Office Web Components por Dave Stearns ISBN: 0-7356-0794-X

Para obtener información adicional acerca de cómo utilizar el componente Chart de Web, consulte los siguientes artículos de Knowledge Base:
240263 cómo crear un gráfico de combinación con el componente de gráfico Web
235885 cómo utilizar el componente Web de Chart de Office con VB
243192 cómo utilizar VBScript para enlazar un gráfico a un componente de hoja de cálculo