Mejora de los servicios de referencia de Office 2003 mediante gráficos y fuentes decorativas

18 de Julio de 2005

Publicado: Noviembre de 2004

Angela Wong

Microsoft Corporation

Este artículo se aplica a: Microsoft Office Word 2003
Microsoft Office Excel 2003
Microsoft Office Outlook 2003
Microsoft Office OneNote 2003
Microsoft Office PowerPoint 2003
Microsoft Office Publisher 2003
Microsoft Office Visio Standard 2003
Microsoft Internet Explorer

Resumen: una forma de mejorar los servicios de referencia de Microsoft Office 2003 empleada por los desarrolladores consiste en mostrar los resultados con los gráficos y las fuentes decorativas apropiadas en el panel de tareas Referencia. En este artículo se muestra cómo promocionar la marca de los productos que se encuentran en un servicio de referencia de comercio electrónico mediante las técnicas que se explican. (11 páginas impresas.)

En esta página

Introducción Introducción
Escenario "Antes" Escenario "Antes"
Escenario "Después" Escenario "Después"
Código de ejemplo Código de ejemplo
Conclusión Conclusión
Recursos adicionales Recursos adicionales

Introducción

El Kit de desarrollo de software (SDK) del servicio Referencia de Microsoft Office ofrece una plataforma para desarrolladores de terceros que permite crear servicios personalizados, integrados y variados para consumo corporativo, de suscripción o general. Puede buscar estos servicios mediante la característica Referencia de Microsoft Office 2003.

Un servicio de referencia es un servicio Web XML. Cada servicio de referencia debe definir dos métodos Web: Registro y Consulta. Cuando se llama a estos métodos Web, el equipo cliente y el servicio de referencia intercambian paquetes XML, tal y como se muestra en la figura 1.

Figura 1. Un equipo cliente y un servicio de referencia intercambian paquetes XML de solicitud y respuesta

Como desarrollador de servicios de referencia, puede mejorar la interfaz de usuario del servicio utilizando gráficos y fuentes especiales. No existe ningún método Web concreto que permita especificar los gráficos o las fuentes del panel de tareas Referencia, pero se pueden mostrar gráficos (y fuentes personalizadas como gráficos) si se incrustan los nombres de estos archivos de imagen en la respuesta de la consulta.

Nota

Aunque los gráficos y las fuentes especiales pueden mejorar la presentación de los resultados de referencia, el panel de tareas Referencia sólo admite texto (no imágenes) como hipervínculos.

IBuyXbox.com

En este artículo se describe un sitio Web de comercio electrónico ficticio, IBuyXbox.com, especializado en juegos de Microsoft Xbox. Este sitio ofrece un servicio de referencia que permite a los clientes buscar juegos de Xbox y comprarlos en línea.

Imagine dos escenarios de una búsqueda de productos en el servicio de referencia de IBuyXbox.com. En el primer escenario, el servicio de referencia muestra los resultados en un formato estándar sin utilizar ningún gráfico o fuente especial. El segundo escenario muestra los resultados de búsqueda utilizando una fuente personalizada, incluyendo una imagen del producto. En este artículo también se incluye un ejemplo de código que genera los resultados mejorados.

Escenario "Antes"

Un cliente escribe halo en el panel de tareas Referencia. El servicio de referencia de IBuyXbox.com devuelve los productos del catálogo que coinciden con la palabra clave. Consulte la figura 2.

Figura 2. Los resultados de la búsqueda se muestran de forma estándar

El servicio de referencia de IBuyXbox.com muestra los resultados en un formato estándar sin utilizar ningún gráfico o fuente especial. Los productos no se asocian con sus imágenes comercializadas y el cliente debe leer atentamente los resultados de búsqueda para encontrar el producto adecuado.

Escenario "Después"

Para comercializar sus productos de forma más eficaz, IBuyXbox.com decide almacenar en su base de datos del catálogo un archivo de imagen del paquete de producto y una fuente para el título que sea similar a la del producto. Al mostrar los resultados, el servicio de referencia muestra primero los títulos del producto con la fuente correspondiente, tal y como se muestra en la figura 3.

