Compartir a través de


Tutorial: Creación de un elemento web personalizado del motor de búsqueda Enteprise Search

Con Enterprise Search de Microsoft Office SharePoint Server 2007, puede personalizar el aspecto y la funcionalidad de las páginas del centro de búsqueda y los elementos web desde el explorador. Sin embargo, si desea realizar personalizaciones que no son posibles a través del explorador, puede crear componentes de elementos web personalizados que usen el modelo de objetos de consulta para ejecutar consultas en el componente de búsqueda.

En este tutorial, se creará un elemento web de búsqueda personalizada y se agregará al sitio. El elemento web que se describe en este tutorial ofrece una funcionalidad de búsqueda muy básica.

En este tutorial se abordan las siguientes tareas:

  • Creación del proyecto para el elemento web

  • Codificación del elemento web

  • Implementación del elemento web

Requisitos previos

Para realizar este tutorial, necesitará lo siguiente:

  • Microsoft Visual Studio 2005 instalado en el equipo de desarrollo

  • Microsoft Office SharePoint Server 2007 instalado en el equipo de desarrollo

  • Permisos para crear y modificar páginas para el sitio del centro de búsqueda

Configuración del proyecto de elemento web personalizado de búsqueda

Para crear el proyecto del elemento web

  1. En Visual Studio 2005, en el menú Archivo elija Nuevo y haga clic en Proyecto.

  2. En Tipos de proyecto, en C#, seleccione Windows.

  3. En Plantillas, seleccione Biblioteca de controles web. En el campo Nombre, escriba CustomSearchWebPart y, a continuación, haga clic en Aceptar.

A continuación, debe agregar las referencias necesarias al proyecto de elemento web.

Nota

La configuración de entorno de desarrollo compatible para Microsoft Office SharePoint Server 2007 consiste en que el desarrollo se realice localmente en un servidor con Microsoft Office SharePoint Server 2007 instalado.

Para agregar referencias al proyecto CustomSearchWebPart

  1. En el menú Proyecto, haga clic en Agregar referencia.

  2. En la ficha .NET, seleccione cada una de las siguientes referencias y haga clic en Aceptar después de cada selección:

    • System.Data

    • System.XML

    • Microsoft.SharePoint

    • Microsoft.Office.Server

    • Microsoft.Office.Server.Search

Antes de agregar código para el elemento web, reemplace el archivo de clase predeterminado por un nuevo archivo de clase.

Para crear el archivo de clase para el elemento web

  1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en WebCustomControl1.cs y, a continuación, haga clic en Eliminar para eliminar la clase predeterminada creada con el proyecto.

  2. En el menú Proyecto, haga clic en Agregar nuevo elemento.

  3. En el cuadro de diálogo, Agregar nuevo elemento, haga clic en Control web personalizado escriba clsSearchQuery.cs y, a continuación, haga clic en Agregar.

Escritura del código del elemento web personalizado de búsqueda

Ahora modificará el código predeterminado que se incluye en el nuevo archivo de clase.

Para modificar el código predeterminado de clsSearchQuery

  1. Agregue las siguientes directivas de espacio de nombres cerca de la parte superior del código en clsSearchQuery.cs:

    using System.Drawing;
    using System.Data;
    using System.Xml;
    using System.Xml.Serialization;
    using Microsoft.SharePoint.WebPartPages;
    using Microsoft.Office.Server;
    using Microsoft.Office.Server.Search.Query;
    
  2. En la siguiente línea de código, reemplace WebControl con WebPart:

    public class clsSearchQuery : WebControl
    
  3. Agregue la siguiente línea de código antes de la declaración de clase de clsSearchQuery:

    [XmlRoot(Namespace = "CustomSearchWebPart")]
    

Ahora está listo para escribir el código para consultar el componente de búsqueda y, a continuación, representar el contenido del elemento web.

Para agregar los controles secundarios del elemento web y representarlos

  1. Agregue el siguiente código después de la declaración de clase:

            Button cmdSearch;
            TextBox txtQueryText;
            Label lblQueryResult;
            DataGrid grdResults;
    
  2. Reemplace el método CreateChildControls mediante el siguiente código:

    protected override void CreateChildControls()
            {
                Controls.Clear();
                txtQueryText = new TextBox();
                this.Controls.Add(txtQueryText);
                cmdSearch = new Button();
                cmdSearch.Text = "Start Search";
                cmdSearch.Click += new EventHandler(cmdSearch_Click);
                this.Controls.Add(cmdSearch);
                lblQueryResult = new Label();
                this.Controls.Add(lblQueryResult);
            }
    
  3. Agregue un evento Click para cmdSearch mediante el código siguiente:

            void cmdSearch_Click(object sender, EventArgs e)
            {
                if (txtQueryText.Text != string.Empty)
                {
                  keywordQueryExecute(txtQueryText.Text);
                }
                else
                {
                  lblQueryResult.Text = "You must enter a search word.";
                }
              }
    

