16
Mejoras en el manejo de listas con LINQ To SharePoint

Mario Cortés Flores [email protected] Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Embed Size (px)

Citation preview

Page 1: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Mejoras en el manejo de listas con LINQ To SharePoint

Page 2: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

SharePoint 2010: Evolución Vs RevoluciónMario Cortés [email protected]://blogs.renacimiento.com/mcortes

Consultor SharePoint en RenacimientoCoordinador SUGES

Coautor de:

Page 3: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Agenda

LINQ to SharePointRelaciones entre listasSPMetalModificación de datosPost-Deployment Extension LINQ To SharePoint fuera de SharePoint!!Limitaciones y rendimiento

Page 4: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

LINQ To SharePoint

Permite manejar las listas de SharePoint desde clases de .NETLas listas se convierten en entidades y las columnas en propiedadesSe implementa con Microsoft.SharePoint.Linq

var clientesDeMadrid = from customer in Customers where customer.City == "Madrid" select customer;

Page 5: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Antes y Después

Hasta ahora Beneficios con LINQ

Las consultas CAML son complejasPropenso a erroresRealizar consultas cruzadas es complejoMejor rendimiento

Sintaxis de consultas más naturalLos datos están fuertemente tipadosEs sencillo realizar consultas cruzadas

SPList listaDeFacturas = SPContext.Current.Web.Lists["Facturas"];SPQuery spQuery = new SPQuery();spQuery.Query = string.Format(@"<Where> <Eq>

<FieldRef Name='{0}' LookupId='TRUE'/><Value Type='Lookup'>1</Value>

</Eq> </Where>", listaDeFacturas.Fields["Cliente"].InternalName);

GridView1.DataSource = listaDeFacturas.GetItems(spQuery);GridView1.DataBind();

ClientesDataContext dxClientes = new ClientesDataContext("http://win-u6irsic8d95/sitios/linq/");

var listaFacturas = from facturas in dxClientes.Facturas where facturas.Cliente.CIF == "11111111H" select new {

facturas.Id, facturas.Título, NombreCliente = facturas.Cliente.Título, facturas.Cliente.Ciudad };

GridView1.DataSource = listaFacturas; GridView1.DataBind();

Page 6: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

LINQ To SharePoint (2)

Las consultas LINQ se transforman en consultas CAMLPodemos seguir trabajando con CAML

Se han ampliado las clases: SPQuerySPSiteDataQuery

Para construir las entidades de LINQ se utiliza el ejecutable SPMetal

Page 7: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Relaciones entre listas

Las relaciones entre listas se construyen mediante columnas de tipo LookupLas columnas Lookup se han mejorado incorporando:

Integridad referencial entre listasProjected fieldsPosibilidad de hacer JOINS

Consideraciones de seguridad

Page 8: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Joins

Se ha modificado CAML para soportar JOINS aunque es más fácil hacerlo desde LINQPara hacer un JOIN es necesario que al menos una de las columnas sea del tipo Lookup

var listaFacturas = from facturas in dxClientes.Facturas join clientes in dxClientes.Clientes on facturas.Cliente.Id equals clientes.Id select new {

facturas.Id, facturas.Título, NombreCliente = clientes.Título};

Page 9: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

SPMetal

Construye las entidades y el contexto de LINQ to SharePoint a partir de la estructura de un sitioSe encuentra en “…\14\bin\SPMetal.exe”Admite un fichero XML para personalizar la generación

SPMETAL.EXE /web:http://win-u6irsic8d95/sitios/linq /namespace:Clientes /code:SPClientes.cs

Page 10: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Modificación de datos

Se puede realizar acciones de edición, nuevo y borradoAconsejable hacer un solo SubmitChanges para todos los cambiosMantiene un control de concurrencia, por defecto optimistaSe puede extender la modificación para agregar nuestra propia funcionalidad

Page 11: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Post-Deployment Extension

Extiende la estructura de las listas sin recompilar el assembly original mediante ICustomMappingPodemos mapear nuevas columnas a nuevas propiedadesManeja conflictos producidos en las nuevas columnas

Page 12: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

LINQToSP fuera de SharePoint!!

LINQ To SharePoint puede ejecutarse fuera del contexto del servidor (Client Side Code)

Data Services, utiliza la dll Microsoft.SharPoint.Linq.DataservicesMO cliente, mediante LINQ to Object

Page 13: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Limitaciones y rendimiento

Cualquier consulta que pueda traducirse directamente a CAML es eficienteAlgunas operaciones de LINQ no están soportadas

FacturasDocumento factura = dxClientes.Facturas.First(f => f.Cliente.CIF == "11111111H");

FacturasDocumento factura = dxClientes.Facturas. ToList<FacturasDocumento>().First(

f => f.Cliente.CIF == "11111111H");

Ineficiente

Eficiente

Page 14: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Limitaciones y rendimiento (2)

Más eficiente si desactivamos el trackingMáximo de 6 projected fields en joinLímite en el número de elementos devueltos:

Usuario normal: 5.000 elementosSuperusuario: 20.000 elementos

Page 15: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

Gracias !!!

Mario Cortés [email protected] http://blogs.renacimiento.com/mcortes

Page 16: Mario Cortés Flores mcortes@renacimiento.com  Consultor SharePoint en Renacimiento Coordinador SUGES Coautor de:

©2009 Microsoft, Microsoft Dynamics, the Office logo, and Your potential. Our passion. are trademarks of the Microsoft group of companies. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.