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

Friday, May 2, 2014

Powershell - Recuperando Colunas Lookup corrompidas

Algumas vezes precisamos transferir dados de listas de um ambiente de Produção para outro de Homologação ou Desenvolvimento, a fim de reproduzirmos algum bug. Esse processo é bastante simples, devido ao recurso de salvar como Template uma lista e importá-lo em outro ambiente.

Porém, os tipos de coluna Lookup são relativamente "sensíveis". Perceba que no momento que você restaurar o Template de lista, muitas vezes a lista que serve de Lookup para a atual difere no seu ID, causando diversos problemas como:

A opção Obter informações de fica vazia e o nome da coluna é apresentado em um Literal, não mais em um DropDownList.


A visualização da lista apresentará a seguinte mensagem:


A fim de sanarmos este problema rapidamente, você pode então utilizar o script abaixo para reatualizá-la e recuperar a visualização e a apresentação dos dados.



Espero salvar algumas horas do dia de vocês com isto.

Referências:
I Like SharePoint

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.