O Office 365 permite interagir com o client utilizando um conjunto de classes semelhante do Server Object Model, em qualquer client que suporte .NET, Microsoft Silverlight ou JavaScript.
Neste artigo vou focar no uso da API REST (Representational State Transfer) para acessar e gerenciar dados do SharePoint usando o protocolo para consulta através de uma comunicação HTTP/ XML.
O serviço WCF responsável em fornecer dados utilizando o protocolo REST é acessado através da URL abaixo:
http://siteurl/_vti_bin/ListData.svc
Modificando a URL acima por dados reais é possível ver o XML com todos os conteúdos válidos no site Office365:

Para acessar uma entidade especifica basta seguir o padrão abaixo:
http://siteurl/_vti_bin/ListData.svc/{NomeEntidade}

Para resgatar um item de uma entidade especifica basta informar o ID conforme o exemplo abaixo:
https://siteurl //_vti_bin/ListData.svc/CatugyList(1)
O resultado vem “embrulhado” no XML. É possível retornar somente o valor da entidade concatenando o comando /$value:
https:// siteurl //_vti_bin/ListData.svc/CatugyList(1)/Title/$value

Esse mecanismo é muito útil para consultar dados com a URL. Pode ser consumido por qualquer dispositivo capaz de ter acesso HTTP e ler XML (que hoje praticamente qualquer dispositivo permite esse consumo).
Outros exemplos de URL’s REST:
http://siteurl/_api/web Informações sobre o site corrente;
http:// siteurl /_api/web/lists Acessa a coleção de listas do site corrente;
http:// siteurl /_api/web/lists/GetByTitle(‘Título da lista’) Acessa uma lista específica do site corrente;
http:// siteurl /_api/search Acessa o serviço de search;
Estrutura da URL REST:

OData é um protocolo que permite a criação e consumo de dados utilizando REST.
A lista abaixo apresenta as principais palavras-chave disponíveis como parâmetros de sequência para construção de consultas REST:
- $filter={predicate} Filtra os dados;
- $expand={Entity} Inclui entidades relacionadas;
- $orderby={property} Ordena os resultados;
- $skip=n Pula para os (n) primeiros registros;
- $top=n Recupera os (n) primeiros registros;
Exemplo prático:
Atenção:
O exemplo abaixo está hospedado no Office 365 (SharePoint-hosted app), portanto não é necessário prover o Token (OAuth access token).
Para o cenário proposto devemos criar duas listas:

A relação é de (1 para N), ou seja, um Candidato poderá estar relacionado em várias Vagas, a coluna de lookup é necessária para pesquisa na tabela Candidato.
Vamos criar as duas listas (Candidato e Vagas) com estruturas bem simples:
- Candidato (Nome, CPF, Nascimento)
- Vagas (IDCandidato (Nome, CPF, Nascimento), Descrição, Área);
OBS:
A Coluna IDCandidato deverá ter os campos adicionais (Nome, CPF, Nascimento) conforme a imagem abaixo:

Preenchendo os dados:
- Candidato:

- Vagas:

Criação da query REST:
A consulta deverá retornar todas as Vagas que o Candidato se escreveu, vamos utilizar a coluna [IDCandidato] de lookup para resgatar os dados do Candidato:
https://siteurl/_api/web/lists/GetByTitle('Vagas')/items?$select=IDCandidato/CPF,IDCandidato/Nome,IDCandidato/Nascimento,Title&$expand=IDCandidato&$filter=IDCandidato/CPF eq '999.999.999-99'
O comando $expand faz referência a coluna de lookup IDCandidato, é possível listar as colunas adicionais seguindo o padrão [ColunaLookup/CampoAdicional], no nosso cenário segue o exemplo abaixo:
IDCandidato/CPF| IDCandidato/Nome| IDCandidato/Nascimento
Por padrão, o navegador irá mostrar uma lista de itens sob a forma de um feed porque o XML retornado é construído no formato (Atom Syndication Format).

Chamada AJAX utilizando jQuery:
$(function () {
retrieveListItems();
});
function retrieveListItems() {
var siteUrl = _spPageContextInfo.siteAbsoluteUrl;
var fullUrl = String.format({0}/_api/web/lists/GetByTitle('Vagas')/items?$select=IDCandidato/CPF,IDCandidato/Nome,IDCandidato/Nascimento,Titleamp;amp;$expand=IDCandidatoamp;amp;$filter=IDCandidato/CPF eq '999.999.999-99',siteUrl);
$.ajax({
url: fullUrl,
type: GET,
headers: {
accept: 'application/json;odata=verbose',
content-type: 'application/json;odata=verbose',
},
success: onQuerySucceeded,
error: onQueryFailed
});
}
function onQuerySucceeded(data) {
var listItemInfo = '';
$.each(data.d.results, function (key, value) {
listItemInfo += 'CPF:' + value.IDCandidato.CPF +
'Nome:' + value.IDCandidato.Nome
});
$(#divListItems).html(listItemInfo);
}
function onQueryFailed(sender, args) {
alert('Falha na requisição!');
}
Alguns pontos importantes no código acima:
- Retorna a URL do root site corrente:
_spPageContextInfo.siteAbsoluteUrl;
- É necessário indicar os headers na chamada AJAX, neste caso desejamos JSON como retorno:
headers: {
accept: 'application/json;odata=verbose',
content-type: 'application/json;odata=verbose',
}
A coleção de resultados ficará na lista “data.d.results”, a partir dela é possível percorrer os itens utilizando jQuery:
$.each(data.d.results, function (key, value) {
listItemInfo += 'CPF:' + value.IDCandidato.CPF +
'Nome:' + value.IDCandidato.Nome
});
Com o resultado em mãos é possível transformar a apresentação dos dados conforme a necessidade do projeto.
Resultado final:

Até o próximo artigo!











































