spug pt linqtosharepoint

35
Comunidade Portuguesa de SharePoint 10ª Reunião Presencial 16/04/2011

Upload: comunidade-portuguesa-de-sharepoiint

Post on 10-May-2015

494 views

Category:

Technology


0 download

DESCRIPTION

Comunidade Portuguesa de SharePoint - Linq to SharePoint

TRANSCRIPT

Page 1: Spug pt linqtosharepoint

Comunidade Portuguesa de SharePoint

10ª Reunião Presencial

16/04/2011

Page 2: Spug pt linqtosharepoint

Thank you for sponsoring!

Page 3: Spug pt linqtosharepoint

Agenda

09:30 Recepção10:00 Abertura10:30 Linq to SharePoint com André Vala 11:30 Coffee-break 11:45 Painel de Discussão 13:00 Final da Reunião & Almoço

Page 4: Spug pt linqtosharepoint

LINQ to SharePoint

Page 5: Spug pt linqtosharepoint

LINQ to SharePoint

LINQ?

LINQ to SharePoint?

Desenvolvimento com LINQ

Common Pitfalls

Performance

Cenários de uso

DEMO

DEMO

DEMODEMO

DEMO

Page 6: Spug pt linqtosharepoint

LINQ?

LINQ = Language Integrated Query• LINQ to SQL• LINQ to Objects• LINQ to XML• LINQ to ?

DadosLINQ Provider

APP

.NET Query

.NET Dados

Page 7: Spug pt linqtosharepoint

LINQ Data Context• Ponto de entrada para o LINQ• Permite obter e actualizar informação na fonte de

dados• Traduz queries sobre objectos em queries na

linguage nativa da fonte de dados, e constrói objectos a partir dos resultados provenientes da fonte de dados

DadosLINQ Provider

APP

.NET Query

.NET DadosDat

a Co

ntex

t

Page 8: Spug pt linqtosharepoint

LINQ to SQLusing System.Data.Linq;DataContext db = new DataContext(@”mydatabase.mdf”);

Table<BankAccount> BankAccounts = db.GetTable<BankAccount>();

var query =from account in BankAccountswhere account.Bank == “Millennium BCP”select account;

foreach (BankAccount account in query){

Console.WriteLine(“Number: {0}”, account.Number);}

Page 9: Spug pt linqtosharepoint

LINQ to SharePoint?

• Utiliza um LINQ to SharePoint provider– Microsoft.SharePoint.Linq.dll– Transforma .NET em CAML– Transforma List Items em .NET

SharePointLINQ to SharePoint

APP

.NET CAML

.NET List Items

Page 10: Spug pt linqtosharepoint

LINQ to SharePointusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);

EntityList<BankAccount> BankAccounts = data.GetList<BankAccount>(“BankAccounts”);

var query =from account in BankAccountswhere account.Bank == “Millennium BCP”select account;

foreach (BankAccount account in query){

Console.WriteLine(“Number: {0}”, account.Number);}

Page 11: Spug pt linqtosharepoint

DEMO: Hello LINQ!

Page 12: Spug pt linqtosharepoint

Desenvolvimento com LINQ

• Entidades• Adicionar Itens• Eliminar Itens• Reciclar Itens• Actualizar Itens• Logging

Page 13: Spug pt linqtosharepoint

Entidades

• Content Type Entidade Classe• Coluna Atributo Membro

BankAccount account = new BankAccount(){

Number = “99100048169”,Bank = “Millennium BCP”

};

Page 14: Spug pt linqtosharepoint

Entidades Definição Manual[ContentType(Name=“BankAccount”, Id=“0x0104”)]public partial class BankAccount{

[Column(Name=“Number”, FieldType=“Text”)]public string Number { get; set; }

[Column(Name=“Bank”, FieldType=“Text”)]public string Bank { get; set; }

}

Page 15: Spug pt linqtosharepoint

Entidades Geração Automática

SPMetalFerramenta para gerar as entidades para um conjunto de content types / listas

Onde está?C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN

Como se usa?SPMetal

/web:http://createbox /code:BankAccounts.cs/namespace:MyApp.SharePoint.Data