Ahora está listo para agregar el código para tener acceso al modelo de objetos de consultas. En este ejemplo de código se usa la clase Microsoft.Office.Server.Search.Query.KeywordQuery para ejecutar la consulta de búsqueda y se pasa el objeto Microsoft.Office.Server.ServerContext para el valor de parámetro. La consulta de búsqueda es una consulta de palabras clave simple que busca resultados donde la propiedad Author coincide con el término de búsqueda.

Para ejecutar la consulta de palabras clave

  1. Agregue el código siguiente a la clase clsSearchQuery:

    private void keywordQueryExecute(string strQueryText)
            {
                KeywordQuery kRequest = new KeywordQuery(ServerContext.Current);
                string strQuery = "author:" + strQueryText;
                kRequest.QueryText = strQuery;
                //to return relevant results
                kRequest.ResultTypes |= ResultType.RelevantResults;
                ResultTableCollection resultTbls = kRequest.Execute();
                if ((int)ResultType.RelevantResults != 0)
                {
                    ResultTable tblResult = resultTbls [ResultType.RelevantResults];
                    if (tblResult.TotalRows == 0)
                    {
                      lblQueryResult.Text = "No Search Results Returned.";
                    }
                    else
                    {
                        ReadResultTable(tblResult);
                    }
    
                }
    }
    
  2. Para leer los datos de los resultados de búsqueda, el método keywordQueryExecute llama al método ReadResultTable. Agregue el siguiente código para ReadResultTable:

    void ReadResultTable(ResultTable rt)
            {
                DataTable relResultsTbl = new DataTable();
                relResultsTbl.TableName = "Relevant Results";
                DataSet ds = new DataSet("resultsset");
                ds.Tables.Add(relResultsTbl);
                ds.Load(rt,LoadOption.OverwriteChanges,relResultsTbl);
                fillResultsGrid(ds);
            }
    
  3. El método ReadResultTable llama al método fillResultsGrid para enlazar el conjunto de datos de los resultados de búsqueda con la cuadrícula de datos grdResults . Agregue el código para fillResultsGrid:

    private void fillResultsGrid(DataSet grdDs)
            {
    //Instantiate the DataGrid, and set the DataSource
                grdResults = new DataGrid();
                grdResults.DataSource = grdDs;
    //Set the display properties for the DataGrid.
                grdResults.GridLines = GridLines.None;
                grdResults.CellPadding = 4;
                grdResults.Width = Unit.Percentage(100);
                grdResults.ItemStyle.ForeColor = Color.Black;
                grdResults.ItemStyle.BackColor = Color.AliceBlue;
                grdResults.ItemStyle.Font.Size = FontUnit.Smaller;
                grdResults.ItemStyle.Font.Name = "Tahoma";
                grdResults.HeaderStyle.BackColor = Color.Navy;
                grdResults.HeaderStyle.ForeColor = Color.White;
                grdResults.HeaderStyle.Font.Bold = true;
                grdResults.HeaderStyle.Font.Name = "Tahoma";
                grdResults.HeaderStyle.Font.Size = FontUnit.Medium;
    
    /*Turn off AutoGenerate for the columns, so that the DataGrid
    doesn't automatically bind to all of the columns
    in the search results set.
    Then create and configure only the columns you want to
    include in the DataGrid.
    */
                grdResults.AutoGenerateColumns = false;
                HyperLinkColumn colTitle = new HyperLinkColumn();
                colTitle.DataTextField = "Title";
                colTitle.HeaderText = "Title";
                colTitle.DataNavigateUrlField = "Path";
                grdResults.Columns.Add(colTitle);
                BoundColumn colAuthor = new BoundColumn();
                colAuthor.DataField = "Author";
                colAuthor.HeaderText = "Author";
                grdResults.Columns.Add(colAuthor);
    //Bind the data to the DataGrid
                grdResults.DataBind();
    //Add the DataGrid to the controls
                Controls.Add(grdResults);
            }
    

Implementación del elemento web personalizado de búsqueda

Dado que el elemento web personalizado de búsqueda que se crea con este ejemplo no tiene un nombre seguro, no se puede implementar en la memoria caché de ensamblados global. Deberá implementarlo en el directorio _app_bin de su sitio.

