際際滷

際際滷Share a Scribd company logo
10捉 Reuni達o PresencialComunidade Portuguesa de SharePoint16/04/2011
Thank you for sponsoring!
   Agenda09: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
LINQ to SharePoint
  LINQ to SharePointLINQ?LINQ to SharePoint?Desenvolvimento com LINQCommon PitfallsPerformanceCen叩rios de usoDEMODEMODEMODEMODEMO
LINQ?LINQ = Language Integrated QueryLINQ to SQLLINQ to ObjectsLINQ to XMLLINQ to ?DadosAPP.NETQueryLINQ Provider.NETDados
LINQ Data ContextPonto de entrada para o LINQPermite obter e actualizar informa巽達o na fonte de dadosTraduz queries sobre objectos em queries na linguage nativa da fonte de dados, e constr坦i objectos a partir dos resultados provenientes da fonte de dadosDadosAPP.NETQueryLINQ ProviderData Context.NETDados
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 BCPselect account;foreach (BankAccount account in query){Console.WriteLine(Number: {0}, account.Number);}
LINQ to SharePoint?Utiliza um LINQ to SharePoint providerMicrosoft.SharePoint.Linq.dllTransforma .NET em CAMLTransforma List Items em .NETSharePointAPP.NETCAMLLINQ to SharePoint.NETList Items
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 BCPselect account;foreach (BankAccount account in query){Console.WriteLine(Number: {0}, account.Number);}
DEMO: Hello LINQ!
Desenvolvimento com LINQEntidadesAdicionar ItensEliminar ItensReciclar ItensActualizar ItensLogging
EntidadesContent Type  Entidade  ClasseColuna  Atributo  MembroBankAccount account = newBankAccount(){Number = 99100048169,Bank = Millennium BCP};
Entidades Defini巽達o Manual[ContentType(Name=BankAccount, Id=0x0104)]publicpartialclass BankAccount{[Column(Name=Number, FieldType=Text)]publicstring Number { get; set; }	[Column(Name=Bank, FieldType=Text)]publicstring Bank { get; set; }}
Entidades Gera巽達o Autom叩ticaSPMetalFerramenta para gerar as entidades para um conjunto de content types / listasOnde est叩?C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BINComo se usa?SPMetal /web:http://createbox/code:BankAccounts.cs/namespace:MyApp.SharePoint.Data
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();
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();
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();
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();
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();
DEMO: LINQing
Common PitfallsTo Dispose or Not to DisposeAcesso an坦nimoDisplay Names
Pitfall To Dispose or Not to Dispose1DataContext data = new DataContext(http://createbox);Dispose?  SIMDataContext data = new DataContext(SPContext.Current.Web.Url);Dispose?  NOstring webUrl = SPContext.Current.Web.Site.RootWeb.Url;DataContext data = new DataContext(webUrl);Dispose?  SIM23
Pitfall To Dispose or Not to Dispose1using (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)){	(...)}23
Pitfall Acesso An坦nimoLINQ to SharePoint n達o suporta acesso an坦nimoH叩 um workaround mas tem desvantagens:Grande impacto no desempenhoUtiliza RunWithElevatedPrivilegesSolu巽達o: regressar ao CAML...
DEMO: Acesso An坦nimo
Pitfall Display NamesSPMetal utiliza o Display Name das colunas para gerar os membros das classesO que acontece quando os nomes das colunas t棚m caracteres especiais? POIS...E como 辿 que isso se resolve?...
DEMO: Display Names
Performance Object Tracking EnabledLINQ vs CAML
Performance Object Tracking Enabled Permite optimizar o desempenho em acessos read-only...DataContext data = new DataContext(SPContext.Current.Web.Url);data.ObjectTrackingEnabled = false;
Performance LINQ vs CAMLA tradu巽達o LINQ para CAML 辿 feita em tempo realExiste uma penaliza巽達o no desempenhoA query gerada pode ser ineficienteNem todas opera巽探es definidas em LINQ s達o suportadas em CAML...
DEMO: Performance
Cen叩rios de UsoMuito simples de usar mas n達o 辿 a solu巽達o quando...C坦digo tem que correr no clienteA solu巽達o tem que suportar acesso an坦nimoO desempenho 辿 cr鱈ticoExistem colunas lookup que se referem a listas noutros sites da mesma site collection
Refer棚nciasMSDN: Using LINQ to SharePointhttp://msdn.microsoft.com/en-us/library/ee535491.aspxV鱈deos no Channel 9http://channel9.msdn.com/Learn/Courses/SharePoint2010Developer/LINQtoSharePointUnit
10捉 Reuni達o PresencialComunidade Portuguesa de SharePoint16/04/2011

More Related Content

