SharePoint 4 Developers

Guia de referência adicional em desenvolvimento .NET / SharePoint

Artigo publicado na Revista Codificando .Net e-Magazine

Meu artigo sobre as Novidades em Desenvolvimento no SharePoint 2010 foi publicado.
419BF2880E221BB9_592_0

Oi pessoal, gostaria de informar que nesta edição da Revista Codificando .Net e-Magazine meu artigo sobre as Novidades em Desenvolvimento no SharePoint 2010 foi publicado!

Este artigo é bem importante pois muitas das coisas que já falei sobre Sandboxed Solutions e outras novidades do SharePoint 2010 estão contidas nele, fora que todas as novidades de desenvolvimento foram listadas e comentadas.

Considero essa revista eletrônica muito importante por divulgar gratuitamente um material técnico para a comunidade .Net.

Obrigado ao Codificando .Net e toda equipe editorial da revista pela oportunidade!

Link para a revista: http://www.codificandomagazine.com.br/revista/post/Edicao-15.aspx

[]’s

Marcel Medina

Clique aqui para ler o mesmo conteúdo em Inglês.

Error occurred in deployment step 'Add Solution': Property 'SiteUrl' contains an invalid URL / The default web application could not be determined

Error occurred in deployment step 'Add Solution': Property 'SiteUrl' contains an invalid URL. Error occurred in deployment step 'Add Solution': The default web application could not be determined.

Oi pessoal, tudo bem?

Nesses dias me deparei com um erro no SharePoint 2010 enquanto trabalhava com a criação de projetos do tipo BDC Model. No momento do deploy obtive a seguinte mensagem na versão Beta:

Error occurred in deployment step 'Add Solution': Property 'SiteUrl' contains an invalid URL. Import failed with the following exception message: The site <site> could not be found in the Web application SPWebApplication Name=<webapplication>.
Parameter name: properties

Na versão RTM a mensagem mudou um pouco, o que também é confuso:

Error occurred in deployment step 'Add Solution': The default web application could not be determined. Set the SiteUrl property in feature <feature> to the URL of the desired site and retry activation.
Parameter name: properties

Para solucionar o problema vasculhei na net problemas parecidos e encontrei um artigo muito bom do Jan Tielens que explica como contornar esse problema.

Por não gostar muito de adicionar apenas links a outros sites com soluções, justamente por quebras de links, também vou disponibilizar a solução aqui.

Reproduzindo o erro

1 - Crie uma nova solução com um projeto do tipo Business Data Connectivity Model conforme a Figura 1:

419BF2880E221BB9_587_0[1]
Figura 1 – Solução do tipo BDCModel

2 - Tente realizar o deploy pelo Visual Studio, a mensagem de erro acima aparecerá (dependendo de sua versão).

Corrigindo o problema

1 - Abra o arquivo XML da Feature (Figura 1) e observe que só temos a propriedade:

419BF2880E221BB9_587_1

Figura 2 – Arquivo XML original

2 - Adicione o seguinte elemento ao XML da feature, conforme Figura 2:

Code Snippet
  1. <Property Key="SiteUrl" Value="http://localhost/sites/portal"/>

419BF2880E221BB9_587_2[1]
Figura 3 – Arquivo XML com alteração

OBS: Mude o valor do SiteUrl para o seu web site.

3 - Faça o deploy com sucesso!

Referências:
http://weblogs.asp.net/jan/archive/2010/05/07/sharepoint-2010-bdc-model-deployment-issue.aspx
http://blogs.msdn.com/pandrew/archive/2010/04/08/deploying-an-external-content-type-error.aspx

[]’s

Marcel Medina

Clique aqui para ler o mesmo conteúdo em Inglês.

SharePoint 2010 Developer Dashboard

Aprenda a habilitar o Developer Dashboard, como utilizar as APIs para exibir suas informa&#231;&#245;es de Tracing e como exibir os resultados de processamento de sua p&#225;gina graficamente.

Oi pessoal, tudo bem?

Durante o desenvolvimento de soluções, nós desenvolvedores temos a preocupação de entregar soluções funcionais, que estejam de acordo com os requisitos solicitados. Apesar de me preocupar com a performance de minhas aplicações, na maioria das soluções comerciais que tenho trabalhado performance não é um fator crítico.

Dependendo do cenário e se isso for um requisito? Como obter informações de diagnóstico em suas soluções no SharePoint 2010?

Justamente temos agora o Developer Dashboard que traz um painel de informações de tracing.

Nesse artigo vou mostrar como habilitar o Developer Dashboard, como utilizar as APIs para exibir suas informações de Tracing e como exibir os resultados de processamento de sua página graficamente.

Apresentando o Developer Dashboard

Assim como um desconhecido, antes de tudo gostaria de apresentar o Developer Dashboard, conforme podemos ver na Figura abaixo:

419BF2880E221BB9_581_0[1]
Figura 1 – SharePoint 2010 Dashboard Developer

OBS: Repare que a borda do Dashboard é de cor verde, pois não contém asserts e eventos críticos. Compararemos a mudança de cor mais adiante.

