WSS 3.0 & MOSS: Extendiendo las capacidades de búsqueda (I)!

Sin duda, la funcionalidad de búsquedas es uno de los atractivos más potentes de la plataforma SharePoint. Dicha funcionalidad está presente tanto en Windows SharePoint Serives 3.0 (WSS 3.0) como en Microsoft Office SharePoint Server 2007 (MOSS 2007), si bien es en este último dónde se pueden definir un mayor número de escenarios y dónde la plataforma es más flexible y permite modelar más situaciones. Aunque por las características de búsqueda Out-the-box de WSS 3.0 & MOSS son aplicables en un gran numero de situaciones, existen otras formas de explotar el motor de búsquedas de la plataforma que habilitan un número todavía mayor de escenarios:

  • Definir aplicaciones de búsqueda fuera del entorno de WSS 3.0 & MOSS.
  • Definir aplicaciones de búsqueda más granulares que permitan el uso de caracteres comodín como * o %.
  • Hacer uso de los servicios web de búsqueda para tener una mayor interoperabilidad.

La idea de este post y de los siguientes siguientes es evaluar las posibilidades de extensión de las búsquedas en plataforma SharePoint. En este post, veremos como crear aplicaciones de búsqueda fuera de la plataforma SharePoint mediante el concepto de Url Syntax. Empecemos.

Extendiendo las búsquedas en SharePoint mediante Url Syntax

Mediante Url Syntax  podemos ejecutar consultas contra el motor de búsquedas de WSS 3.0 o de MOSS codificando la consulta en una url parametrizada. Esta técnica está pensada para extender las búsquedas en plataforma SharePoint en los siguientes casos:

  • Visualizar los resultados en una aplicación de búsqueda personalizada.
  • Crear nuestros propios controles de búsqueda.
  • Implementar escenarios de búsquedas “salvadas”.

La clave de la técnica Url Syntax se basa en el uso de una serie de parámetros que vamos a codificar en la url de búsquedas. Esta url varía en función de si estamos hablando de sitios de WSS 3.0 , y que utilicen una plantilla típica como es la de Team Site, o bien de sitios de MOSS, y que utilicen una plantilla típica como es la de publishing (con la feature de búsquedas activada). Así, dependiendo del caso tendremos dos posibles url a parametrizar:

  • Para sitios de WSS 3.0 tendremos una url de la forma:

http://litwaredemo:12000/sites/Intranet/_layouts/OSSSearchResults.aspx?k=Bla&s=All%20Sites&v=date&start=1

  • Para sitios más específicos de MOSS (Nota: Lógicamente, la restricción que hemos visto para los sitios de WSS 3.0 también se aplica a los sitios de MOSS que usen plantillas propias de WSS 3.) la url serían de la formas:

http://litwaredemo:12000/sites/Intranet/results.aspx?k=Bla&s=All%20Sites&v=date&start=1

Como vemos, en el primer de los casos la url de búsqueda con los resultados reside en el directorio /_layouts de SharePoint, mientras que en el segundo caso no. Una vez que conocemos las posibles Url que podemos codificar, necesitamos conocer el significado y uso de los parámetros que se utilizan en dicha codificación. La siguiente tabla recoge los parámetros utilizados en la codificación:

Parámetro

Descripción

Ejemplo

k

Especifica la palabra o palabras claves a buscar. Sólo se puede especificar un valor para este parámetro

results.aspx?k=sharepoint%20search

s

Especifica el scope de búsqueda. Este parámetro puede contener múltiples valores separados por %2c.

results.aspx?s=SDKConent

results.aspx?s=SDKContent%2cTechnicalArticles

v

Especifica el tipo de vista que se utiliza para los resultados. Se permiten dos posibilidades:

·   relevance, los resultados se ordenan por relevancia.

·   date, los resultados se ordenan por fecha

results.aspx?v=date

results.aspx?v=relevance

start

Especifica que página concreta de resultados se va a mostrar.

results.aspx?start=3

Una vez que tenemos claro que parámetros podemos utilizar para realizar la codificación de la url que nos permitirá ejecutar una búsqueda en SharePoint, vamos a llevarlo a la práctica.

Creación de la aplicación de búsquedas

Lo primero que vamos a hacer es crear un nuevo proyecto de C# de tipo Windows Forms. Una vez creado el proyecto, se abrirá la típica superficie de diseño que nos permitirá modelar nuestra aplicación de búsquedas personalizada utilizando Url Syntax. A continuación desde la Toolbox de Visual Studio (2005, con 2008 sería exactamente lo mismo) arrastramos los siguientes controles:

  • Un control de tipo WebBrowser dónde mostremos los resultados obtenidos a partir de codificar la url de resultados de búsqueda.
  • Tres controles de tipo text box que utilizaremos para especificar respectivamente la palabra clave (keyword), el ámbito de búsqueda (scope) y la página concreta de resultados a mostrar.
  • Un control de tipo combobox que permitirá al usuario seleccionar como quiere que se muestren los datos:
    • Ordenados por fecha.
    • Ordenados por relevancia.
image image

El aspecto final del formulario en modo diseño debería ser el siguiente:

image

Añadiendo lógica a la aplicación