Para implementar el elemento web personalizado de búsqueda en el sitio

  1. Copie CustomSearchWebPart.dll en el directorio _bin del sitio. La ruta de acceso será similar a la siguiente:

    \Inetpub\wwwroot\wss\VirtualDirectories\Site\_app_bin
    

    Nota

    Si no conoce la ruta de acceso de la aplicación para el sitio, puede comprobarla en Administrador de servicios Internet.

  2. Abra la consola Administrador de servicios Internet, expanda el nodo Sitios web, haga clic con el botón secundario en la aplicación del sitio y, a continuación, haga clic en Propiedades.

  3. Haga clic en la ficha Directorio principal.

    El campo Ruta de acceso local contiene la ruta de acceso a la aplicación.

Para registrar el elemento web de búsqueda como un control seguro

  1. Abra el archivo web.config del sitio al que desea agregar el elemento web de búsqueda personalizada. Encontrará dicho archivo en la carpeta raíz del sitio.

  2. Agregue la siguiente etiqueta < SafeControl / > a la sección <SafeControls> </SafeControls> de web.config:

    <SafeControl Assembly="CustomSearchWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Namespace="CustomSearchWebPart" TypeName="*" Safe="True" />
    
  3. Guarde los cambios y cierre el archivo web.config.

Para crear el archivo de definición del elemento web de búsqueda personalizada

  1. Abra un nuevo archivo en un editor de texto como Bloc de notas y agregue el siguiente código XML al archivo:

    <?xml version="1.0"?>
    <WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
       <Assembly>CustomSearchWebPart, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=null</Assembly>
       <TypeName>CustomSearchWebPart.clsSearchQuery</TypeName>
       <Title>Custom Search Web Part</Title>
    </WebPart>
    
  2. Asigne el nombre CustomSearchWebPart.dwp al archivo y, a continuación, guárdelo.

    Nota

    Si no está trabajando en el servidor Office SharePoint Server 2007, para completar este paso deberá copiar el archivo a un servidor Office SharePoint Server 2007.

Para registrar el elemento web de búsqueda como un control seguro

  1. Abra el archivo web.config del sitio al que desea agregar el elemento web personalizado de búsqueda.

  2. Agregue la siguiente etiqueta <SafeControl/> a la sección <SafeControls> de web.config:

    <SafeControl Assembly="CustomSearchWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Namespace="CustomSearchWebPart" TypeName="*" Safe="True" />
    

Para implementar el elemento web personalizado de búsqueda en el sitio

  • Copie CustomSearchWebPart.dll en el directorio _bin del sitio. La ruta de acceso será similar a la siguiente:

    \Inetpub\wwwroot\wss\VirtualDirectories\Site
    

Pasos siguientes

Puede encontrar el código completo del ejemplo de clase clsSearchQuery en Ejemplo: Código personalizado de elementos web del motor de búsqueda Enterprise Search.

Una vez implementado el elemento web, ya se puede probar.

Para probar el elemento web personalizado de búsqueda

  1. Abra el sitio del Centro de búsqueda en el explorador, haga clic en el menú Acciones del sitio y, a continuación, haga clic en Crear página.

  2. En el cuadro Nombre de la dirección URL, escriba customsearchwebparttest.

  3. En el campo Título, escriba Página de prueba para elemento web de búsqueda personalizada.

  4. En la lista Diseño de página, seleccione (Página de bienvenida) Página de búsqueda.

  5. Para crear la página, haga clic en Crear.

  6. Con la página customsearchwebparttest.aspx abierta en el explorador, haga clic en el vínculo Agregar elemento web en la zona superior.

  7. En el cuadro de diálogo Agregar elementos web, haga clic en el vínculo Galería de elementos web y opciones avanzadas.

  8. Haga clic en el vínculo Examinar y, a continuación, haga clic en Importar.

  9. Haga clic en Examinar, vaya a la ubicación donde guardó CustomSearchWebPart.dwp, selecciónelo y, a continuación, haga clic en Abrir.

    Ahora debería ver el elemento web personalizado de búsqueda en el cuadro de diálogo. Puede arrastrarlo hasta la página para usarlo.

Vea también

Referencia

Microsoft.Office.Server.Search.Query.KeywordQuery

Otros recursos

Tutorial: Crear un elemento web de ASP.NET para el ejemplo de aplicación de datos profesionales de AdventureWorks
Introducción a los elementos web personalizados del motor de búsqueda Enterprise Search
Introducción al modelo de objetos de consulta del motor de búsqueda Enterprise Search
Referencia de sintaxis de palabra clave del motor de búsqueda Enterprise Search