Page 16: Spug pt linqtosharepoint

Adicionar Itensusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);

BankAccount account = new BankAccount(){

Number = “99100048169”,Bank = “Millennium BCP”

};

data.BankAccounts.InsertOnSubmit(account);

data.SubmitChanges();

Page 17: Spug pt linqtosharepoint

Eliminar Itensusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);

foreach (BankAccount account in data.BankAccounts){

if (account.Bank == “Millennium BCP”)data.BankAccounts.DeleteOnSubmit(account);

}

data.SubmitChanges();

Page 18: Spug pt linqtosharepoint

Reciclar Itensusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);

foreach (BankAccount account in data.BankAccounts){

if (account.Bank == “Millennium BCP”)data.BankAccounts.RecycleOnSubmit(account);

}

data.SubmitChanges();

Page 19: Spug pt linqtosharepoint

Actualizar Itensusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);

foreach (BankAccount account in data.BankAccounts){

if (account.Bank == “Millennium BCP”)account.Bank = “BES”;

}

data.SubmitChanges();

Page 20: Spug pt linqtosharepoint

Loggingusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);

StringWriter writer = new StringWriter();data.Log = writer;

// queries LINQ(...)

string caml = writer.ToString();

Page 21: Spug pt linqtosharepoint

DEMO: LINQing

Page 22: Spug pt linqtosharepoint

Common Pitfalls

• To Dispose or Not to Dispose• Acesso anónimo• Display Names

Page 23: Spug pt linqtosharepoint

Pitfall To Dispose or Not to DisposeDataContext data = new DataContext(“http://createbox”);

Dispose? SIM

DataContext data = new DataContext(SPContext.Current.Web.Url);

Dispose? NÃO

string webUrl = SPContext.Current.Web.Site.RootWeb.Url;DataContext data = new DataContext(webUrl);

Dispose? SIM

1

2

3

Page 24: Spug pt linqtosharepoint

Pitfall To Dispose or Not to Disposeusing (DataContext data = new DataContext(“http://createbox”)){

(...)}

DataContext data = new DataContext(SPContext.Current.Web.Url);(...)

string webUrl = SPContext.Current.Web.Site.RootWeb.Url;using (DataContext data = new DataContext(webUrl)){

(...)}

1

2

3

Page 25: Spug pt linqtosharepoint

Pitfall Acesso Anónimo

• LINQ to SharePoint não suporta acesso anónimo

• Há um workaround mas tem desvantagens:– Grande impacto no desempenho– Utiliza RunWithElevatedPrivileges

• Solução: regressar ao CAML...

Page 26: Spug pt linqtosharepoint

DEMO: Acesso Anónimo

Page 27: Spug pt linqtosharepoint

Pitfall Display Names

• SPMetal utiliza o Display Name das colunas para gerar os membros das classes

• O que acontece quando os nomes das colunas têm caracteres especiais? POIS...

• E como é que isso se resolve?...

Page 28: Spug pt linqtosharepoint

DEMO: Display Names

Page 29: Spug pt linqtosharepoint

Performance

• Object Tracking Enabled• LINQ vs CAML

Page 30: Spug pt linqtosharepoint

Performance Object Tracking Enabled

Permite optimizar o desempenho em acessos read-only...

DataContext data = new DataContext(SPContext.Current.Web.Url);data.ObjectTrackingEnabled = false;

Page 31: Spug pt linqtosharepoint

Performance LINQ vs CAML

• A tradução LINQ para CAML é feita em tempo real

• Existe uma penalização no desempenho• A query gerada pode ser ineficiente• Nem todas operações definidas em LINQ são

suportadas em CAML...

Page 32: Spug pt linqtosharepoint

DEMO: Performance

Page 33: Spug pt linqtosharepoint

Cenários de Uso

• Muito simples de usar mas não é a solução quando...– Código tem que correr no cliente– A solução tem que suportar acesso anónimo– O desempenho é crítico– Existem colunas lookup que se referem a listas

noutros sites da mesma site collection

Page 35: Spug pt linqtosharepoint

Comunidade Portuguesa de SharePoint

10ª Reunião Presencial

16/04/2011