Una vez diseñada nuestra aplicación de búsquedas, vamos a añadirle la lógica necesaria para que permita realizar las búsquedas a partir de codificar la url de búsquedas mediante los parámetros comenzados:

  • En primer lugar, necesitamos especificar la url de la página de resultados. Como comentamos más arriba, esta tiene dos formas diferentes en función de si hablamos de un sitio propio de WSS 3.0 o de uno de MOSS. En nuestro caso, se trata de un sitio que utiliza una plantilla propia de WSS 3.0.
  • A partir de esta url, y teniendo en cuenta el diseño del formulario, no tenemos más que añadir la lógica al mismo para conseguir codificar la url de resultados. Por ejemplo, podríamos construir una url para realizar búsquedas por palabra clave, scope, tipo de vista y página de inicio de los resultados (por supuesto, se podría buscar únicamente utilizando uno de estos parámetros).
  • Una vez construida la url codificada, no tenemos más que utilizarla para definir un objeto de tipo Uri que nos permitirá configurar la propiedad Url del control WebBrowser.
  • El código completo que permite implementar esta búsqueda es el siguiente (os subrayo las pates clave del mismo):

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

//Espacio de nombres necesarios

using System.Data;

 

 

namespace URL_Syntax

{

    public partial class Form1 : Form

    {

        public const string SEARCH_URL=”http://litwaredemo:12000/sites/Intranet/_layouts/OSSSearchResults.aspx”;

        public const string QUESTION_MARK_SYMBOL = “?”;

        public const string EQUAL_SYMBOL = “=”;

        public const string AMPERSAND_SYMBOL = “&”;

 

        public const string K_PARAMETER = “k”;

        public const string S_PARAMETER = “s”;

        public const string V_PARAMETER = “v”;

        public const string START_PARAMETER = “start”;

 

        public const string ID_TIPO_VISTA = “ID_Vista”;

        public const string TIPO_VISTA = “Vista”;

        public const string ID_TIPO_VISTA_0 = “D”;

        public const string ID_TIPO_VISTA_1 = “R”;

 

        public const string ID_TIPO_VISTA_TEXT_0 = “date”;

        public const string ID_TIPO_VISTA_TEXT_1 = “relevance”;

 

        public Form1()

        {

            InitializeComponent();

 

            //Filling the combo

            DataTable dtlTipoVista = new DataTable();

            dtlTipoVista.Columns.Add(ID_TIPO_VISTA);

            dtlTipoVista.Columns.Add(TIPO_VISTA);

            DataRow dtrFila;

 

            //Por fecha

            dtrFila = dtlTipoVista.NewRow();

            dtrFila[ID_TIPO_VISTA] = ID_TIPO_VISTA_0;

            dtrFila[TIPO_VISTA] = ID_TIPO_VISTA_TEXT_0;

            dtlTipoVista.Rows.Add(dtrFila);

 

            //Por relevancia

            dtrFila = dtlTipoVista.NewRow();

            dtrFila[ID_TIPO_VISTA] = ID_TIPO_VISTA_1;

            dtrFila[TIPO_VISTA] = ID_TIPO_VISTA_TEXT_1;

            dtlTipoVista.Rows.Add(dtrFila);

 

            this.comboBox1.ValueMember = ID_TIPO_VISTA;

            this.comboBox1.DisplayMember = TIPO_VISTA;

 

            this.comboBox1.DataSource = dtlTipoVista;

           

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            try

            {

                string sKParameter = this.textBox1.Text;

                string sSParameter = this.textBox3.Text;

                string sVParameter = “”;

 

                if (this.comboBox1.SelectedValue.ToString() == ID_TIPO_VISTA_0)

                {

                    sVParameter = ID_TIPO_VISTA_TEXT_0;

                }

                else

                {

                    sVParameter = ID_TIPO_VISTA_TEXT_1;

                }

 

                string sSTARTParameter = this.textBox4.Text;

 

                string sUrl =

                     SEARCH_URL + QUESTION_MARK_SYMBOL +

                     K_PARAMETER + EQUAL_SYMBOL +

                     sKParameter +

                     AMPERSAND_SYMBOL +

                     S_PARAMETER + EQUAL_SYMBOL +

                     sSParameter +

                     AMPERSAND_SYMBOL +

                     V_PARAMETER + EQUAL_SYMBOL + sVParameter;      

 

                Uri uURL;

 

                if (this.textBox4.Text != “”)

                {

                    sUrl +=

                         AMPERSAND_SYMBOL  +

                         START_PARAMETER + EQUAL_SYMBOL + sSTARTParameter;

 

                    uURL = new Uri(sUrl);

                }

                else

                {

                    uURL = new Uri(sUrl);

                }

 

                this.webBrowser1.Url = uURL;

            }

            catch (Exception ex)

            {

 

                MessageBox.Show(ex.Message, “Error”,

                    MessageBoxButtons.OK, MessageBoxIcon.Error,

                    MessageBoxDefaultButton.Button1);

            }

        }

    }

}

 

Probando la aplicación

Sin más, ya estaríamos listos para probar nuestra mini-aplicación de búsquedas. Para ello:

  • Especificamos una palabra clave de búsqueda.
  • Especificamos el ámbito o ámbitos de búsquedas: All%20Sites (todos los sitios).
  • El tipo de vista: date (los resultados se muestran ordenados por fecha).
  • La página de inicio para los resultados.

image 

Como veis, el resultado que obtenemos es el mismo que obtendríamos con la búsqueda estándar de WSS 3.0 o MOSS, pero fuera de la plataforma.

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

3 comentarios en “WSS 3.0 & MOSS: Extendiendo las capacidades de búsqueda (I)!”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *