Desenvolvimento - Sharepoint - Dev

LINQ to SharePoint no SharePoint 2010

Uma das grandes novidades do SharePoint 2010 para os desenvolvedores foi sem dúvida o LINQ to SharePoint.

por Wagner Amorim



Overview

Uma das grandes novidades do SharePoint 2010 para os desenvolvedores foi sem dúvida o LINQ to SharePoint.

Nesse artigo vamos explorar essa novidade que permite aos desenvolvedores construir querys utilizando o LINQ (Language Integrated Query) em nossas aplicações SharePoint 2010. Esse novo recurso sem dúvida representa um grande ganho de produtividade aos times de desenvolvimento, ao utilizar sintaxe LINQ, que é parecida com a sintaxe SQL, os desenvolvedores criarão querys poderosas com suporte a objetos fortemente tipados (strongly typed objects), reduzindo os erros e aumentando a qualidade de desenvolvimento nos seus projetos SharePoint.

O LINQ é uma das novidades do .NET Framework 3.5 e do Visual Studio 2008, foi criado basicamente para ser o canal entre as camadas de dados e objetos nos projetos desenvolvidos com o Framework .NET, com suporte total ao IntelliSense e ao compilador do Visual Studio. Você pode escrever consultas LINQ no Visual Basic ou C# acessando banco de dados SQL, documentos XML, ADO.NET datasets e qualquer coleção de objetos que ofereça suporte IEnumerable ou a interface genérica IEnumerable<(Of <(T>)>).

O foco desse artigo não é explorar o LINQ e sim o LINQ to SharePoint, no entanto considero estritamente recomendável aos leitores que não possuem familiaridade com o LINQ que se aprofundem no assunto, abaixo disponibilizo alguns links de referência sobre o assunto.

O namespace Microsoft.SharePoint.Linq é a base utilizada pelo Provider do LINQ to SharePoint, ele é o responsável por traduzir consultas LINQ para as conhecidas consultas CAML (Collaborative Application Markup Language). Não é mais necessário para os desenvolvedores saberem escrever consultas CAML, as consultas LINQ são processadas no servidor, mas podemos utilizar o REST (Representational State Transfer) no SharePoint 2010 para consultas no lado cliente, para isso leia mais sobre o suporte do SharePoint para ADO.NET Data Services.

Não posso me estender no Overview desse artigo, mesmo assim abaixo listo alguns links para referência e estudo posterior:


Language-Integrated Query (LINQ)
http://msdn.microsoft.com/pt-br/library/bb397926(VS.90).aspx

Introdução ao LINQ
http://msdn.microsoft.com/pt-br/library/bb397897(VS.90).aspx

Using LINQ to SharePoint (SDK)
http://msdn.microsoft.com/en-us/library/ee535491(office.14).aspx

SharePoint 2010 Developer Training Kit

http://www.microsoft.com/downloads/details.aspx?FamilyID=83a80a0f-0906-4d7d-98e1-3dd6f58ff059&displaylang=en

SharePoint 2010 Advanced Developer Training
http://blogs.msdn.com/randalli/archive/2010/05/13/sharepoint-2010-advanced-developer-training-now-live-on-msdn.aspx

http://msdn.microsoft.com/en-us/sharepoint/ee514561.aspx

Get Started Developing on SharePoint 2010

http://msdn.microsoft.com/en-us/sharepoint/ee513147.aspx

http://www.canalsharepoint.com.br/tutoriais/Tutoriais/Instalando%20o%20SharePoint%202010%20no%20Windows%207.aspx

Solução

Para essa solução vou trabalhar com as seguintes tecnologias:

- SharePoint Foundation 2010 RTM
- Microsoft® SQL Server® 2008
- Windows 7 x64
- Visual Studio 2010 Ultimate

NOTA: Eu utilizei uma instalação do SharePoint Foundation 2010, mas o artigo também se aplica ao SharePoint Server 2010.

Como boas práticas de desenvolvimento, vou trabalhar com meus exemplos utilizando o Windows 7 como sistema operacional. Para maiores informações de instalação e configuração do SharePoint 2010 no Windows 7, veja o artigo citado acima:

A Microsoft criou uma ferramenta chamada SPMetal, que tem como objetivo criar as entidades utilizadas pelo LINQ de forma amigável e produtiva. O SPMetal gera automaticamente classes ou entidades com todos os metadados das listas e bibliotecas existentes no site determinado que serão utilizadas pelas consultas do LINQ.

DICA: Uma alternativa ao SPMetal é o LINQ to SharePoint DSL, uma extension do Visual Studio 2010 que permite aos desenvolvedores e principalmente aos Arquitetos de Desenvolvimento utilizar um novo item no Visual Studio chamado “SharePoint Data Model” para gerar de forma visual as entidades de um site determinado ou mesmo de templates de site padrão, veja mais em: http://code.msdn.microsoft.com/linq2spdsl/ .