O lado esquerdo apresenta os eventos executados durante o processamento da página (http handler events) e seus respectivos tempos de execução, enquanto que no lado direito temos um mix contendo informações abrangentes e também detalhes do mergulho da requisição, como por exemplo as queries enviadas ao banco de dados.

O interessante é que os links revelam o Callstack da execução e mais detalhes, de acordo com a figura abaixo:

419BF2880E221BB9_581_1[1]
Figura 2 – Detalhes de uma query do banco de dados

Uma vez apresentados vamos partir para o que interessa.

Ativando e desativando o Developer Dashboard

Por padrão o Developer Dashboard não vem habilitado e para exibí-lo temos 3 possibilidades:

  • Código .Net

  • STSADM

  • PowerShell

Também temos 3 níveis de exibição do Dashboard: On, Off e OnDemand. Onde:

  • No nível de exibição "On" o painel sempre será exibido;

  • Em "Off" ele é desligado;

  • Em "OnDemand" um ícone é adicionado à página para exibição do painel apenas quando solicitado.

A figura abaixo nos exibe tal ícone:

419BF2880E221BB9_581_2[1]
Figura 3 – Ícone do Developer Dashboard

OBS: É importante ressaltar que se o Dashboard foi habilitado utilizando OnDemand, somente Administradores do Site Collection e Owners terão acesso. Membros e Visitantes não visualizarão o ícone. Em todas as ativações do Developer Dashboard utilizarei o nível de exibição OnDemand, que no meu ponto de vista é o ideal.

Código .Net

Podemos criar uma Feature que ative ou desative o Dashboard, ao invés de utilizar scripts. Dessa forma a ativação ou desativação pode ser feita diretamente pelo Site Collection Features.

Crie um projeto no Visual Studio 2010 do tipo Empty SharePoint Project chamado DeveloperDashboard. Escolha a opção para trabalharmos com uma Farm Solution. Seu projeto inicial deve estar semelhante à Figura 4:

419BF2880E221BB9_581_3[1]
Figura 4 – Projeto Inicial da Feature DeveloperDashboard

Adicione um Event Receiver à Feature conforme exibido na Figura 5:

419BF2880E221BB9_581_4[1]
Figura 5 – Adição de Event Receiver

A classe DeveloperDashboardEventReceiver será criada automaticamente, com os métodos comentados. Adicione o seguinte código para ativação e desativação da feature:

Code Snippet
  1. public override void FeatureActivated(SPFeatureReceiverProperties properties)
  2. {
  3.     SPWebService contentService = SPWebService.ContentService;
  4.     contentService.DeveloperDashboardSettings.DisplayLevel = SPDeveloperDashboardLevel.OnDemand;
  5.     contentService.DeveloperDashboardSettings.Provision();
  6. }
  7.  
  8. public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
  9. {
  10.     SPWebService contentService = SPWebService.ContentService;
  11.     contentService.DeveloperDashboardSettings.DisplayLevel = SPDeveloperDashboardLevel.Off;
  12.     contentService.DeveloperDashboardSettings.Unprovision();
  13. }

No final seu projeto deve ficar parecido com o da figura abaixo:

419BF2880E221BB9_581_5[1]
Figura 6 – Projeto Final da Feature DeveloperDashboard

Compile e faça o deploy diretamente pelo Visual Studio 2010 em ambientes de desenvolvimento. Para ambientes de produção faça o deploy via STSADM conforme figura abaixo:

419BF2880E221BB9_581_6[1]
Figura 7 – Deploy da feature em Produção

No final nossa feature deve estar habilitada conforme a seguinte figura:

419BF2880E221BB9_581_7[1]
Figura 8 – Deploy da Feature Developer Dashboard

Faça o download da solução aqui.

STSADM

Abra o command e digite o seguinte trecho para habilitar o Developer Dashboard:

stsadm –o setproperty –pn developer-dashboard –pv OnDemand

Para desabilitar:

stsadm –o setproperty –pn developer-dashboard –pv Off

OBS: A opção –pv é case-sensitive.

Resultado:

419BF2880E221BB9_581_8[1]
Figura 9 – Execução dos comandos via STSADM

PowerShell

Uma outra possibilidade que temos é a utilização do PowerShell para a execução de scripts.

Para habilitar o Developer Dashboard:

$dash = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$settings = $dash.DeveloperDashboardSettings
$settings.DisplayLevel = [Microsoft.SharePoint.Administration.SPDeveloperDashboardLevel]::OnDemand
$settings.Update()

Resultado:

419BF2880E221BB9_581_9[1]
Figura 10 – Execução de script de ativação via PowerShell

Para desabilitar:

$dash = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$settings = $dash.DeveloperDashboardSettings
$settings.DisplayLevel = [Microsoft.SharePoint.Administration.SPDeveloperDashboardLevel]::Off
$settings.Update()

Resultado:

419BF2880E221BB9_581_10[1]
Figura 11 – Execução de script de desativação via PowerShell

