SharePoint 2013. Una Provider-Hosted que no es una Provider-Hosted

Como ya sabemos todos, SharePoint 2013 implementa un nuevo modelo o paradigma de desarrollo denominado Aplicaciones. En este nuevo modelo se ha pensado bastante en la seguridad y el acceso a la información de SharePoint y es por esto por lo que sólo podemos usar el modelo de objetos de cliente (CSOM), con las limitaciones que esto conlleva.

 

Teniendo claras estas limitaciones, se abre un mundo de posibilidades donde nos encontraremos todo tipo de desarrolladores (no sólo los que sabemos SharePoint) y en el que incluimos la necesidad de movilidad y las soluciones implementadas en la tan beneficiosa nube. En Encamina este concepto lo llamamos SharePoint Everyware, buscando la sinergia entre «Ágil» y «Enterprise» y aprovechando SharePoint como capa de servicio para las Aplicaciones que nos demandan los clientes.

El reto que se nos plantea es: ¿Cómo podemos saltarnos esas limitaciones pero manteniendo el concepto y diseño de Aplicación?

Adrián Díaz y un servidor llevamos unos días haciendo pequeñas pruebas de concepto, buscando una arquitectura desacoplada, al igual que las Aplicaciones, pero que nos permita el uso del modelo de objetos de servidor (SSOM), patrones del tipo Repository o Service Locator, TDD o Integración Continua.

Planteamos dos modelos:

  1. Usar un servicio WCF instalado dentro de SharePoint con Microsoft.SharePoint.Client.Services y que este sea nuestro punto de entrada REST para las peticiones, lo que nos obliga a buscar algún modo de meter un contenedor de dependencias dentro del proceso de SharePoint.
  2. Usar Web Api en una aplicación web externa a SharePoint (los intentos de modificar las tablas de enrutamiento y poner Web Api dentro del ciclo de vida de las llamadas de SharePoint no obtuvieron buenos resultados) que nos permita trabajar independientemente de nuestra capa de servicio, que para la mayoría de los casos será SharePoint, y en la que sería muy sencillo implementar las buenas prácticas que esperamos en nuestros desarrollos, similar al concepto Provider-Hosted que tenemos en Aplicaciones.

¿Qué problemas nos encontramos?

  • En el servicio WCF no sería sencillo ser independientes de SharePoint e implementar un contenedor de dependencias nos obliga a tener un HttpModule recibiendo todas las peticiones de SharePoint y gestionando el ciclo de vida de este contenedor.
  • ¿Qué pasaría si necesitamos tener una capa de servicio que obtenga información de SharePoint y de un repositorio externo, por ejemplo, un servicio en Azure o una base de datos? ¿Tenemos claro que vamos a meter esas llamadas dentro del proceso de ejecución de SharePoint? Es posible, pero nunca me ha gustado hacer esas cosas dentro del código que se ejecuta en SharePoint.
  • Si usamos Web Api, ¿qué hacemos con la autenticación? ¿cómo garantizamos la seguridad de acceso al servicio y que las llamadas a SharePoint se hagan con el contexto del usuario adecuado? Si implementamos Autenticación Integrada, obligamos a realizar doble autenticación a los usuarios, una en SharePoint y la otra en la Web Api pero ¿y si estamos en un ordenador o Tablet fuera de dominio? Está claro que no podemos acceder a la Web Api sin tener las credenciales ni la autenticación del usuario frente a SharePoint.

Posibles soluciones

Para el caso del WCF, tenemos varios ejemplos que nos permiten gestionar (siempre mediante un HttpModule) estos contenedores con Ninject o Autofac, y el problema de hacer llamadas a servicios externos es más algo personal que una limitación técnica.

La solución para la Web Api no es tan simple. Pensemos en el modelo que intentamos replicar, el Provider-Hosted (de ahí el título de este post). Cuando SharePoint hace una llamada a una Aplicación siempre le pasa la información del contexto actual y un Token que permite abrir un contexto de cliente sin necesidad de tener las credenciales del usuario. Tenemos disponible una clase, TokenHelper, que tiene los métodos para leer los Token y abrir un ClientContext, pero nosotros necesitamos un contexto de servidor y no de cliente. Si conseguimos salvar este problema y recibir algún tipo de Token que permita abrir un contexto de servidor, espera, ¿no podemos abrir un SPSite usando la URL del Site y un objeto SPUserToken? Pues va a ser que sí, ahora toca obtener ese Token desde las distintas interfaces de usuario de nuestra Aplicación y dárselo a la Web Api para que pueda hacer peticiones a SharePoint en nombre del usuario.

Estaba claro que obtener el Token tampoco iba a ser sencillo y que no lo íbamos a tener directamente en el contexto de JavaScript de SharePoint pero si en el contexto de servidor: SPContext.Current.Web.CurrentUser.UserToken. Tenemos que ser capaces de enviar ese Token a cualquier llamada a la Web Api para que instancia un contexto de servidor con el usuario actual de SharePoint, pero ¿cómo? Si lo que queremos es que, al igual que el modelo de aplicaciones, en SharePoint no tengamos código de servidor o tengamos lo mínimo indispensable.

WCF al rescate! Bajo la seguridad de SharePoint, desplegamos un servicio WCF que devuelve única y exclusivamente el Token del usuario actual, que usaremos para hacer las llamadas a la Web Api. Algo tal como lo pintamos en el siguiente esquema:

 

  1. Nuestra Aplicación, que puede estar en SharePoint o no, necesita hacer primero una petición al servicio de WCF que le devuelva el Token del usuario actual. Para el caso de que no estemos en el contexto de SharePoint, esa llamada conlleva un proceso previo de autenticación de usuario en SharePoint.
  2. El servicio WCF obtienen el SPUserToken del usuario actual y se lo devuelve a la Aplicación.
  3. Hacemos la llamada a la Web Api, enviando correctamente serializado el SPUserToken para que este pueda abrir un contexto de servidor con las credenciales del usuario actual.

Al final, nos hemos encontrado con un proceso muy similar al que se ha implementado en las Aplicaciones de SharePoint y hemos construido una No-Provider-Hosted adecuada al paradigma de desarrollo que queremos implementar y necesario para nuestro SharePoint Everyware.

 

Saludos a todos…

Off Topic. Realizar cosas importantes desde el lugar donde más nos gusta vivir

Para los que ya me conocen, vivir en Tenerife es importante para mí, y aunque sea un punto flotante del Atlántico, eso no quiere decir que no piense en dejar mi granito de arena en el mundo y hacer cosas importantes.

Con esta filosofía me han acogido en Encamina, un gran familia que quiere hacer cosas importantes para el planeta pero desde su ciudad, Sagunto.

 

Después de unos grandes 8 años en General de Software, empiezo este nuevo reto en Encamina aportando mi ADN a su proyecto de ser líderes en el ecosistema Microsoft para el ámbito nacional y ser, algún día, un referente internacional en soluciones y servicios de nicho a través de la nube.

Agradecer a todos los compañeros y amigos de GSC, que tantos años me han soportado y espero que sepan que pueden contar conmigo para todo lo que pueda ayudar.

Trabajaré desde casa, aunque mi base operativa será Sagunto, y espero cumplir con las expectativas que han puesto en mí y conseguir superar todos los retos que tenemos en marcha en Encamina.

 

Saludos a todos…

OneDrive for Business. Compartir documentos evitando que sean descargados

Leyendo el post del amigo José Manuel, sobre cómo crear enlaces de descarga directa para archivos en Google Drive o OneDrive, en el que comentaba que echaba en falta la posibilidad de compartir un documento evitando que nadie lo descargue, que se puede visualizar en el sitio pero que no se pueda imprimir ni descargar. Me acordé que en Office 365 eso tendría que ser posible.

