Inherits Cloud

Loving Microsoft Cloud, specially Office 365

Office365: Usando linq to sharepoint en SharePoint Online

Para aquellos que no estén familiarizados con linq 2 sharepoint, os recomiendo este link con un sencillo “Get Started”:

Como veréis en el link, se hace referencia a la herramienta de SharePoint SPMetal, que nos permite sacar entidades tipadas de nuestras listas de SharePoint (similar a lo que hace Entity Framework con una base de datos).

Ahora bien, si intentamos lanzar la herramienta SPMetal contra un site de Office 365, veremos que nos dará un error de acceso denegado, a pesar de haber utilizado los comandos de useremoteapi, user y password

image

Al parecer, según comentan los ingenieros de MS del foro de soporte de Office 365, la herramienta SPMetal no está diseñada para funcionar con sitios de SharePoint Online.

Sin embargo, Linq to SharePoint sí está soportado en desarrollos sandbox, tal y como podemos ver en este enlace: http://msdn.microsoft.com/en-us/library/hh147180.aspx

La pena es que sin SPMetal, tiene poca utilidad.

Si tenéis mucho interés en utilizar linq2sp en vuestros desarrollos para Office 365, y disponéis de algún servidor SharePoint on-premise, podéis utilizar un sencillo truco para hacerlo.

Lo que yo he hecho (sólo por probar si era viable. no he hecho nada serio), ha sido:

  • Crear una lista en mi SharePoint Online. Ejm. Products
  • Guardamos esa lista como plantilla y la exportamos a nuestro sitio de SharePoint on premise.
  • Desde SharePoint On Premise, ejecutamos SPMetal, y usamos el parámetro /parameters que nos permite pasarle un fichero XML con un esquema predefinido que permite configurar mucho la forma en que SPMetal genera las clases desde las listas. Esto nos ayudará a generar código sobre las listas o tipos de contenido que nos interese, evitando posibles problemas de tipos entre el sitio completo de Office 365 y el de OnPremise. Yo he utilizado el siguiente fichero XML, para generar el código únicamente de la Lista de Products

  • SPMetal detectará posibles dependencias entre tipos de contenido, y añadirá todo lo necesario para generar las entidades a partir de la lista Products, como por ejemplo, incluyendo una entidad para el tipo de contenido “Item”, ya que la lista de products hereda de ese tipo de contenido.
  • Una vez generado el fichero de código, ya lo podemos añadir a nuestra solución de usuario en Visual Studio y probarlo.
  • Para las pruebas, he creado un webpart visual en modo sandbox, con 2 botones que ejecutan una sencilla consulta LINQ y sacan ítems de la lista Products.

image

  • Este es el código utilizado:

De esta forma, si vuestro requerimiento de usar linq 2 sharepoint es muy fuerte, se puede llegar a conseguir.

Para acabar, comentar una curiosidad que me ha pasado durante estas pruebas. Inicialmente he intentado usar un GridView de asp.net para mostrar la información, configurando el DataSource al resultado de la query de Linq, y dejando la propiedad AutoGenerateColumns a true. Esto no me ha funcionado, ya que el GridView, de forma interna, ha intentado generar las columnas usando Reflection, y esas operaciones no están permitidas en la Sandbox.

Espero que os sirva.

Saludos!!

2 Comentarios

  1. Hola Luis,
    🙂 muy buen post…lo que has experimentado con el control GridView se debe a que las soluciones de tipo Sandbox no soporte tipos anónimos. Si al control GridView le das un List debería funcionarte sin problemas.

    ¡Un saludo!

  2. lmanez

    29 noviembre, 2011 at 9:54 pm

    Gracias JC!!
    así da gusto 🙂

    Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

*

© 2017 Inherits Cloud

Tema por Anders NorenArriba ↑