Para iniciar nossos exemplos, vamos criar uma lista em nosso site do SharePoint 2010 para armazenar um cadastro de clientes, nesse caso crie uma lista chamada “Clientes” com os campos “Nome” e “Telefone”, ambos do tipo texto.

NOTA: Para maiores informações sobre Listas e Campos no SharePoint, confiram os artigos relacionados no CanalSharePoint na seção Artigos, http://www.canalsharepoint.com.br/tutoriais/default.aspx.

1. Criando uma Solução com o LINQ to SharePoint.

A ferramenta SPMetal fica armazenada na pasta de instalação do SharePoint 2010, “%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\BIN”.

1.1. Abra o Prompt de Comando (start/cmd) e navegue até a pasta %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\BIN.

1.2. Execute o seguinte comando SPMetal no prompt de comando.

SPMetal.exe /web:http://wagnera/sites/sp2010 /namespace:SharePoint2010.DEV.LINQ
/code:C:\Entities.cs /language:csharp

CanalSharePoint

NOTA: Veja uma referência completa da ferramenta SPMetal e das suas respectivas opções em http://msdn.microsoft.com/en-us/library/ee538255(office.14).aspx .

1.3. Crie um Projeto no Visual Studio 2010 do tipo Visual WebPart, abra o Visual Studio 2010 e clique em “File/New/Project”.


CanalSharePoint

http://www.canalsharepoint.com.br/tutoriais/Tutoriais/SharePoint 2010 - Visual WebParts.aspx

1.4. Na janela “New Project”, clique em “Visual C#/SharePoint/2010/Empty SharePoint Project”, renomei o projeto para “SharePoint2010.DEV.LINQ” e clique em OK.

CanalSharePoint

1.5. Em seguida o Visual Studio abre a janela “SharePoint Customization Wizard”, onde podemos definir para qual site será feito o Debug e Deploy, além de definirmos os níveis de segurança da solução.

Defina o site e o nível de segurança da aplicação como “Deploy as a farm solution” e clique em “Finish”.

CanalSharePoint

1.6. Adicionando o arquivo “Entities.cs” na nova solução.

a. Na janela “Solution Explorer”, clique com o botão direito no projeto, depois em “Add/Existing Item”.

CanalSharePoint

b. Navegue até a pasta “C:\” e selecione o arquivo “Entities.cs” gerado pelo SPMetal.

c. Clique em Add.

CanalSharePoint

1.7. Adicione referência para a assembly “Microsoft.SharePoint.Linq”, clique com o botão direito em “References/Add Reference” e selecione o componente “Microsoft.SharePoint.Linq” na guia “.NET”.

CanalSharePoint

1.8. Importe para essa classe os seguintes namespaces:

using Microsoft.SharePoint.Linq;

using System.Linq;

1.9. Adicionando uma Visual WebPart na solução.

a. Na janela “Solution Explorer”, clique com o botão direito no projeto, depois em “Add/New Item”.

b. Na janela “Add New Item”, selecione o item template “Visual Web Part”.

c. No campo name digite “VisualWP

d. Clique em “Add”.

CanalSharePoint

NOTA: Note na Janela “Solution Explorer” (Ctrl+W,S) que o SharePoint adicionou três arquivos (VisualWP.cs, VisualWP.webpart e Elements.xml) relacionados com a WebPart e mais três arquivos relacionados com o UserControl (VisualWPUserControl.ascx, VisualWPUserControl.ascx.cs e VisualWPUserControl.ascx.designer.cs).

CanalSharePoint

Além da WebPart com o User Control, foi adicionado também uma feature (Feature1) em uma nova pasta chamada Features, essa pasta faz parte de um novo pacote de recursos disponíveis no Visual Studio 2010 para melhorar o desenvolvimento e deploy do SharePoint 2010 no Visual Studio. Bem legal!

Vamos rapidamente explorar esse novo item Feature1 adicionado ao projeto entender de forma simples seu funcionamento.

1.10. Alterando informações da Feature.

a. Clique com botão direito na Feature1 e a renomeie para “CanalSharePoint 2010”.

b. Dê um duplo clique no item “CanalSharePoint 2010”.

c. No campo “Title”, digite “CanalSharePoint – LINQ to SharePoint”.

d. No campo “Description”, digite “Feature criada para ativar a Visual WebPart da Demo”.

CanalSharePoint

1.11. Alterando o título, a descrição e o Grupo da WebPart.

a. Clique 2 vezes no arquivo VisualWP.webpart e altere as seguintes linhas:

<property name="Title" type="string">VisualWP</property>

<property name="Description" type="string"> My Visual WebPart </property>

Para:

property>