OneDrive for Business (al igual que SharePoint Online), que es la versión profesional de OneDrive (o el SkyDrive de toda la vida), sí que permite administrar los ficheros, en su versión para Grandes Empresas, mediante el uso de Windows Azure Active Directory Rights Management y permitir que un fichero se visualice en Office Web pero no pueda ser descargado, eso sí, hablamos de ficheros que puedan ser administrados y visualizados en Office Web.

Veamos como activarlo y configurarlo.

Nos vamos a panel de administración de Office 365, a la sección de «configuración del servicio», y pulsamos en la pestaña de «gestión de derechos»

 

Administramos el servicio y, en caso de que sea necesario, lo Activamos para que empiece a gestionar los documentos de nuestro Office 365.

 

Una vez que activamos el servicio, accedemos al panel de administración de SharePoint y configuramos que use el servicio de IRM que hemos activado.

 

Proteger los documentos frente a descargas

Una vez activado y configurado en SharePoint, podemos proteger los documentos de cualquier biblioteca de documentos o de nuestro SkyDrive Pro (o OneDrive for Business), accediendo a la página de «Information Rights Management (IRM)» de la configuración de la biblioteca.

 

Tan simple como activar la limitación de descarga de la biblioteca y repasar el resto de opciones que nos pueden ser útiles, por ejemplo, para que los usuarios no puedan subir documentos que no admitan IRM, bloquear la impresión, etc.

 

Con esto configurado, ya podemos compartir documentos controlando que no puedan ser descargas y que sólo se visualicen en Office Web, una razón más para no usar servicios gratuitos de almacenamiento en la nube y pasarte a una opción profesional como puede ser Office 365, SharePoint Online y OneDrive for Business.

 

Saludos a todos…

SharePoint 2013. Mostrar elementos de listas en la búsqueda de usuarios anónimos

El Servicio de Búsqueda de SharePoint indexa el contenido siempre atendiendo al contexto de seguridad del usuario, esto es, si un usuario no tiene permisos en un elemento de lista o documento, no podrá obtener ese resultado en una búsqueda. Cuando hablamos de usuarios anónimos, se cumple perfectamente esta regla y nos permite tener contenido público y contenido privado sin mucho esfuerzo.

Cuando creamos una lista o biblioteca de documentos, los usuarios anónimos heredan los permisos de seguridad del sitio y se les concede permisos de «Ver elementos» en la biblioteca.

 

Esta configuración de seguridad permite que los usuarios anónimos puedan acceder directamente a los documentos, mediante la URL de acceso, por ejemplo: http://www.compartimoss.com/BannerHome/banner_compartimoss.jpg, sin embargo, el rastreador del servicio de búsqueda no puede indexarlo ya que los usuarios anónimos no tienen acceso a la página que contiene las columnas o metadatos del documento.

Por motivos de seguridad, los usuarios anónimos no tienen acceso a los formularios de las listas porque se encuentra habilitada la característica «ViewFormPagesLockDown». Si la desactivamos, cosa que os recomiendo salvo contadas excepciones, pondrías a disposición de los usuarios anónimos estos documentos y formularios de listas.

La solución es bastante simple, romper la herencia de permisos de esta biblioteca y asignarle el nivel de permiso «Ver páginas de aplicaciones» a los usuarios anónimos.

$web = get-spweb «http://www.compartimos.com/banners»

$list = $web.Lists[«Banners«]

$list.BreakRoleInheritance($true)

$list.AnonymousPermMask = $list.AnonymousPermMask -bor ([int][Microsoft.SharePoint.SPBasePermissions]::ViewFormPages)

$list.Update()

 

Para comprobar que funciona, esperamos a que el buscador rastree el contenido o ejecutamos un rastreo manual, en una página añadimos un Web Part de Consulta de Contenido o Content Search Web Part, definimos la consulta de búsqueda, por ejemplo, URL:http://www.compartimoss.com/banners y publicamos. Recuerda comprobar sin autenticarte para asegurarte que eres un usuario anónimo y que obtienes un resultado tal como la imagen siguiente.

 