Spug pt linqtosharepoint

  • 1. 10捉 Reuni達o PresencialComunidade Portuguesa de SharePoint16/04/2011
  • 2. Thank you for sponsoring!
  • 3. Agenda09: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
  • 5. LINQ to SharePointLINQ?LINQ to SharePoint?Desenvolvimento com LINQCommon PitfallsPerformanceCen叩rios de usoDEMODEMODEMODEMODEMO
  • 6. LINQ?LINQ = Language Integrated QueryLINQ to SQLLINQ to ObjectsLINQ to XMLLINQ to ?DadosAPP.NETQueryLINQ Provider.NETDados
  • 7. LINQ Data ContextPonto de entrada para o LINQPermite obter e actualizar informa巽達o na fonte de dadosTraduz queries sobre objectos em queries na linguage nativa da fonte de dados, e constr坦i objectos a partir dos resultados provenientes da fonte de dadosDadosAPP.NETQueryLINQ ProviderData Context.NETDados
  • 8. 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 BCPselect account;foreach (BankAccount account in query){Console.WriteLine(Number: {0}, account.Number);}
  • 9. LINQ to SharePoint?Utiliza um LINQ to SharePoint providerMicrosoft.SharePoint.Linq.dllTransforma .NET em CAMLTransforma List Items em .NETSharePointAPP.NETCAMLLINQ to SharePoint.NETList Items
  • 10. 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 BCPselect account;foreach (BankAccount account in query){Console.WriteLine(Number: {0}, account.Number);}
  • 12. Desenvolvimento com LINQEntidadesAdicionar ItensEliminar ItensReciclar ItensActualizar ItensLogging
  • 13. EntidadesContent Type Entidade ClasseColuna Atributo MembroBankAccount account = newBankAccount(){Number = 99100048169,Bank = Millennium BCP};
  • 14. Entidades Defini巽達o Manual[ContentType(Name=BankAccount, Id=0x0104)]publicpartialclass BankAccount{[Column(Name=Number, FieldType=Text)]publicstring Number { get; set; } [Column(Name=Bank, FieldType=Text)]publicstring Bank { get; set; }}
  • 15. Entidades Gera巽達o Autom叩ticaSPMetalFerramenta para gerar as entidades para um conjunto de content types / listasOnde est叩?C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BINComo se usa?SPMetal /web:http://createbox/code:BankAccounts.cs/namespace:MyApp.SharePoint.Data
  • 16. 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();
  • 17. 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();
  • 18. 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();
  • 19. 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();
  • 20. 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();
  • 22. Common PitfallsTo Dispose or Not to DisposeAcesso an坦nimoDisplay Names
  • 23. Pitfall To Dispose or Not to Dispose1DataContext data = new DataContext(http://createbox);Dispose? SIMDataContext data = new DataContext(SPContext.Current.Web.Url);Dispose? NOstring webUrl = SPContext.Current.Web.Site.RootWeb.Url;DataContext data = new DataContext(webUrl);Dispose? SIM23
  • 24. Pitfall To Dispose or Not to Dispose1using (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)){ (...)}23
  • 25. Pitfall Acesso An坦nimoLINQ to SharePoint n達o suporta acesso an坦nimoH叩 um workaround mas tem desvantagens:Grande impacto no desempenhoUtiliza RunWithElevatedPrivilegesSolu巽達o: regressar ao CAML...
  • 27. Pitfall Display NamesSPMetal utiliza o Display Name das colunas para gerar os membros das classesO que acontece quando os nomes das colunas t棚m caracteres especiais? POIS...E como 辿 que isso se resolve?...
  • 29. Performance Object Tracking EnabledLINQ vs CAML
  • 30. Performance Object Tracking Enabled Permite optimizar o desempenho em acessos read-only...DataContext data = new DataContext(SPContext.Current.Web.Url);data.ObjectTrackingEnabled = false;
  • 31. Performance LINQ vs CAMLA tradu巽達o LINQ para CAML 辿 feita em tempo realExiste uma penaliza巽達o no desempenhoA query gerada pode ser ineficienteNem todas opera巽探es definidas em LINQ s達o suportadas em CAML...
  • 33. Cen叩rios de UsoMuito simples de usar mas n達o 辿 a solu巽達o quando...C坦digo tem que correr no clienteA solu巽達o tem que suportar acesso an坦nimoO desempenho 辿 cr鱈ticoExistem colunas lookup que se referem a listas noutros sites da mesma site collection
  • 34. Refer棚nciasMSDN: Using LINQ to SharePointhttp://msdn.microsoft.com/en-us/library/ee535491.aspxV鱈deos no Channel 9http://channel9.msdn.com/Learn/Courses/SharePoint2010Developer/LINQtoSharePointUnit
  • 35. 10捉 Reuni達o PresencialComunidade Portuguesa de SharePoint16/04/2011