Figura 3. Los resultados de la búsqueda se muestran en una fuente que coincide con la del producto

Cuando el cliente hace clic en uno de los productos, por ejemplo, Halo, se muestra el título y una imagen del paquete, y ambos coinciden con la imagen comercializada del producto. Consulte la figura 4.

Figura 4. Los resultados detallados de la búsqueda incluyen un título y una imagen del paquete, y ambos coinciden con la imagen del producto

Ahora, los clientes podrán identificar más fácilmente los productos deseados en los resultados de la búsqueda, facilitando así la elección de la versión que desean comprar. Esta mejora refuerza enormemente la imagen del producto y ayuda a promocionar las ventas.

Código de ejemplo

El ejemplo de código de esta sección permite generar los resultados que se muestran en la figura 4. Para obtener más información sobre cómo desarrollar los servicios de referencia de terceros, consulte Microsoft Office Research Service SDK (en inglés).

Los siguientes pasos muestran el ejemplo de código.

  1. El espacio de nombres IBuyXboxService contiene las clases QueryService y StringImage:

    • La clase QueryService define el método Web Query que devuelve una respuesta de consulta al equipo cliente.

    • La clase StringImage define un método privado StringImageFile que convierte un título a una fuente especificada, lo incluye en un archivo y devuelve el nombre de ruta completo al archivo.

      Nota

      Puede que la creación de un título en una fuente especificada en tiempo real afecte al tiempo de respuesta del servicio de referencia. La alternativa consiste en almacenar el título en la fuente deseada en la base de datos del catálogo y escribirlo sólo en un archivo en tiempo real.

  2. El método Query llama al método privado GetResults, el cual creará la respuesta de consulta en un archivo XML con formato correcto. El método Query devuelve el paquete como una respuesta de consulta.

  3. El método GetResults llama primero a SearchCatalog, que realiza una búsqueda en la base de datos del catálogo según la consulta del cliente y devuelve los resultados de búsqueda como un objeto XmlDocument.

  4. A continuación, GetResults utiliza un objeto XmlTextWriter para extraer y procesar los siguientes elementos en un archivo XML con formato correcto:

    • Extrae el título y la fuente del título y llama al método StringImageFile para obtener el nombre de ruta completo de un archivo de imagen que contenga el título en la fuente especificada

    • Extrae la dirección URL de una imagen del paquete.

  5. El método GetResults escribe el objeto XmlTextWriter en una cadena. A continuación, GetResults devuelve la cadena al método Query.

using System;
using System.ComponentModel;
using System.Web;
using System.Web.Services;
using System.Xml;
using System.Configuration;
using System.Text;
using System.IO;
using System.Globalization;
using System.Drawing;
using System.Drawing.Imaging;

