Table of Contents IntroduçãoGeração do arquivo de código-fonte - SPMetalUtilização da Classe GeradaConsiderações FinaisReferências
Os desenvolvedores sempre tiveram uma dificuldade na hora de desenvolver seus aplicativos: trabalhar com dados fracamente tipados. Desde a utilização de RecordSets, lá no VB6, até recursos mais novos como o ADO.NET, obter dados do banco de dados ou outra fontes de conteúdo sempre indexou-se os objetos pelo nome da coluna, assim como no exemplo: tabelaClientes[“Nome”] para obter o nome do cliente do banco de dados. Se o campo “Nome” mudar na tabela o programa irá compilar normalmente, mas irá gerar um erro em tempo de execução, ou seja, muito difícil de ser percebido pelos desenvolvedores.
Esse assunto vem evoluindo cada vez mais, uma das primeiras iniciativas foi o Hibernate, que fazia o mapeamento de entidade relacional em modelo de objetos. Esse tipo de recurso foi muito aguardado e com o passar do tempo foi evoluindo. Existiram várias iniciativas até o surgimento do LINQ, que é um sistema de consulta em conjuntos de dados que é fortemente tipado.
Um sistema fortemente tipado consiste na utilização dos objetos via programação onde não se usa string ou inteiro para indexar a coluna, mas sim o próprio nome. Exemplo: cliente.Nome. Se algum campo for mudado o sistema não irá mais compilar, orientando o desenvolvedor sobre o que ele precisa mudar. Essa alteração no paradigma de progração aumenta em muito mais produtividade e menor incidência de erro.
O LINQ é um mecanismo que possui várias extensões, entre elas LINQ to Objects, LINQ to Entities (que agora virou o Entity Framework), LINQ to XML, LINQ to SQL e agora o LINQ to SharePoint.
O LINQ to SharePoint é a especialização do LINQ para ser utilizado no SharePoint, com ele podemos trabalhar com conteúdo SharePoint usando rotinas fortemente tipadas. Neste artigo vamos explicar como utilizar essa solução.
Para utilizarmos o LINQ to SharePoint é necessário executar um utilitário de linha de comando chamado SPMetal.exe, que está no diretório BIN do SharePoint (c:\program files\common files\microsoft share\web server extensions\14\bin). Ao digitar SPMetal no prompt de comando do Windows um breve resumo da sintaxe e parâmetros é apresentado, conforme imagem 01.
Imagem 01: Execução do SPMetal.exe sem parâmetros para mostrar mais detalhes
A sintaxe do comando para a geração da classe para utilizar nestes artigo é a descrita na listagem 01.
SPMetal /web:http://evento.azeroth.com /namespace: LINQToSharePoint /code:Entidades.cs
Listagem 01: Comando para a geração da classe para ser utilizada pelo LINQ
Esta linha de comando irá fazer com que o SPMetal leia toda a estrutura de conteúdo do site evento.azeroth.com e transformará essas estruturas em uma classe, devidamente configuradas para utilização do LINQ, com namespace LINQToSharePoint, armazenado em um arquivo chamado Entidades.cs. Conforme o exemplo, o arquivo cs (sintaxe C#) pode ser localizado no diretório BIN.
Para utilizar a classe gerada pelo SPMetal.exe vamos criar um projeto SharePoint no Visual Studio e depois criar uma web part para conter as regras de négócio, que utilizam LINQ to SharePoint.
O primeiro passo é a crição de um novo projeto no Visual Studio 2010 com base no template Empty SharePoint Project para , conforme a imagem 02, com o nome LINQToSharePoint.
Imagem 02: Criação de um projeto novo no Visual Studio
Após o projeto criado vamos adicionar o arquivo Entidades.cs gerado. As imagem 03 e 04 motram os passos para fazer isso.
Imagem 03: Adicionando o arquivo Entidades.cs ao projeto
O próximo passo é adicionar a referência do assembly Microsoft.SharePoint.Linq.dll, que está no diretório c:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.SharePoint.Linq.dll.
Para construir as regras de negócio e a interface com o usuário vamos criar uma visual web part chamada PalestrantesNovosWebPart, conforme a imagem 05.
Imagem 05: Criando a visual web part
Neste exemplo vamos fazer uma demonstração de uma web part que exibe somente os palestrantes ativos.
A listagem 02 mostra em detalhes toda a implementação da web part de palestrantes ativos.
using System; using System.ComponentModel; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; using Microsoft.SharePoint.Linq; using System.Linq; using System.Text; namespace LINQ_to_SharePoint { [ToolboxItemAttribute(false)] public class PalestrantesAtivosWebPart : WebPart { LiteralControl controle; protected override void CreateChildControls() { controle = new LiteralControl(); this.Controls.Add(controle); } protected override void OnPreRender(EventArgs e) { // Criando o contexto para uso do LINQ EntidadesDataContext entidades = new EntidadesDataContext (SPContext.Current.Site.Url); // Executando a query LINQ no modelo de dados do SharePoint var palestrantesAtivo = from p in entidades.Palestrantes where p.Ativo == true select p.Título; StringBuilder listaPalestrantes = new StringBuilder(); string textoPalestrantes = "O palestrante {0} está ativo"; // Percorrendo os resutrados da query e gerando o conteúdo para o usuário foreach (var palestrante in palestrantesAtivo) { listaPalestrantes.Append(string.Format(textoPalestrantes, palestrante)); listaPalestrantes.Append("<BR />"); } controle.Text = listaPalestrantes.ToString(); } } }
using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Linq;
using System.Linq;
using System.Text;
namespace LINQ_to_SharePoint
{
[ToolboxItemAttribute(false)]
public class PalestrantesAtivosWebPart : WebPart
LiteralControl controle;
protected override void CreateChildControls()
controle = new LiteralControl();
this.Controls.Add(controle);
}
protected override void OnPreRender(EventArgs e)
// Criando o contexto para uso do LINQ
EntidadesDataContext entidades = new EntidadesDataContext (SPContext.Current.Site.Url);
// Executando a query LINQ no modelo de dados do SharePoint
var palestrantesAtivo = from p in entidades.Palestrantes
where p.Ativo == true
select p.Título;
StringBuilder listaPalestrantes = new StringBuilder();
string textoPalestrantes = "O palestrante {0} está ativo";
// Percorrendo os resutrados da query e gerando o conteúdo para o usuário
foreach (var palestrante in palestrantesAtivo)
listaPalestrantes.Append(string.Format(textoPalestrantes, palestrante));
listaPalestrantes.Append("<BR />");
controle.Text = listaPalestrantes.ToString();
Listagem 02: Código fonte da web part de palestrantes ativos
Com a web part pronta e implantada no SharePoint, o próximo passo é adicioná-la na página. Para isso coloque a página em edição e insira a web part. Procure na categoria “Custom” e insira a web part PalestrantesAtivosWebPart, a imagem 06 dá mais detalhes e a imagem 07 mostra o resultado final.
Imagem 06: Adicionando a web part PalestrantesAtivosWebPart na página
Imagem 07: Visualizando o resultado da web part na página
Para conferir o resultado vamos acessar a lista Palestrantes e ver os dados existentes, como na imagem 08.
Imagem 08: Conferindo os dados na lista de Palestrantes para verificar que a consulta exibiu os dados corretamente
O LINQ e o LINQ to SharePoint vieram para ajudar os desenvolvedores a criar soluções com menos erros e maior facilidade de explorar as classes de dados. Uma maior qualidade de desenvolvimento é obtida, visto que vários erros podem ser descobertos em tempo de compilação. Como resultado temos maior produtividade e código mais legível.
Parabéns pelo artigo Fabian,
adicionei o link no Guia de Sobrevivência do Sharepoint
Att