Complemento de SharePoint de muestra para personalizar los resultados de búsqueda

La muestra Search.PersonalizedResults le enseña cómo personalizar SharePoint filtrando información según el valor de una propiedad del perfil de usuario. Algunos ejemplos de personalización incluyen:

  • Artículos de noticias u otro contenido filtrados por país o ubicación.
  • Vínculos de navegación filtrados en función del rol del usuario o la organización.
  • Listados de restaurantes o establecimientos minoristas según la ubicación de su lugar de trabajo.

Este código de ejemplo usa un complemento hospedado por el proveedor para mostrar al usuario los resultados de búsqueda que incluyen todos los sitios o solo los sitios de grupo a los que el usuario tiene acceso. Para ello, el ejemplo:

  • Comprueba el valor de la propiedad de perfil de usuario Acerca de mí.
  • Crea una cadena de filtro de consulta de búsqueda asociada con el valor de la propiedad de perfil de usuario Acerca de mí.
  • Ejecuta la consulta de búsqueda y muestra los resultados de esta.

Antes de empezar

Para empezar, descargue el complemento de ejemplo Search.PersonalizedResults desde el proyecto Modelos y prácticas de desarrollo de Office 365 en GitHub.

Nota:

El código de este artículo se proporciona tal cual, sin garantía de ningún tipo, expresa o implícita, incluidas las garantías implícitas de aptitud para un propósito particular, comerciabilidad o ausencia de infracción.

Usar el complemento de ejemplo Search.PersonalizedResults

Al ejecutar este código de ejemplo, aparece una aplicación hospedada por el proveedor.

Captura de pantalla que muestra la página de inicio del complemento Search.PersonalizedResults

En este artículo se describe el escenario Realizar la búsqueda personalizada de todas las plantillas de sitio con los datos de perfil. Elegir Realizar búsqueda personalizada devuelve resultados de búsqueda filtrados que contienen solo los sitios de grupo, como se muestra en la siguiente ilustración. Observe que la columna Plantilla contiene solo los sitios de tipo STS.

Captura de pantalla de los resultados de búsqueda que muestran solo sitios de equipo

Para controlar los escenarios de personalización, puede cambiar la consulta de búsqueda:

  • Si lee y comprueba el valor de una propiedad de perfil de usuario para ese usuario. Este ejemplo de código comprueba la propiedad Acerca de mí en busca de un valorAppTest.

  • Si realiza un curso de acción específico en función del valor de la propiedad de perfil de usuario. Por ejemplo, si el valor de la propiedad de perfil de usuario Acerca de mí es AppTest, este código de ejemplo quita el filtro de sitio de grupo y devuelve resultados de búsqueda que contienen todos los sitios.

Escriba AppTest en la propiedad de perfil de usuario Acerca de mí

  1. En la parte superior del sitio de Office 365, elija la imagen de perfil y, después, Acerca de mí.

    Captura de pantalla de la página del perfil de usuario con Acerca de mí resaltado.

  2. En la página Acerca de mí, seleccione Editar su perfil.

  3. En Acerca de mí, escriba AppTest.

  4. Elija Guardar todo y cerrar.

Vuelva al complemento hospedado por el proveedor Search.PersonalizedResults y elija de nuevo Realizar búsqueda personalizada. El complemento cambia el filtro en la consulta de búsqueda para mostrar todos los sitios en lugar de solo los sitios de equipo, como se muestra en la siguiente ilustración. Ahora, la columna Plantilla contiene varios tipos de plantillas de sitio distintos.

Captura de pantalla de resultados de búsqueda en que se muestran todos los sitios

En default.aspx.cs, al elegir Realizar búsqueda personalizada se llama al método btnPersonalizedSearch_Click , que realiza las siguientes acciones:

  • Usa PeopleManager para obtener todas las propiedades de perfil de usuario para el usuario que ejecuta este complemento.

  • Recupera y comprueba el valor de la propiedad de perfil de usuario Acerca de mí. Si el valor de la propiedad AboutMe es AppTest, la consulta de búsqueda recupera todos los sitios mediante la cadena contentclass:"STS_Site"de consulta . Si el valor de la propiedad AboutMe no es AppTest, el filtro de sitio de equipo se anexa a la cadena de consulta (WebTemplate=STS) y la consulta de búsqueda solo recupera los sitios de equipo.

  • Llamadas al método ProcessQuery para recuperar los resultados de búsqueda basados en la cadena de consulta proporcionada. ProcessQuery también muestra cómo especificar una lista de propiedades que se devuelven con los resultados de búsqueda.

  • Llamadas al método FormatResults para poner los resultados de búsqueda en una tabla HTML.

protected void btnPersonalizedSearch_Click(object sender, EventArgs e)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);

            using (var clientContext = spContext.CreateUserClientContextForSPHost())
            {
                // Load user profile properties.
                PeopleManager peopleManager = new PeopleManager(clientContext);
                PersonProperties personProperties = peopleManager.GetMyProperties();
                clientContext.Load(personProperties);
                clientContext.ExecuteQuery();
                // Check the value of About Me.
                string aboutMeValue = personProperties.UserProfileProperties["AboutMe"];
                string templateFilter = ResolveAdditionalFilter(aboutMeValue);
                // Build the query string.
                string query = "contentclass:\"STS_Site\" " + templateFilter;
                ClientResult<ResultTableCollection> results = ProcessQuery(clientContext, query);
                lblStatus2.Text = FormatResults(results);
            }
        }

private ClientResult<ResultTableCollection> ProcessQuery(ClientContext ctx, string keywordQueryValue)
        {
            KeywordQuery keywordQuery = new KeywordQuery(ctx);
            keywordQuery.QueryText = keywordQueryValue;
            keywordQuery.RowLimit = 500;
            keywordQuery.StartRow = 0;
            keywordQuery.SelectProperties.Add("Title");
            keywordQuery.SelectProperties.Add("SPSiteUrl");
            keywordQuery.SelectProperties.Add("Description");
            keywordQuery.SelectProperties.Add("WebTemplate");
            keywordQuery.SortList.Add("SPSiteUrl", Microsoft.SharePoint.Client.Search.Query.SortDirection.Ascending);
            SearchExecutor searchExec = new SearchExecutor(ctx);
            ClientResult<ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery);
            ctx.ExecuteQuery();
            return results;
        }

Vea también