Básicamente, habilitamos el acceso a los formularios sólo para aquellas listas o bibliotecas que lo requieran y no para todo el sitio, con lo que reducimos la posible superficie de ataque en nuestra web.

 

Saludos a todos…

Webcast. Charla con los expertos: Todo lo que siempre quisiste saber sobre SharePoint, pero no te atreviste a preguntar

Un año más empezamos reuniendo a los expertos de la comunidad de SharePoint y los ponemos a vuestra disposición para que nos bombardeen a preguntas. ¿Te atreves a preguntar aquello que siempre quisiste saber sobre SharePoint y nunca lo has preguntado?

 

Entre los participantes en la charla contaremos con algunos de los mayores conocedores de la plataforma SharePoint como:

  • Gustavo Vélez
  • Juan Carlos González
  • Fabián Imaz
  • Alberto Díaz
  • David Martos
  • Miguel Tabera
  • Mario Cortes
  • Edin Kapic
  • Gerardo Reyes
  • Ricardo Muñoz
  • Juan Manuel Herrera
  • Juan Andrés Valenzuela
  • Haarón González
  • Juan Pablo Pussacq
  • Andrés Rojas
  • Vielka Rojas
  • Adrian Díaz
  • David Sánchez
  • Santiago Porras

Será el jueves 13 de febrero a las 15:00 (GMT) y os podéis registrar en el siguiente enlace.

Después del 2013 viene el 2014, y no es porque lo diga yo

Se ha acabado el 2013 y lo hemos llenado de horas y horas de trabajo y tiempo libre, que es más o menos las dos cosas a las que nos dedicamos como personas. Para empezar el año nuevo, he recibido mi cuarto reconocimiento como MVP en SharePoint Server, en un año muy duro, con mucho trabajo y que no podría conseguirlo sin Miriam, mi esposa, la que me soporta día a día sentado delante del portátil o del Tablet y que se merece todo este reconocimiento porque un año más lo hemos logrado.

 

Un reconocimiento que tampoco sería posible sin la ayuda de grandes amigos (Santiago Porras, Juan Carlos Gonzalez, Fabian Imaz, Gustavo Velez), o sin el trabajo que realizamos todos en General de Software, TenerifeDev, SUGES, CompartiMOSS o Comunidad Office 365. Gracias a todos por vuestro aporte.

También gracias a vosotros por leer este blog y por seguirme en un 2013 lleno de artículos, Webcast, conferencias y publicaciones, que os resumo:

Webcast

CompartiMOSS

  • Número 14. Empezamos hablando sobre el nuevo Design Manager de SharePoint 2013
  • Número 15, nos adentramos en el nuevo CSOM de SharePoint para Windows Phone
  • Número 16, os presentamos la Iberian SharePoint Conference
  • Número 17, funcionalidades tenemos para Records Management en SharePoint 2013
  • Número 18, convertimos documentos de Word en SharePoint 2013

TenerifeDev

Artículos destacados

Espero poder seguir con esta evolución y superar un año más las expectativas o retos del 2013.

 

Saludos a todos y feliz año!

SharePoint 2013. Referencias JavaScript en página de Aplicación

Desde hace unos años la interfaz de usuario ha ganado protagonismo en las aplicaciones y en un buen equipo de desarrollo no debe de faltar un perfil encargado de estas tareas. Cuando desarrollamos en alguna plataforma, por ejemplo, SharePoint, buscamos la mejor de que la interfaz de nuestra aplicación sea lo más similar a esta, para que la experiencia de los usuarios con nuestra aplicación sea lo más confiable posible, garantizando la usabilidad de la aplicación.

