Mario Cortés Flores mcortes@renacimiento.com Consultor SharePoint en Renacimiento Coordinador...

Post on 01-Mar-2015

11 views 4 download

Transcript of Mario Cortés Flores mcortes@renacimiento.com Consultor SharePoint en Renacimiento Coordinador...

Mejoras en el manejo de listas con LINQ To SharePoint

SharePoint 2010: Evolución Vs RevoluciónMario Cortés Floresmcortes@renacimiento.comhttp://blogs.renacimiento.com/mcortes

Consultor SharePoint en RenacimientoCoordinador SUGES

Coautor de:

Agenda

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

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;

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();

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

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

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};

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

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

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

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

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

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

Gracias !!!

Mario Cortés Floresmcortes@renacimiento.com http://blogs.renacimiento.com/mcortes

©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.