SharePoint 2010: Como hacer Joins entre listas de diferentes sitios con LINQ To SharePoint!

Si queremos hacer una consulta de LINQ To SharePoint en la que incluyamos Joins entre listas de diferentes sitios de una misma colección de sitios nos encontraremos conque inicialmente esto no es posible debido a que SPMetal genera las entity clasess relativas a un único sitio, de manera que si una lista de un sitio incluye un lookup a una lista de otro sitio no se generará la correspondiente entidad. En su lugar, SPMetal generará un valor ID para el elemento en la lista relacionada. Esto implica que para poder hacer un Join entre listas de diferentes sitios tendremos que seguir los siguientes pasos:

  • Mover de forma temporal las listas en base a las que vamos a definir las consultas al mismo sitio y generar las Entity Clasess con SPMetal.
  • Usar el método DataContext.RegisterList para indicar al runtime que una de las listas no pertenece al sitio actual.

Un ejemplo de esta idea, es la siguiente:

   1: using (ManufacturingSiteDataContext context = new ManufacturingSiteDataContext("http://localhost/sites/manufacturing/construction"))

   2: {

   3:   context.RegisterList<Construction.ProjectsItem>("Projects",   

   4:     "/sites/Manufacturing", "Projects");

   5:  

   6:   var results = from projectItem in context.PriorityProjects

   7:                 select new { projectItem.Title, 

   8:                              projectItem.ExecutiveSponsor, 

   9:                              projectItem.Project.Leader };

  10:  

  11:   foreach (var item in results)

  12:   {

  13:     output.AppendFormat("Title: {0}  Sponsor: {1}  Leader: {2}", 

  14:                             item.Title, item.ExecutiveSponsor, item.Leader);

  15:   }

  16: }

Fuente: SharePoint Guidance http://msdn.microsoft.com/en-us/library/ff650022.aspx

¡Hackaton Windows 8: Resumen de los dos primeros días!

Recogiendo el guante de la gente de Cádiz, me he decidido a hacer un resumen de como han sido las dos primeras jornadas del hackaton de Santander. Tengo que decir que me he quedado gratamente sorprendido por la respuesta de los participantes, ya que desde el principio todos han puesto muchas ganas y el resultado palpable es qué tenemos 6-7 aplicaciones en proceso de creación…y espero que todas acaben viendo la luz. Dicho esto, vamos a los detalles.

Logística

El hackaton de Santander se está realizando en la sala de formación del CIIN en la qué, como novedad frente al resto de ciudades, hemos puesto (gracias a mi compañero Pablo Sousa @psousal) hemos puesto 20 equipos con todo instalado para los participantes y así evitar cualquier retraso en esta línea. Además, contábamos con dos salas contiguas cedidas por el Grupo Sodercan para facilitar la realización de reuniones de los participantes, qué quien tuviese portatil pudiese trabajar allí, etc.

En cuestiones de “alimentación”, en Santander hemos sido más modestos que en otras ciudades…si que hemos tenido café y pastas cortesía del grupo de usuarios Nuberos.Net y para la comida gracias a McDonalds hemos tenido precios especiales.

Mentores

Unos auténticos cracks, para HTML + JS hemos contado con Javi Lopez (@JaviLopezG) y para la parte de C#+XAML hemos contando con Rafa Serna (@rafasermed). Aprovecho para comentar que algunas sesiones están grabadas y accesibles desde este enlace.

Sesiones

Hemos seguido la agenda común de todas las ciudades y además hemos tenido sesiones fuera de agenda en la que hemos contado con dos cracks de Cantabria en lo relativo a gestión de proyectos, gestión del tiempo y gestión de habilidades: Miguel Sierra (@migsierra) y David Diego (@TresssDes)…las charlas que nos dieron los dos fueron simplemente espectáculares, y como prueba el título de la charla de David: “Superpoderes para programadores”.

Aplicaciones y participantes

Sin duda, lo mejor del hackaton: los participantes y las aplicaciones que se están currando. Empezamos el viernes con 23 asistentes al hackaton…algunos ya venían con equipo e ideas pensadas (en concreto 3 equipos), por lo que para formar el resto de equipos y sobre todo para poner ideas sobre la mesa hicimos lo siguiente:

  • Una sesión de brainstorming en la que sacamos unas 10-12 ideas.
  • Una vez las ideas estaban listas, mediante postits de colores los participantes sin equipo fueron por una parte indicando la tecnología en la querían desarrollar y por otro sus preferencias en cuanto a ideas planteadas.
  • A partir de aquí un servidor (@jcgm1978) y @JaviLopezG fuimos un poco facilitando la formación del resto de equipos.

Y ahora sí, aquí va el detalle de las aplicaciones que se están desarrollando…algunas tienen muy buena pinta:

  • Equipo A:
    • Participantes: 4 personas.
    • Tecnología: C# + XAML.
    • Resumen: Aplicación para localización de aparcamientos.
    • Nombre: uPark.
  • Equipo B:
    • Participantes: 4 personas.
    • Tecnología: HTML 5 + JS.
    • Resumen: Aplicación para realizar apuestas online.
    • Nombre: betTER!
  • Equipo C:
    • Participantes: 3 personas.
    • Tecnología: C# + XAML.
    • Resumen: Aplicación para gestión de tiempo (bolsa de horas) de profesionales TIC.
    • Nombre: ProW8rk.
  • Equipo D:
    • Participantes: 4 personas.
    • Tecnología: C# + XAML.
    • Resumen: Lector de libros hablados en formato Daysi.
    • Nombre: Lector Daisy.
  • Equipo E:
    • Participantes: 2 personas.
    • Tecnología: C#+ XAML.
    • Resumen: Gestor de tareas.
    • Nombre: ToDo TASK.
  • Equipo F:
    • Participantes: 2 personas.
    • Tecnología: HTML 5 + JS.
    • Resumen: Aplicación para facilitar la creación de la lista de la compra.
    • Nombre: Shopper List.

Como veis, las aplicaciones tienen muy buena pinta y aparte de las fotos que os voy a poner ahora mismo, podéis ver más en el grupo de Facebook del CIIN, en este enlace.

Hackaton_4 Hackaton_7 Hackaton_13
Hackaton_17 Hackaton_23 20120908_163337