SharePoint nos ofrece toda una API en JavaScript que nos permite hacer uso de las interfaces que se usan en la plataforma y que son reconocibles para los usuarios. Por ejemplo, tenemos un espacio de nombre específico para trabajar con la interfaz de usuario, SP.UI.

Para hacer uso de este espacio de nombre, tenemos unos ficheros JavaScript que debemos referenciar en nuestras páginas de SharePoint. Por ejemplo, para usar un ModalDialog es necesario referenciar sp.ui.dialog.js. Para esto, lo que hacemos es añadir la referencia al fichero en el ContentPlaceHolder de la cabecera de nuestra página de la siguiente forma:

<script type=»text/javascript» src=»/_layouts/15/sp.runtime.js»></script>

<script type=»text/javascript» src=»/_layouts/15/sp.js»></script>

<script type=»text/javascript» src=»/_layouts/15/sp.ui.dialog.js»></script>

Esto nos permite hacer uso del API y abrir, por ejemplo, un diálogo modal con el siguiente método:

var waitDialog = SP.UI.ModalDialog.showWaitScreenWithNoClose(

‘Subiendo ficheros’, ‘Espere mientras se suben los ficheros…’, 100, 400);

Encontrándonos con el siguiente error JavaScript:

 

String is undefined en Strings.STS.L_StatusBarBlue_Text, o lo que traducido a un lenguaje más coloquial no se encuentra un recurso de texto en el JavaScript init.debug.js de SharePoint. ¿Nos faltará alguna referencia?

Si revisamos un poco la documentación y algunos artículos en internet, vemos que nos puede faltar en el fichero de recursos que se genera con el fichero JavaScript ScriptResx.ashx de la siguiente forma:

<script type=»text/javascript» src=»/_layouts/ScriptResx.ashx?culture=es-es&name=SP.Res»></script>

Aun así, sigue sin funcionar y tampoco creo que sea la forma más adecuada de enlazar un fichero de recursos, que depende del idioma del usuario.

Para asegurarnos que se registran correctamente los JavaScript de SharePoint y TODAS SUS DEPENDENCIAS, como por ejemplo, los ficheros de recursos, debemos usar el control ScriptLink.

<SharePoint:ScriptLink ID=»ScriptLink2″ name=»SP.Runtime.js» runat=»server» ondemand=»false» localizable=»false» loadafterui=»true» />

<SharePoint:ScriptLink ID=»ScriptLink1″ name=»SP.js» runat=»server» ondemand=»false» localizable=»true» loadafterui=»true» />

<SharePoint:ScriptLink ID=»ScriptLink3″ name=»SP.UI.Dialog.js» runat=»server» ondemand=»false» localizable=»false» loadafterui=»true» />

Este control se encarga de cargar el fichero JavaScript y los ficheros de los que depende, en este caso, los ficheros de recursos necesarios para la ejecución del ModalDialog. Además, si fuera necesario, podemos mejorar el tiempo de carga de nuestra página estableciendo la propieda ondemand a TRUE, y permitimos que los JavaScript se cargan de manera diferida. Si usamos este modo, hay que asegurarse de hacer la llamada a los métodos de la API usando las funciones SP.SOD.execute o SP.SOD.executeFunc

 

Feliz año 2014 a todos….

Aplicaciones Web Access 2013. ¿Dónde están mis datos?

Una de las novedades de Microsoft Access 2013 es la posibilidad de desarrollar Aplicaciones de SharePoint. Básicamente nos permite implementar en Access las tablas, formularios y macros, para luego publicar la base de datos en SharePoint 2013 como si de una Aplicación de SharePoint se tratara con las siguientes transformaciones, como se muestra en la siguiente imagen:

  • Las Vistas de Access (o formularios) se convierten en páginas HTML y JavaScript
  • Las Tablas de Access se convierten en tablas de SQL Server
  • Las Consultas de Access se convierten en Vistas de SQL Server
  • Las Macros de Access se transforman en Procedimientos Almacenados y Triggers de SQL Server

 

 

Este modelo de publicación de Aplicación de SharePoint se puede implementar en un SharePoint On-Premise, configurando correctamente el Servicio de Access, o en SharePoint Online de Office 365. Para implementaciones On-Premise podemos acceder sin ningún problema a la base de datos que el Servicio de Access crear para la Aplicación, pero ¿qué pasa con SharePoint Online? ¿Puedo acceder a los datos en el SQL Server de Azure que SharePoint Online usa para la App?

Si accedemos a la Aplicación Access en SharePoint, tenemos una opción de «Personalizar en Access», que nos abre la aplicación en Access 2013 para poder realizar cambios.

 

Con la Aplicación abierta en Access 2013, desde el menú Info tenemos una opción para Administrar las Conexiones a los datos.

 

La opción «Enable Read-Write Connection» habilita las conexiones de Lectura-Escritura a la base de datos SQL y nos muestra la cadena de conexión en la opción «View Read-Write Connection Information».

 

Ya con la cadena de conexión podemos conectar a la base de datos para, por ejemplo, preparar un paquete de integración de SQL Server y extraer los datos de la base de datos o para hacer informes con Reporting Services.

Access 2013 puede ser una buena opción para el desarrollo de pequeñas aplicaciones, con funcionalidades determinadas y sencillas, que publicándolas en SharePoint nos abren un mundo de posibilidades. El poder acceder a los datos de la Aplicación Web Access amplían las capacidades de nuestras soluciones en SharePoint.

 

Saludos a todos…

SharePoint. CryptographicException Access is Denied en el Asistente de Configuración de Producto

Cuando se crea una granja de SharePoint por primera vez, necesita usar los Servicios de Criptografía de Windows Server para encriptar ciertos componentes del servidor, como la Passphrase de la granja.

Después de un fin de semana largo, intentando crear la granja en un nuevo servidor que devolvía el siguiente error:

No se puedo crear la base de datos de configuración.

Se inició una excepción de tipo System.Security.Cryptography.CryptographicException. Información adicional de la excepción: Access is denied.

Me he puesto a leer en la MSDN la documentación sobre este espacio de nombre System.Security.Cryptography buscando el motivo de por qué tengo un acceso denegado, después de comprobar que las cuentas de instalación tienen los permisos adecuados en todos los servidores de la granja y a punto de convertir a esa cuenta como administrador de dominio L, sin ningún éxito.

Descubro que las claves se generan en la siguiente carpeta C:UsersAll UsersMicrosoftCryptoRSAMachineKeys y que por casualidad, en este servidor, los administradores locales no tienen permisos en esta carpeta. Con lo que, si SharePoint quiere generar las claves no va a poder y sólo me queda por probar darle permisos totales a los Administradores Locales en esa carpeta, para ver qué pasa.

Mi sorpresa es que ha solucionado el problema y se ha creado correctamente la granja de SharePoint.

Un problema menos y otro para enmarcar y recordar.

 

Saludos a todos…

SharePoint. El valor de un buen buscador

Una de las principales capacidades de SharePoint se basa en el Buscador. Desde las primeras versiones de SharePoint, ha ido evolucionando sus características y mejorando en cada una de las versiones, y las capacidades de búsquedas no se han quedado atrás.

 

SharePoint 2013 unifica los servidores de búsqueda de Microsoft bajo una única versión que contempla los mejor del Buscador Empresarial y de FAST Search, un producto con la mejor tecnología de búsqueda y capacidades increíbles que podemos ver en el siguiente artículo del maestro Daniel Seara.

¿Qué aporta a SharePoint el buscador?

Si no lo es todo, creo que es parte del todo, ya que ofrece una gran diferenciación con respecto a otros productos similares. El buscador de SharePoint ofrece la principal característica de buscar dentro del contenido de documentos, listas, personas, conversaciones, videos, etc.

También ofrece la capacidad de poder rastrear diferentes orígenes de contenidos que no son SharePoint, como Exchange, carpetas compartidas, sitios webs, para que el usuario pueda encontrar resultados en ellos.

… pero no todo es que el usuario realice una búsqueda…

Si nos damos una vuelta por el servicio de búsqueda, nos encontramos con que fundamentalmente tenemos dos conceptos que se encargan, uno de rastrear el contenido e indexarlo y el otro de devolver las consultas al usuario. Y es en las consultas donde quiero que nos paremos y reflexionemos, ¿por qué no usar estas consultas para mostrar contenido al usuario?

Normalmente el concepto Buscador se asocia a un cuadro de texto donde el usuario realizar una pregunta al contenido, pero con SharePoint podemos dar un paso más y utilizar todo el potencial del buscador para ofrecer contenido. Veamos un ejemplo.

Publicando las sesiones de la Iberian SharePoint Conference 2013

La web de la Conferencia se ha construido utilizando las características de Publicación de Contenido Web de SharePoint 2013. Se han aprovechado las características de tipos de contenido, páginas maestras y plantillas de páginas para ofrecer la información referente a la Conferencia.

Hasta aquí todo normal, páginas de contenido que se muestran utilizando el menú o el Web Part de Consulta de Contenido. El cambio lo hemos dado para mostrar el contenido de las sesiones, sesiones que podemos clasificar por Speaker, Sala o Track al que pertenece y es aquí donde el buscador de SharePoint entra en juego.

Utilizando las capacidades de refinamiento de consulta del buscador de SharePoint, y sin necesidad de tirar una línea de código, mostramos todas las sesiones con la posibilidad de filtrar o refinar por Speaker, Sala o Track, como muestra la siguiente imagen.

 

¿Cómo se hizo?

Básicamente seguimos los siguientes pasos:

  1. Creamos un tipo de Contenido Session, que hereda de Página, con los metadatos que necesitábamos: Título, Imagen, Sala, Track, Speaker, etc.
  2. Creamos una Plantilla de Página, basándonos en el tipo de contenido Session, que nos permita crear cada una de las sesiones con su Video, Slide y los metadatos oportunos.
  3. Definimos en el Esquema de búsqueda, las propiedades administradas que creamos con el tipo de contenido de Session, para que permitan búsqueda y refinamiento.
  4. Dejamos al servicio de búsqueda realizar su trabajo de rastreo e indexado.
  5. Creamos una página para nuestra consulta, donde insertamos el Web Part de Consulta de Búsqueda y definimos la consulta que nos devuelve el tipo de Contenido Session, con una plantilla de visualización adecuada, en este caso, Paginada con imagen a la izquierda en tres líneas.
  6. En la misma página, insertamos a la derecha un Web Part específico de Refinamiento y seleccionamos las propiedades administradas que queremos utilizar para el refinamiento
  7. Dejamos que el usuario juegue con la página J

Fácil, ¿no?

Como os comenté al principio, el servicio de búsqueda es capaz de rastrear e indexar contenido externo que no pertenezca a SharePoint, y esto mismo que hemos realizar con contenido de Páginas lo podíamos haber realizar perfectamente utilizando un BDC que conecta con una base de datos de Cursos, que hemos configurado para que SharePoint indexe y al que le hemos definido unas propiedades administradas que nos permita realizar filtros en función de los metadatos de los cursos, y, al igual que con las Páginas, sin necesidad de una línea de desarrollo.

Entraremos más en detalle en estos pasos, pero básicamente son muy simples, tan sólo requiere de un cambio de mentalidad para aprovechar todo el potencial de las búsquedas de SharePoint pero no para buscar, si no para mostrar el contenido al usuario. Un buen ejemplo, es la web de CompartiMOSS que está completamente implementada con búsquedas.

 

Saludos a todos…

P.D. En breve os enviaremos los usuarios y contraseñas para acceder al contenido de la conferencia.