Medindo performance e adicionando mensagens via Tracing

Uma vez que o Dashboard está ativo, podemos prosseguir com a adição de mensagens no Tracing do SharePoint 2010.

Conforme já dito essa é uma excelente maneira de você medir a performance de seu código e adicionar mensagens customizadas para monitoramento.

Para medirmos o tempo do trecho de código que temos a intenção de monitorar, devemos utilizar a classe SPMonitoredScope. Essa informação será disponibilizada no lado esquerdo do Dashboard.

Para adicionarmos mensagens de log, warnings ou assert messages utilizaremos a classe SPCriticalTraceCounter. Essa informação será disponibilizada no lado direito do Dashboard, e um link estará a disposição para visualizarmos os detalhes da mensagem.

OBS: O Callstack que se encontra nos detalhes da mensagem pode adicionar alguns Kb na página. Portanto fique atento ao crescimento da quantidade de mensagens customizadas que você tiver, elas vão aumentar o tamanho (Kb) de sua página caso o Dashboard esteja ativado.

Adicione um novo projeto do tipo Visual Web Part chamado Tracing. A solução deve ficar parecida com a figura abaixo:

419BF2880E221BB9_581_11[1]
Figura 12 - Projeto da Web Part de Tracing

No arquivo TracingWebPartUserControl.ascx.cs adicione o código abaixo:

Code Snippet
  1. using System;
  2. using System.Web.UI;
  3. using System.Web.UI.WebControls;
  4. using System.Web.UI.WebControls.WebParts;
  5. using Microsoft.SharePoint.Utilities;
  6.  
  7. namespace Tracing.TracingWebPart
  8. {
  9.     public partial class TracingWebPartUserControl : UserControl
  10.     {
  11.         protected void Page_Load(object sender, EventArgs e)
  12.         {
  13.             // Using class for tracking the execution time
  14.             using (SPMonitoredScope sc = new SPMonitoredScope("LoadMeter"))
  15.             {
  16.                 for (uint i = 0; i < 10; i++)
  17.                 {
  18.                     // Adding custom messages
  19.                     SPCriticalTraceCounter.AddDataToScope(i, "Loop For", 15, string.Format("Mensagem monitorada - {0}", i.ToString()));
  20.                 }
  21.             }
  22.         }
  23.     }
  24. }

Classe TracingWebPartUserControl

Esse código contém as duas classes SPMonitoredScope e SPCriticalTraceCounter conforme já comentamos. Vale ressaltar que o traceLevel (3º parâmetro do método AddDataToScope) pode ser:

  • 1 – Critical
  • 4 - Exception (Watson)
  • 6 – Assert
  • 8 – Warning
  • 10 – Unexpected
  • 15 - Monitorable

Realize a adição da Web Part (1), salve (2) e logo após visualize o Dashboard (3) conforme figura abaixo:

419BF2880E221BB9_581_12[1]
Figura 13 – Adição da Web Part de Tracing

Veja o Dashboard, seu enquadramento não está mais da cor verde conforme Figura 1. Temos a cor vermelha que mostra que temos asserts e eventos críticos ocorrendo (no nosso caso as mensagens criadas): 

419BF2880E221BB9_581_13[1]
Figura 14 – Dashboard com Time Scope e Mensagens adicionadas

Clique sobre uma das mensagens e observe que podemos ver os detalhes do Callstack e da mensagem:

419BF2880E221BB9_581_14[1]
Figura 15 – Mensagem customizada exibida nos detalhes

Faça o download da solução aqui.

Visualização do Dashboard com gráfico

Podemos incrementar o Dashboard com um gráfico de visualização chamado Developer Dashboard Visualizer criado por Jaap Vossers que consiste em um UserControl que faz utilização do JQuery para exibição dos eixos eventos x tempos de execução (lado esquerdo do Dashboard).

Esse projeto está disponível no Codeplex pelo link: http://devdashvis.codeplex.com/

Baixe o pacote wsp e instale-o utilizando o STSADM, conforme a figura abaixo:

419BF2880E221BB9_581_15[1]
Figura 16 – Ativando o Developer Dashboard Visualizer

Os http handler events são exibidos imediatamente acima do dashboard:

419BF2880E221BB9_581_16[1]
Figura 17 – Visualização Gráfica

Nesse artigo vimos como habilitar o Developer Dashboard do SharePoint 2010. Vimos que informações de diagnóstico e mensagens de tracing são exibidas no output da página ao browser que fez o request. Tais informações podem ajudar na clarificação de erros ou resultados indesejados durante o processamento de sua solução no SharePoint 2010.

Espero que essas dicas sejam úteis.

Referências para a criação desse post:
http://blogs.msdn.com/pandrew/archive/2010/03/26/sharepoint-2010-developer-dashboard-for-debugging-code.aspx
http://weblogs.asp.net/jcortez/archive/2010/03/16/developer-dashboard-in-sharepoint-2010.aspx
http://devdashvis.codeplex.com/

[]’s

Marcel Medina

Clique aqui para ler o mesmo conteúdo em Inglês.