Trabalhando com Dados do SharePoint Online com o .NET Client Object Model

O SharePoint 2010 trouxe várias formas de acessar seus dados remotamente, ou seja, a partir de programas que não estão executando no mesmo servidor. Esses recursos estão disponíveis na verão local (OnPremise) e no Office 365 (SharePoint Online).

Neste post vou mostrar como trabalhar com esses dados do SharePoint Online, para isso vou utilizar uma lista de tarefas padrão do SharePoint e a API para acesso remoto através do .NET.

Para fazer a COM (Client Object Model) acessar o SharePoint Online temos um desafio bem grande: a autenticação. Se utilizar a mesma rotina que é utilizada no SharePoint local, não é possível conectar no SharePoint Onlin, dá erro de 403 Forbidden. Todo material que eu achei para resolver isso segue o mesmo padrão, criar uma classe, como por exemplo a implementação disponível na Code Gallery ClaimClientContext, que consiste na chamada da tela de login para o usuário informar as credenciais e depois pegar o cookie gerado para autenticar. Se o usuário salvar a senha não irá solicitar as credenciais novamente.

Com esse problema resolvido, o restante do código é igual para as soluções de SharePoint Online ou SharePoint OnPremise, o código completo deste projeto está no GitHub SharePoint-Demos e contém diversos outros exemplo.

Neste post vou mostrar apenas a implementação da classe RepositorioTarefas, para ver as demais acesse os fontes do projeto.

A listagem 01 mostra a classe repositórios que abstrai a camada de SharePoint, para fazer isso criei uma classe chamada Tarefa e cada interação com o repositório ela é transformada de tarefa para item de lista ou item de lista para tarefa, conforme a necessidade. Esse código está na classe de helper chamada TarefaConverterHelper.

O método ClaimClientContext.GetAuthenticatedContext retorna um objeto do tipo ClientContext, se o objetivo for utilizar o SharePoint OnPremise este método deve ser substituído pela criação do ClientContext padrão.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using ClientObjectModelDemo.Entidades;
using System.Net;
using ClientObjectModelDemo.Helpers;

namespace ClientObjectModelDemo
{
    public class RepositorioTarefas
    {

        private ClientContext Contexto;
        private Web Web;
        private List ListaTarefas;

        public RepositorioTarefas()
        {
            this.Contexto = ClaimClientContext.GetAuthenticatedContext(Constants.ENDRECO_SITE);
            this.Web = Contexto.Web;
            this.ListaTarefas = this.Web.Lists.GetByTitle(“Tarefas”);
        }

Listagem 01: campos e construtor da classe RepositorioTarefas

 

A listagem 02 mostra o método ObterTodos, que retorna todas as tarefas cadastradas na lista do SharePoint, após fazer isso converte os objetos itens de lista em objetos tarefas.

public List<Tarefa> ObterTodos()
{
    CamlQuery camlQuery = new CamlQuery();
    camlQuery.ViewXml = “<View/>”;
    ListItemCollection itens = ListaTarefas.GetItems(camlQuery);

    Contexto.Load(itens);
    Contexto.ExecuteQuery();

    return TarefaConverterHelper.ItensParaTarefas(itens);
}

Listagem 02: Método ObterTodos

 

A listagem 03 mostra a obtenção das tarefas passando como filtro um pedaço do título da tarefa. O filtro é feito utilizando CAML.

public List<Tarefa> ObterPorFiltro(string titulo)
{
    CamlQuery camlQuery = new CamlQuery();
    camlQuery.ViewXml = “<View><Query><Where> ” +
                        “<Contains> ” +
                        “<FieldRef Name=’Title’ /> ” +
                        “<Value Type=’Text’>” + titulo + “</Value> ” +
                        “</Contains> ” +
                        “</Where></Query></View> “;

    ListItemCollection itens = ListaTarefas.GetItems(camlQuery);

    Contexto.Load(itens);
    Contexto.ExecuteQuery();

    return TarefaConverterHelper.ItensParaTarefas(itens);
}

Método 03: Método ObterPorFiltro

 

Para obter apenas um item pelo id foi criado o método ObterPorID, que recebe o id da tarefa e retorna o objeto tarefa.

public Tarefa ObterPorID(int id)
{
    ListItem item = ListaTarefas.GetItemById(id);

    Contexto.Load(item);
    Contexto.ExecuteQuery();

    return TarefaConverterHelper.ItemParaTarefa(item);
}

Método 04: ObterPorID

 

O método Salvar salva a tarefa recebida por parâmetro no SharePoint, se for uma tarefa sem id quer dizer que é uma tarefa nova, sendo assim cria um novo item, atribui os campos e insere o novo registro. Se já tiver id só atualiza os dados e salva.

public Tarefa Salvar(Tarefa tarefa)
{
    ListItem itemTarefa;

    if (tarefa.ID == (default(int)))
    {
        ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
        itemTarefa = ListaTarefas.AddItem(itemCreateInfo);
    }
    else
    {
        itemTarefa = ListaTarefas.GetItemById(tarefa.ID);
        Contexto.Load(itemTarefa);
        Contexto.ExecuteQuery();
    }

    itemTarefa = TarefaConverterHelper.TarefaParaItem(tarefa, itemTarefa);

    itemTarefa.Update();
    Contexto.ExecuteQuery();

    return ObterPorID(itemTarefa.Id);
}

Método 05: Método Salvar

 

O método excluir, conforme a listagem 06, recebe o id da tarefa e exclui no SharePoint.

public void Excluir(int id)
{
    ListItem tarefa = ListaTarefas.GetItemById(id);

    tarefa.DeleteObject();

    Contexto.ExecuteQuery();
}

Método 06: Método Excluir

 

Para testar a solução, sem precisar implementar a camada de apresentação ou o restante das regras de negócio implementei testes unitários, facilitando assim bastante o desenvolvimento.

Anúncios

2 Respostas to “Trabalhando com Dados do SharePoint Online com o .NET Client Object Model”

  1. Trabalhando com Dados do SharePoint Online com o Web Service Lists.ASMX « Fabian André Gehrke Says:

    […] Fabian André Gehrke SharePoint no dia-a-dia InícioOutras PublicaçõesWP7Sobre Twitter Facebook RSS ← Trabalhando com Dados do SharePoint Online com o .NET Client Object Model […]

  2. Entendendo o Modelo de Dados do SharePoint « Fabian André Gehrke Says:

    […] as APIs de cliente do SharePoint em .NET, Silverlight, JavaScript ou a API de […]


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: