SharePoint 4 Developers

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

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.

Lição 1 - Core SharePoint Features – Parte IV

Esse post &#233; a continua&#231;&#227;o da li&#231;&#227;o 1 Core SharePoint Features. Onde veremos defini&#231;&#227;o, utiliza&#231;&#227;o e exemplo de SharePoint Views.

Tudo bem pessoal?

Esse post é a continuação da lição 1 Core SharePoint Features. Hoje veremos definição, utilização e um exemplo de view.

Um recurso que facilita bastante na seleção e exibição de itens, principalmente se sua lista/library contém vários itens.

Boa leitura!

Views

Basicamente uma view é a representação visual dos dados de uma Lista/Library baseado em alguns critérios de seleção, que definem como os dados são exibidos.

Por que utilizar views?

Imagine uma library com centenas de itens. Fica bem difícil de encontrar um documento no meio de vários. Para facilitar a visualização desse documento, uma view pode ser criada, pois funciona como um filtro e visualizador de dados.

A view All Documents foi criada automaticamente quando criamos a library VIDocs, de acordo com o último post. Na figura 1 podemos ver que por padrão ela é exibida.

419BF2880E221BB9_307_0[1]
Figura 1 – Default View

Nesse momento temos poucos documentos na library, porém, dependendo da utilização, essa lista pode crescer bastante e daí ficará mais difícil de localizar os documentos.

Para facilitar a localização iremos criar uma view com base no nosso exemplo da coluna FileType.

Abra o menu que contém as views e selecione Create View.

419BF2880E221BB9_307_1[1]
Figura 2 – Criando uma view

Uma seleção de views será exibida conforme a Figura 3, cada uma com suas características específicas, conforme a Tabela 1.

419BF2880E221BB9_307_2[1]
Figura 3 – View Format

Tipo

Utilização

Standard View

Exibe itens ou arquivos como uma lista tradicional em uma página web.

Calendar View

Exibe um calendário de itens em formato visual similar a um calendário de mesa ou parede, com a possibilidade de aplicar filtros diários, semanais ou mensais neste formato.

Datasheet View

Exibe itens em formato de tabela para edição. Ex: tabela de Excel. Esta view pode ser útil no caso de alterações de vários itens, customização ou exportação de dados para planilhas. É necessário que esteja disponível no cliente um programa compatível com o WSS, como: Access 2007 e suporte ao ActiveX.

Gantt View

Exibe dados graficamente, utilizando barras que mapeiam tarefas de um projeto. Esta view pode ser utilizada para identificar tarefas que se sobrepõe e visualizar o progresso das mesmas.

Tabela 1 – Tipos de views disponíveis

OBS: Outras views podem estar disponíveis. Na Figura 3 temos uma view adicional do tipo Access view, a qual permite a criação de um arquivo Access para criação de formulários e relatórios baseados na lista em questão.

Para esse exemplo, selecione Standard View.

Criaremos uma view que agrupa documentos do mesmo tipo, com base na coluna FileType. Conforme Figuras 4, 5, 6 e 7.

419BF2880E221BB9_307_3[1]
Figura 4 – View VIDocs (1/4)

419BF2880E221BB9_307_4[1]
Figura 5 – View VIDocs (2/4)

419BF2880E221BB9_307_5[1]
Figura 6 – View VIDocs (3/4)

419BF2880E221BB9_307_6[1]
Figura 7 – View VIDocs (4/4)

Durante a criação da view temos que passar vários parâmetros para sua criação (campos texto/seleção), os quais podem ser vistos nas imagens. Porém, dependendo da view a ser criada, outros parâmetros podem ser necessários. Para isso segue descrição das seções abaixo encontradas durante a criação da view:

Seção

Descrição

Name

Type the view name and check whether you want to define as default.

Audience

As seguintes opções estão disponíveis para seleção:

  • Create a Personal View
    Utilização apenas pelo usuário que a criou.
  • Create a Public View
    Utilização por todos os usuários.

Columns

Determine as colunas a serem exibidas e também sua seqüência para exibição.

Sort

Opção para ordenação dos dados. Podendo ordenar o conteúdo através de 2 colunas.

Filter

Exiba todos os itens da lista ou apenas um subset pela utilização de filtros.

Group By

Agrupe itens do mesmo valor em sua própria seção.

Totals

Contagem do número de itens em uma coluna.

Style

Opções de estilo para formatação da view:

  • Basic Table

  • Document Details

  • Newsletter

  • Newsletter, no lines

  • Shaded

  • Preview Pane

  • Default

Folders

No caso da lista ou library possuir pastas, é possível incluir uma view que contenha e ou não tais pastas (Flat).

Item Limit

Limite a quantidade de itens que podem ser visualizados na lista ou library, ou mesmo quantos itens podem ser visualizados na mesma página.

Mobile

Configurações disponíveis para visualização de conteúdo. As seguintes opções estão disponíveis para seleção:

  • Make a Mobile View
    Crie uma view para utilização em mobiles.

  • Make this default mobile view
    Define a view como padrão na visualização.

Tabela 2 – Configuração de views

Ao final da configuração, clique em OK. A seguinte view será exibida, conforme Figura 8, que contém o agrupamento pela coluna FileType.

419BF2880E221BB9_307_7[1]
Figura 8 – View VIDocs (Agrupamento pelo FileType)

OBS: Repare que cada agrupamento exibe a quantidade de arquivos que contém e o agrupador utilizado (FileType) em negrito. Ao clicar no sinal (+) o agrupamento se expande e é possível visualizar todos os documentos contidos.

Aqui finalizamos o conteúdo sobre views, porém a lição 1 ainda não terminou. No próximo post veremos web parts.

Espero ter ajudado com esse post! Vamos ao próximo!

Referência:
http://office.microsoft.com/en-us/sharepointtechnology/HA100215771033.aspx

[]’s

Marcel Medina

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