CanalSharePoint – LINQ to SharePoint no SharePoint 2010</property>

b. Salve e feche o arquivo “VisualWP.webpart”.

c. Dê um duplo clique no arquivo Elements.xml“ e altere a seguinte linha:

<Property Name="Group" Value="Custom" />

Para:

Property Name="Group" Value="CanalSharePoint" />

d. Salve e feche o arquivo Elements.xml.

1.12. Abra o UserControlVisualWPUserControl.ascx”.

1.13. Certifique-se de que o modo de exibição do UserControl está como “Design”.

CanalSharePoint

Para simular um exemplo mais prático, vamos criar uma WebPart que apenas exibe os dados da lista Clientes, criada no início do artigo.

1.14. Altere o mode de exibição para do UserControl para Source.

CanalSharePoint

1.15. Insira o código abaixo logo após a última linha de código.

<%@ Import Namespace="Microsoft.SharePoint.WebControls" %>

SharePoint:SPGridView id="gridClientes" runat="server" AutoGenerateColumns="false">

Columns>

SharePoint:SPGridView>

1.16. Abra o arquivo que contém o CodeBehind do UserControlVisualWPUserControl.ascx.cs”.

1.17. Adicione os seguintes namespaces:

Page_Load.

EventArgs e)

SPSite sitec = new SPSite(SPContext.Current.Web.Url))

//Query Expressions

1.19. Salve o UserControl.

1.20. Realizando o Deploy

Nesse ponto o desenvolvimento da aplicação está concluído e podemos iniciar o deploy, antes disso, compile a aplicação (Ctrl+Shift+B) e resolva qualquer erro ou conflito que possa ocorrer.

a. Execute o Deploy via Visual Studio (Build/Deploy Solution).

NOTA: Repare que o Visual Studio executa os seguintes passos de forma automática:

1. Compila a aplicação.

2. Recycle no App Pool da aplicação.

3. Retract da Solution, caso exista no farm.

4. Adiciona Solution.

5. Deploy Solution.

6. Ativa Features.

b. Verificando se a Solution e as Features foram instaladas corretamente.

i. Acesse a “Central Administration” do SharePoint 2010.

ii. Clique no item “System Settings” do menu vertical da esquerda.

iii. Na seção “Farm Management”, clique em “Manage farm solutions”.

iv. Na página de “Solution Management” deve aparecer sua solution, como mostra a imagem abaixo:

CanalSharePoint

v. No caso das features, feche a Central Administration e abra o site que escolheu fazer o deploy no passo 1.3.

vi. Com o site aberto, clique no item de menu “Site Actions”, depois em “Site Settings”.

CanalSharePoint

vii. Na página “Site Settings”, na seção “Site Collection Administration” clique no item “Site collection features”.

viii. Nessa página deve aparecer a feature que criamos acima, conforme imagem abaixo.

CanalSharePoint

1.21. Adicionando a Visual WebPart para o site.

a. Volte para a home do site.

b. Utilizando as Ribbons, clique no item “Page”, depois em “Edit” da página principal do site.

CanalSharePoint

c. Ainda nas Guias do Ribbons, clique em “Insert”, depois em “WebPart” Com a página aberta em modo de edição, clique em “Add WebPart”.

d. Note que a Ribbons vai adicionar uma nova caixa com as propriedades da WebPart.

CanalSharePoint

NOTA: Veja que a WebPart que adicionamos já veio com as propriedades que configuramos no passo 1.6.

e. Clique em “Add”.

f. No menu superior do Ribbons, clique no botão Save & Close CanalSharePoint.

1.22. Finalizando e Testando

a. Para finalizar e testar sua WebPart com o LINQ to SharePoint, basta inserir registros na lista Clientes.


Exibição de WebPart sem registros na lista Clientes.


Exibição de WebPart com registros na lista Clientes.

Conclusão

Nesse artigo conseguimos explorar a nova funcionalidade do SharePoint, LINQ to SharePoint de uma forma mais simples e prática.

Wagner Amorim

Wagner Amorim - Consultor com 7 anos de experiência no mercado de TI, já atuou em diversos projetos para médias e grandes empresas. Focado em tecnologias Microsoft, têm se especializado nas Tecnologias SharePoint e Microsoft .NET desde 2003. Membro ativo das comunidades Technet e MSDN voltadas para SharePoint e Líder da maior Comunidade de SharePoint no Brasil (Canal SharePoint).
Possui as certificações MCP: .NET Framework 2.0, MCTS: .NET Framework 2.0 Web Applications, Windows SharePoint Services 3.0: AD, Windows SharePoint Services 3.0: Config., Microsoft Office SharePoint Server 2007: Config., Microsoft Office SharePoint Server 2007: AD e MCPD: Web Developer.
Blog:
http://waamorim.spaces.live.com/