Una de las características más notorias de SharePoint 2013 es la gran relevancia que toma el servicio de búsquedas para diversos servicios como el de elaborar estadísticas de uso de los sites (substituyendo al anterior Web Analytics) y también con el Content Search WebPart (y los derivados Search-Driven WebParts).

Hoy vamos a centrarnos en el Content Search WebPart, que es una herramienta flexible y poderosa para construir aquellas páginas de nuestros portales donde queramos mostrar diversos elementos retornados por un motor de búsqueda.

Por poner un ejemplo visual claro y conciso, me centraré en la elaboración de un blog, donde vamos a empezar mostrando 3 posibles utilidades del Content Search WebPart. Las imágenes nos ahorrarán muchas palabras:

 En la imagen anterior ya se pueden ver claramente 2 funcionalidades distintas en las que puede operar el “Content Search WebPart”.

1.- Como “slider” o visualizador dinámicos de contenidos. Situado en la zona superior izquierda, nos muestra un rotativo de imágenes y títulos relacionados de posts en Silverlight.

2.- Como “listado” de contenidos. En este caso “posts” de un blog. El formato es totalmente personalizable, como veremos más adelante. Nótese que el post de la zona superior derecha no es navegable, y es siempre fijo (corresponde al “último post creado”) y sin embargo el resto tienen paginación y se puede ir de una página a otra mediante las flechitas de derecha-izquierda que vemos debajo y a la izquierda del slider.

Veamos ahora una tercera posible funcionalidad del mismo web-part.

3.- Listado de “posts” relacionados con el “post” que se está visualizando actualmente. La vinculación se realiza mediante el metadato “categorías” del post, que lo realicé mediante el servicio de metadatos administrados. Este webpart muestra los últimos posts creados que coinciden con la misma “categoría” que el post que se está visitando.

Ahora que ya hemos visto diversos ejemplos de lo que podemos hacer, vamos a ver cómo lo podemos hacer. El primer paso es añadir el WebPart de “Content Search” que se encuentra en la sección de “Content Rollup” en una página donde queramos mostrar este tipo de funcionalidad.

 Hay que aclarar aquí que también disponemos la categoría de “Search-Driven Content” WebParts, con diversos de ellos preparados, formateados y pre-filtrados para situaciones específicas (mostrar vídeos, mostrar páginas de publishing, etc.). Sin embargo os recomiendo que siempre que podáis, utilicéis el “Content Search WebPart” por defecto, ya que os dará todas las posibilidades del webpart sin limitación y lo podréis adaptar fácilmente a vuestro caso en particular.

Una vez tengamos el WebPart en nuestra página, veremos que si accedemos a su panel de configuración tiene 4 secciones características, a parte de las típicamente incluidas en cualquier otro WebPart.

  1. Search Criteria
  2. Display Templates
  3. Property Mappings
  4. Settings

 

 
Vamos a ver cada una de ellas en este post.

1. Search Criteria

 En esta sección de configuración encontramos 2 parámetros básicos:

  • Query (botón “Change query”): Nos permite crear la consulta sobre la cual vamos a obtener el conjunto de resultados que trabajará el WebPart. Realmente es muy potente y flexible, y permite ajustar el query a niveles impensables en 2010. Se basa en lenguaje Keyword Query Language (KQL). Podéis encontrar una referencia del mismo en este enlace. Debido a que es un campo con muchas opciones de configuración, para no eternizar este post simplemente os referenciaré a este otro post, donde se centra en todas las opciones que tendremos al pulsar en “Change Query” para moldear la consulta a nuestro gusto.
  •  Number of ítems to show: Indica cuantos elementos queremos que se visualicen en el WebPart. En los ejemplos que puse al principio del post serían 3 para el slider, 1 para el listado a la derecha del slider (último post), 6 para la paginación de posts debajo del slider (posts recientes excepto el último) y 5 para los “posts relacionados”.
 

2.Display Templates

 En esta sección encontraremos 3 parámetros que nos permitirán especificar de qué forma queremos visualizar los resultados de la consulta. 
  • Control: Especifica el tipo de control que queremos obtener. Hay 3 posibles valores a seleccionar.
    • List: Indica un listado simple de elementos. En los ejemplos expuestos se correspondería al webpart de “último post” a la derecha del slider y también a los “posts relacionados”.
    • List with Paging: Indica un listado simple de elementos con paginación (flechas de navegación “adelante” y “atrás”). En los ejemplos expuestos se correspondería al webpart de “últimos posts” por debajo del slider.
    • SlideShow: Indica que queremos un slide de diversos elementos contenidos en un control Silverlight, que irá alternando de uno a otro cada pocos segundos. En los ejemplos expuestos se correspondería al slider principal de la zona superior izquierda.
  • Ítem: Especifica la plantilla de “display templates” que se va a utilizar para dar formato visual al elemento. Existen una serie de plantillas predeterminadas, pero podemos crear la nuestra propia para darle el formato gráfico/textual exacto a nuestros requerimientos. Lo normal es que nos basemos en un estilo ya existente y a partir de ahí le asignemos un .CSS que retocaremos a nuestro gusto para darle el look&feel deseado. En los ejemplos que expuse al principio del post, utilicé el “SlideShow” que venía por defecto para el slider, un display template propio para los webparts de “último post” y listado de “post recientes”, y otro display template personalizado para los “posts relacionados”.
  • Don’t show anything when there are no results: Indica si queremos que no se muestre absolutamente nada en caso de que el query no retorne ningún consultado. Si no está marcado, mostrará un mensaje del tipo “no se ha encontrado ningún resultado coincidente con la búsqueda”.

3.Property Mappings

En esta sección tendremos la opción de personalizar qué información queremos mostrar en cada campo respecto a la plantilla (display template) utilizada.

  • Change the mapping…: Por defecto está desmarcada, y utiliza los mapeos predeterminados para cada plantilla (display template) predeterminado en el propio fichero del template. Si se desmarca, nos permite especificar manualmente qué propiedad (managed property) va a utilizarse para dar contenido a cada campo.
  • Mapped fields: En caso de que marquemos el campo “Change the mapping…” podremos seleccionar aquí, para cada uno de los campos definidos en el display template que estemos aplicando, el valor que incluirá, seleccionando la managed property con la que queramos popular el campo. 
 

4.Settings

 En esta sección podremos configurar algunos parámetros adicionales para acabar de refinar el Search WebPart a nuestro gusto.

  • Query results provided by: Indica cual es el WebPart que provisiona los resultados de la consulta. Por defecto es el propio WebPart que estamos configurando (mediante el campo “Query” de la sección “Search Criteria”, pero se podría configurar para que fuera un webpart de “caja de búsqueda” (por ejemplo) el que proveyera los resultados a mostrar.
  • Result Table: Indica la tabla de resultados a utilizar. Por defecto está en “RelevantResults” (normalmente siempre utilizaremos esta). Aunque podría modificarse a “PersonalFavoriteResults”, “RefinementResults” o “SpecialTermResults”.
  • Start displaying results from result number: Indica por qué número de resultado ha de empezar a mostrar ítems en pantalla. Si, por ejemplo, le indicamos un “2” el primer ítem retornado no lo mostraría. En los ejemplos expuestos, es el caso del WebPart de “posts recientes” (bajo el slider), que configuré con un 2, porque el primer resultado ya se estaba mostrando en el WebPart de “último post” (a la derecha del slider).
  • Alternate Error Message: Aquí podemos especificar un mensaje de error personalizado en caso de que falle la ejecución de la consulta.

¡¡Pues esto es todo!! Ahora que hemos visto ejemplos de qué puede hacer el Content Search WebPart en 2013, y qué opciones de configuración tiene, podremos hacernos una idea de todo el potencial que tenemos en nuestras manos para crear webparts de contenido personalizados a nuestro gusto.

¡¡Enjoy it!!