namespace IBuyXboxService
{
[WebService(Namespace="urn:Microsoft.Search")]
public class QueryService: System.Web.Services.WebService
{
.
.
.
//Class level variables
string httpPath = ConfigurationSettings.AppSettings["ServerPath"]
+ HttpContext.Current.Request.ApplicationPath + "/";
.
.
.
public string Query(string queryXml)
{
XmlDocument responseWrapper = new XmlDocument();
string queryString = queryXml;

// Code to validate and parse input query.
.
.
.
// Then assign parsed query to queryString.

responseWrapper.InnerXml = GetResults (queryString);
return responseWrapper.InnerXml.ToString();
}

private string GetResults(string queryString)
{
// string object that holds the query response  
StringWriter queryResponse = new StringWriter();

// object to write well-formed XML into a string
XmlTextWriter writer = new XmlTextWriter(queryResponse);

// search catalog to get results
XmlDocument xmlResult = new XmlDocument();
xmlResult = SearchCatalog (queryString);

// Look for item and get details for item 
.
.
.
XmlNode item = xmlResult.DocumentElement.SelectSingleNode(
"Details");

// Start building results for Research task pane, 
// including title and package
.
.
.

// Extract the title and title font of the item
string sTitle = item.SelectSingleNode("ItemTitle").InnerText;
string sFont = item.SelectSingleNode("ItemTitleFont").InnerText;

// Build item title in corresponding font
StringImage Graphic = new StringImage ();
string sTitleGraphic = Graphic.StringImageFile(sTitle,
queryString, sFont);
if (sTitleGraphic != ")
{
writer.WriteStartElement("Image");
writer.WriteAttributeString("source", httpPath + 
sTitleGraphic);
writer.WriteEndElement();
}
else // use default font
{
writer.WriteStartElement("Char");
writer.WriteAttributeString("bold", "true");
writer.WriteString(
item.SelectSingleNode("ItemTitle").InnerText);
writer.WriteEndElement(); 
}

// Item package
writer.WriteStartElement("Image");
writer.WriteAttributeString("source",
item.SelectSingleNode("ItemPackage").InnerText);
writer.WriteEndElement(); 

// Finish building the rest of the results
.
.
.
writer.Flush();
writer.Close();

return queryResponse.ToString();
}

private XmlDocument SearchCatalog(string queryString)
{
XmlDocument xmlResult = new XmlDocument();

// Search the e-commerce site catalog   
xmlResult.Load ("<Specify URL to search the catalog with "+
"the given query string>");

return xmlResult;
}
}

public class StringImage
{

// Given a title, a file identifier, and a font, returns the full 
// path name for an image file that contains
// the title in the specified font

public string StringImageFile(string stringToImage, string filename, 
string font)
{
Bitmap newBitmap = null;
Graphics g = null;
string imagePath = 
ConfigurationSettings.AppSettings["ProductImages"] +"/";
string stringToPrint;

try 
{
Font fontText = new Font(font,10,FontStyle.Bold);

//Wrap string
int maxWidth = 30;
if (stringToImage.Length > maxWidth)
{
string [] asSpaces = stringToImage.Split(
Convert.ToChar(" "));
int currentWidth = 0;
string tempString = ";

for (int i = asSpaces.GetLowerBound(0); 
i <= asSpaces.GetUpperBound(0); i++ )
{
if (currentWidth + asSpaces[i].Length > maxWidth)
{
tempString  = tempString + Environment.NewLine + 
asSpaces[i];
currentWidth = asSpaces[i].Length;
}
else
{
tempString = tempString + " " + asSpaces[i];
currentWidth = currentWidth  + asSpaces[i].Length;
}
}
stringToPrint = tempString.Trim();
}
else
{
stringToPrint = stringToImage;
}

// Calculate size of the string
newBitmap = new Bitmap(1,1,PixelFormat.Format32bppArgb);
g = Graphics.FromImage(newBitmap);
SizeF stringSize = g.MeasureString(stringToPrint, fontText);
int nWidth = (int)stringSize.Width;
int nHeight = (int)stringSize.Height;
g.Dispose();
newBitmap.Dispose();

newBitmap = new 
Bitmap(nWidth,nHeight,PixelFormat.Format32bppArgb);
g = Graphics.FromImage(newBitmap);
g.FillRectangle(new SolidBrush(Color.White), 
new Rectangle(0,0,nWidth,nHeight));

g.DrawString(stringToPrint, fontText, 
new SolidBrush(Color.DarkGreen), 0, 0);
newBitmap.Save(AppDomain.CurrentDomain.BaseDirectory  + 
imagePath + fileName + ".png", ImageFormat.Png);
} 
catch 
{
return ";
}
finally 
{
if (null != g) g.Dispose();
if (null != newBitmap) newBitmap.Dispose();
}
return imagePath + fileName + ".png";
}
}
}

Conclusión

El SDK del servicio Referencia de Microsoft Office permite a los desarrolladores crear servicios de referencia integrados y variados. Al utilizar la técnica descrita en este artículo, los desarrolladores pueden usar gráficos y fuentes especiales para personalizar y mejorar los servicios de referencia.

Recursos adicionales

Utilice los siguientes vínculos para obtener información y recursos adicionales para trabajar con el servicio Referencia:

Mostrar: