Wednesday, September 24, 2014

Problemas de permissão com Listas de Pesquisas do SharePoint

Trabalhando com uma lista do tipo Pesquisa nativa do SharePoint, um recurso excelente que nos poupa várias horas para implementar formulários de enquetes e afins, me deparei com o seguinte problema para usuários com nível de colaboração após terminarem de responder:

   

O usuário, teoricamente, possuía as permissões necessárias para respondê-la e tudo estava de acordo como esperado. Porém, me atentei as configurações avançadas da pesquisa e constatei que havia configurado para que nenhum usuário pudesse editar nada. Alterei para que eles pudessem responder e editar suas respostas e tudo funcionou perfeitamente.

   

Acredito que o problema se dava porque ao criarmos uma resposta, nós também editamos a pergunta acrescentado mais 1 ao números de respostas dela, o que seria bloqueado pela configuração "Não podem editar nada". Ou também, o conceito de editar para o SharePoint signifique editar item existente e criar um novo item.

Desta forma me dei por satisfeito pois não era uma premissa que os usuários não pudessem editar suas respostas, ficando a critério do desenvolvedor suprir isso via Event Receiver.

Tuesday, September 23, 2014

Powershell - Obter log do SharePoint pelo ID da Correção

Hoje gostaria de compartilhar uma dica muito boa para encontrarmos erros no SharePoint dos quais ele nos disponibiliza informações superficiais e um Correlation Id (Id da Correlação).

Com o auxílio do Powershell podemos filtrar as mensagens corretamente e por fim exportarmos para um arquivo de texto para os mais diversos fins.

Exemplo do log exportado para o arquivo informado por parâmetro.

Referências:
Zimmergren

Monday, August 11, 2014

Obtendo objetos SPUser no SharePoint programaticamente

Em diversos momentos você precisará lidar com dados de usuários ou grupos, seja para trabalhar com campos do tipo SPFieldUser ou até mesmo apresentar o nome do usuário logado. Desta forma o SharePoint oferece algumas formas para estes objetos serem retornados, das quais abordarei abaixo com as que considero terem tido as melhores práticas aplicadas.

Dividirei eles em SSOM e JSOM, respectivamente, Server-Side Object Model e JavaScript Object Model.

SSOM:

JSOM:

E é isso pessoal. Estive um tempo fora, ocupado com projetos pessoais, mas procurarei manter o blog ativo sempre que possível.
Um abraço!

Referências:
Samarendra Swain - SharePoint
MSDN Library

Wednesday, May 28, 2014

Powershell - Mudando Page Layout de Página

Em dado momento de sua vida no SharePoint você poderá se deparar com uma página de publicação aparentemente instável, devido ao seu Page Layout ter sido anexado e desanexado diversas vezes pelo SharePoint Designer, o que pode gerar alguns problemas indesejáveis.

Sem mais delongas, recomendo utilizar nossa fronteira final para customizar o SharePoint, o Powershell:

Espero que com este comando algumas horas de estresse e improdutivas sejam poupadas e você possa prosseguir com suas tarefas.

Referências:
The Accidental Developer

Wednesday, May 14, 2014

Potencializando consultas com SPQuery

Diversas vezes experienciei clientes reclamando do desempenho de seus sites em SharePoint. Criando uma imagem ruim desta excelente ferramenta. Diziam eles que as páginas demoravam muito a carregar, que as paginações de suas listagens de dados não eram boas, enfim... toda aquela insatisfação básica.

Quando eu investigava os recursos atrelados a uma página lenta, quase sempre haviam WebParts customizadas que eram responsáveis pelo mal desempenho. Na maioria dos casos eram retornados campos da listas desnecessários ou até mesmo todos os itens para serem então filtrados via LINQ e etc.

Exemplo de busca de itens que lê todos os dados com todos os itens:

Mas como todos sabem, podemos fazer uso do objeto SPQuery que nos permite desenvolver filtros em CAML e definir outros parâmetros para a consulta nos quais irei listar aqui e que provavelmente irão lhe ajudar:

RowLimit: define um limite de itens a serem retornados de uma consulta a uma lista.

ViewFields: define quais campos serão retornados em uma consulta. Mesmo que você tenha uma lista no qual possui 30 campos, você pode definir quais você deseja ler como no exemplo abaixo que irá retornar apenas o ID, o Título e a Data de Criação dos itens.

ListItemCollectionPosition: permite que você retorne itens a partir do ID de um item específico na lista. Ideal para paginações, pois você pode definir a partir de qual item o SharePoint deve retornar e quantos itens apresentar pelo RowLimit abordado anteriormente.


Obrigado pela atenção.

Referências:
Best Practices: Common Coding Issues When Using the SharePoint Object Model
SPQuery Members

Wednesday, April 30, 2014

Access Denied ao ativar Features com Timer Jobs

Muitas vezes desenvolvi Timer Jobs para meus clientes que seriam instalados quando uma Feature fosse ativada. Ao ativá-la pelo Shell de Gerenciamento do SharePoint ou pelo navegador de dentro do próprio servidor, tudo funcionava perfeitamente.

Mas quando eu tentava ativá-la de uma máquina remota, direto pelo navegador de uma máquina pessoal minha, a mensagem de Acesso Negado era apresentada.

Isso acontece devido a um novo recurso de segurança do SharePoint 2010 que bloqueia qualquer atualização de um SPPersistedObject a partir de requisições remotas, e como se trata de um recurso configurável, podemos muito bem desativá-lo com o seguinte comando utilizado no PowerShell do Windows Server ou no Shell de Gerenciamento do SharePoint:



Obs.: Há algumas recomendações quanto a questões de segurança ao alterar esta configuração, mas acredito que você não enfrentará problemas. Caso você gerencie um ambiente que possua um alto esquema de segurança, evite realizá-lo no ambiente produtivo.

Obs2.: Obviamente, utilize um usuário com permissões completas de uma Conta de Sistema.

Thursday, January 2, 2014

Client Object Model - Operações com listas

Programadores já ambientados com o acesso à dados do SharePoint por meio objetos Server-side sabem como é fácil procurar, incluir, atualizar e excluir itens de listas.

Porém muitas vezes desejamos acessar dados do SharePoint remotamente, seja por um SharePoint App, por uma Console Application ou por um Azure Worker Role. Para isto, devemos mudar um pouco as notações de programação para utilizarmos essa funcionalidade.

O princípio básico é a utilização do Namespace Microsoft.SharePoint.Client, e caso você deseje, adicione também um apelido para este Namespace, a fim de diferenciarmos melhor os objetos SharePoint.
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
As DLLs que fornecem estas funcionalidades são as:
Microsoft.SharePoint.Client.dll
Microsoft.SharePoint.Client.Runtime.dll
Para encontrá-las, acesse os diretórios abaixo:

SharePoint 2010: 14 Hive -> Pasta: ISAPI

SharePoint 2013: 15 Hive -> Pasta: ISAPI

Após adicionarmos a referência destas DLLs ao nosso projeto, podemos iniciar o desenvolvimento.

Logo você perceberá que basicamente o acesso as listas tem como base o objeto ClientContext, no qual gerencia as chamadas ao Site e os dados que devem ser carregados.

Para nossos exemplos, utilizaremos a variável siteUrl, no qual constará uma String com a URL do Site Collection acessado e a variável listTitle, no qual o nome da lista estará.
string siteUrl = "http://sitesharepoint";
string listTitle = "SharePointList";
Enfim, vamos aos exemplos?

Lendo itens de listas:


Lendo itens de listas com filtro e carregando campos específicos:



Criando itens em listas:


Atualizando itens em listas:


Deletando itens em listas:


Acredito que estes sejam os exemplos básicos. Futuramente pretendo postar o mesmos exemplos de códigos, porém conectando-se com SharePoint Online que possui uma pequena peculiaridade.

Até a próxima.