Exception ao Gerenciar Conteúdo e Estrutura no Sharepoint 2010

O Cenário

Você tenta abrir o Gerenciador de Conteúdo e Estrutura de um site do Sharepoint e dá de cara com uma exception como essa

Exceptin ao Gerenciar Conteúdo e Estrutura

 

O(s) Problema(s)

Comigo este problema já aconteceu por várias maneiras, mas é muito provável que o problema seja em uma biblioteca corrompida ou lista corrompida/duplicada.

 

A solução

Não existe maneira fácil de descobrir a fonte do problema, começe verificando as bibliotecas, faça o seguinte:

  • No site Sharepoint vá em “Ações Do Site” > “Configurações do Site”
  • Na sessão “Administração do Site” clique em “Bibliotecas e listas do site”.
  • Abra cada uma das bibliotecas e listas que aparecem (abrir em nova janela pode facilitar o trabalho)
  • A Biblioteca ou lista que estiver corrompida vai dar exception, delete-a.

Para deletar a lista ou biblioteca você pode usar o Sharepoint designer ou então o PowerShell (stsadm.exe -o forcedeletelist -url <UrlDaLista>)

Se não resolver, lamento. Eu investigaria os Content Types, Templates do Sharepoint etc.

Como debugar erros em Page Layouts do Sharepoint 2010

O cenário

Toda vez que o ocorre uma exception em uma aplicação Sharepoint, vemos uma tela bonitinha, mas que não diz nada de útil, como essa:

SharepointError

O que nós queremos é ver a yellow screen of death, e já sabemos como fazer isso, mas vamos revisar.

Abra o web.config da sua aplicação que geralmente estará em  c:\inetpub\wwwroot\wss\virtualdirectories\<Nome e Porta da Sua Aplicação>

Procure o código

e troque para

 

Procure o código

e troque para

 

Procure o código

e troque para

Pronto, agora você já vê a exception, call stack, e os detalhes do erro.

O Problema

Você vai perceber que se o erro for em uma Page Layout você ainda continuará a ver a tela bonitinha que não diz nada, ou a Yellow Screen of Death sem informações relevantes, como essa:

Sharepoint Custom Erro

Isso ocorre porque os Page Layouts ficam no diretório _Layouts que tem seu próprio web.config

A solução

Abra o web.config que esta em C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\Web.config

Procure o código

 

e troque para

 

Agora você deverá ver aquela tela de erro feia, mas que tem alguma informação útil

sharepoint exception handling02

 

eBooks Gratuitos (e bons).

Essa semana o Thiago, um colega aqui do trabalho compartilhou um link contendo vários ebooks, todos gratuitos e de qualidade, compartilho aqui com vocês.

http://blogs.msdn.com/b/mssmallbiz/archive/2013/06/18/huge-collection-of-free-microsoft-ebooks-for-you-including-office-office-365-sharepoint-sql-server-system-center-visual-studio-web-development-windows-windows-azure-and-windows-server.aspx

Note que neste link o autor faz referência à outros posts de autoria dele com ainda mais eBooks.

Error occurred in deployment step Activate Features: Key cannot be null.

O Cenário

Você iniciou o projeto, criou um Content Type fez depoy e deu de cara com este erro.

Error occurred in deployment step Activate Features: Key cannot be null.

Você começa a procurar qual é a Key que vc deixou Null,  e se você não der uma googlada vai ficar o resto da vida procurando.

O Problema

Sei lá o porque, o Visual Studio 2010 cria o XML do Content Type com um fechamento inválido de FieldRef, algo mais ou menos assim:

<FieldRef ID="" Name="lastName" DisplayName="lastName"></FieldRef>

A Solução

Altere o fechamento do FielRef para um simples />  deverá ficar assim:

<FieldRef ID="" Name="lastName" DisplayName="lastName" />;

É básico, mas eu perdi algumas horas procurando a solução.

Debug em tempo real com inteligência artificial integrada.

Já viram essa nova funcionalidade do Visual Studio?

Debug em tempo real com inteligência artificial integrada.

Veja abaixo um print da funcionalidade.

 

Erro Debug

Loko né véi.

 

Chamando funções Javascript a partir do code-behind no Sharepoint 2010

O cenário

Provavelmente, algum dia, você vai querer chamar funções javascript a partir do código de servidor. Os métodos ScriptManager.RegisterStartupScript()  e ScriptManager.RegisterClientScriptBlock()  ofereçem uma maneira fácil de fazer isso e este é o caminho que você deve seguir.

O Problema

Você escreve o código e nada acontece. A função javascript não é chamada.

A Solução

Chamar o método  ScriptManager.RegisterStartupScript()  de forma correta.

Se você esta usando Update Panels

O primeiro parâmetro do método pede um objeto do tipo Control e a documentação do método é bem específica.

RegisterStartupScript Documentation

Desculpa ai o tamanho da imagem, clique pra vê-la maior

A documentação diz que o Control que vc deve passar como parâmetro é “o controle que esta registrando o script“, e neste caso, quem esta registrando o script não é o link ou botão que vc clicou e sim o update panel que envolve o controle que causou o postback. É por isso que o código da imagem acima funciona perfeitamente.

Se você NÃO estiver usando Update Panels

Precisa explicar? O mesmo método tem uma sobrecarga que pede como primeiro parâmetro uma Page, ou seja, quem vai registrar o script não é mais o Update Panel e sim a própria página.

RegisterStartupScript Documentation 2

Desculpa de novo, clica ai que abre em nova janela.

Ok, este assunto é o básico do básico, mas a gente ainda tropeça nestes detalhes. Faz parte.