Rodrigo Romano – MVP SharePoint Server

Registros de um Especialista SharePoint :)

Archive for the ‘Tips’ Category

Como extrair todas as farms solutions (WSPs) utilizando PowerShell

leave a comment »


Olá SharePointers,

Hoje vou apenas dar uma dica rápida. Passando por alguns projetos de migração de ambientes, instalação de SharePoint e coisas do tipo, acabamos precisando extrair todos os WSPs instalados na Farm.

Para isso, podem utilizar o script abaixo.

Só salvar o script em um arquivo com extensão .PS1 e alterar a linha apontando onde os pacotes serão exportados.

 

$dirName = “c:\WSPs\”

if (!(Test-Path -path $dirName))

{

New-Item $dirName -type directory

}

Write-Host Exporting solutions to $dirName

foreach ($solution in Get-SPSolution)

{

$id = $Solution.SolutionID

$title = $Solution.Name

$filename = $Solution.SolutionFile.Name

Write-Host “Exporting ‘$title’ to …\$filename” -nonewline

 

try {

$solution.SolutionFile.SaveAs(“$dirName\$filename”)

Write-Host “– done” -foreground green

 

}

 

catch

{

Write-Host ” – error : $_” -foreground red

}

}

 

Written by Rodrigo Romano

June 28, 2012 at 9:57 pm

Entendendo a funcionalidade de Eventos Recorrentes no SharePoint (RecurrenceData)

with 2 comments


Olá SharePointers,

Depois de ver muita confusão em fóruns e várias pessoas com dúvida sobre esse mesmo assunto, resolvi fazer um post para esclarecer como o SharePoint trata esses itens internamente.

Antes de mais nada, vamos entender como o SharePoint se comporta com eventos nos calendários.

Vamos entender como o SharePoint trata os eventos de data, observando 3 campos do item: fRecurrence, fAllDayEvent, EventType:

Tipo Descrição fRecurrence fAllDayEvent EventType
Evento Único Um evento criado com o checkbox “Dia todo” e “Recorrência” desmarcados. False False 0
Evento de um dia inteiro Um evento criado com o checkbox “dia todo” marcado. False True 0
Evento Recorrente Um evento criado com o checkbox “recorrência” marcado. Tem um ícone de recorrência na visualização de Todos os Eventos. Aparece como um único evento mestre, mas nas visões de calendários todas as instâncias são mostradas. True False 1
Evento de dia todo recorrente Igual o item acima, mas com o checkbox “dia todo” marcado. True True 1
Exceção da recorrência Criado com a edição de uma instância de um evento recorrente. Tem um ícone de recorrência “riscado”. True False 4
Exceção da recorrência de eventos de dia todo Igual acima, mas com um evento de dia todo. True True 4
Item deletado de uma recorrência Criado deletando uma instância de um evento recorrente. O título é alterado para começar com “Deletado: “ na view de Todos os Eventos e não aparece nas visualizações de calendário. True False 3
Otem deletado de uma recorrência de dia todo. Igual acima, mas para eventos de dia todo. True True 3

Quando criamos um item recorrente, alguns campos que são utilizados em eventos “normais” podem ter significados diferentes:

Campo Valor para evento único Valor para evento recorrente
EventDate Data e hora de ínicio Data e hora de início de quando o evento recorrente foi criado, que pode ser uma data anterior a primeira instância de um evento recorrente;
EndDate Data e hora de término Data e hora da última instância de um evento recorrente. Para eventos recorrentes sem data de término, esta é uma data calculada a vários anos no futuro.
Duration O tempo em segundos entre a data de início e término A duração em segundos de uma instância individual do evento recorrente.

Agora, como o SharePoint armazena a recorrência? Ele armazena vários itens na lista? Como fica a performance disso?

Felizmente, é armazenado apenas 1 ITEM na lista. Todas as recorrências são apenas SOMBRAS ou projeções. Tudo isso é controlado pelo campo RecurrenceData.

Vejam alguns exemplos:

Tipo de recorrência Valor do campo RecurrenceData
Diariamente, a cada um dia, sem data de término <recurrence><rule><firstDayOfWeek>su</firstDayOfWeek>

<repeat><daily dayFrequency=”1″ /></repeat>

<repeatForever>FALSE</repeatForever>

</rule></recurrence>

Semanalmente, toda segunda, terça e quarta, terminando em 31/05/2007 <recurrence><rule><firstDayOfWeek>su</firstDayOfWeek>

<repeat><weekly mo=”TRUE” tu=”TRUE” we=”TRUE” weekFrequency=”1″ /></repeat>

<windowEnd>2007-05-31T22:00:00Z</windowEnd>

</rule></recurrence>

Mensalmente, toda terceira quarta-feira a cada 2 meses, sem data de término <recurrence><rule><firstDayOfWeek>su</firstDayOfWeek>

<repeat><monthlyByDay we=”TRUE” weekdayOfMonth=”third” monthFrequency=”2″ /></repeat>

<repeatForever>FALSE</repeatForever>

</rule></recurrence>

Anualmente, todo dia 18 de maio, termina após 10 ocorrências. <recurrence><rule><firstDayOfWeek>su</firstDayOfWeek>

<repeat><yearly yearFrequency=”1″ month=”5″ day=”18″ /></repeat>

<repeatInstances>10</repeatInstances>

</rule></recurrence>

Agora, provavelmente vocês devem estar pensando o mesmo que pensei: “E AGORA?? Tenho que fazer um parse desse XML para entender a recorrência?”

Depois de um tempo, FELIZMENTE, descobri que não precisamos. Não era possível ter que fazer dessa maneira tão árdua.

O truque está no objeto SPQuery:

using(SPSite site = new SPSite("http://localhost"))
using (SPWeb web = site.RootWeb)
{
    SPList calendarList = web.Lists.TryGetList("Calendar");
    if (calendarList != null)
    {
        SPQuery query = new SPQuery();

// Aqui que a mágica acontece

        query.ExpandRecurrence = true;
 
        query.Query = "<Where><Eq><FieldRef Name='EventDate'"+
" IncludeTimeValue='False'/><Value Type='DateTime'>"

+SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Now)+

“</Value></Eq></Where>”;


        // Pesquisar apartir do começo do mês atual
   query.CalendarDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
 
        // Retorna todos os itens (incluindo as ocorrências de um 
        // evento recorrente que aparecem na visão de calendário
        // do mês atual para frente 
        // Exemplo: Se tem apenas 1 item na lista, com 10 ocorrências
        // nesse mês, o resultado serão 10 SPListItem com o mesmo ID de
        // item, mudando apenas as informações sobre a data para conter
        // uma única ocorrência
        SPListItemCollection calendarItems = calendarList.GetItems(query);
        foreach (SPListItem item in calendarItems)
        {
            Console.WriteLine(item["Title"] + ": começa "
            + item["EventDate"].ToString() + " e termina "
            + item["EndDate"].ToString());
        }
    }
}

#FicaADica Pessoal Smiley piscando

Written by Rodrigo Romano

June 21, 2012 at 6:25 pm

Relink Infopath forms templates no SharePoint Server 2010

leave a comment »


Olá Pessoal,

Em um dos atendimentos que costumo fazer, encontrei uma necessidade de migrar um site de um servidor para outro. Até então, sem problemas.

Entretanto, um usuário, durantes os testes, me encontrou com um erro que me deixou um tanto curioso: “Quando eu tento salvar um item novo, os dados estão sendo gravados no outro servidor”.

 

Depois de entender a solução, uma lista tinha sido customizada com um formulário Infopath e os links do mesmo precisavam ser alterados.

 

Primeiro, segui esse artigo Perform post-upgrade steps for a database attach upgrade (SharePoint Server 2010), que fala como utilizar os comandos: Update-SPInfoPathAdminFileUrl e Update-SPInfoPathUrl. Para os novos, itens funcionou perfeitamente.

Para a edição dos itens que já existiam na biblioteca o problema persistia.

 

Enfim, a solução é fazer o relink dos formulários com a biblioteca atual. Para isso, siga os passos abaixo:

 

1 – Vá nas configurações da biblioteca desejada

image

2 – Procure pela opção RELINK DOCUMENTS TO THIS LIBRARY

image

3 – Clique em RELINK ALL

image

 

Isso fará com que todos os formulários dessa biblioteca sejam relinkados com o template associado e com a URL da biblioteca. Dessa forma, problemas resolvidos!!!! Alegre

 

Para mais informações, consultem o blog do time de produtos do Infopath da Microsoft http://blogs.msdn.com/b/infopath/archive/2006/11/01/relinking-forms-and-form-templates.aspx e vejam mais informações sobre esse “problema” em particular.

 

Boa sorte!

Written by Rodrigo Romano

June 14, 2012 at 4:34 pm

Como detectar se o Evento Updating está sendo chamado pelo Checkin ou Pelo Save?

with 2 comments


Olá SharePointers,

Hoje passei por uma situação bem diferente: eu precisava fazer umas verificações no Event Receiver ItemUpdating. Entretanto, esse evento era chamado 2 vezes, uma quando eu clicava em Save no Item e outra quando clicava em Checkin.

No save, tudo bem. Mas no checkin não podia. E agora? Como fazer isso?

 

image

 

Assim, voce consegue determinar quando o evento está rodando e chamar o código apropriadamente.

 

Abraços!

Written by Rodrigo Romano

June 1, 2012 at 4:45 pm

Instalar SharePoint 2010 Farm Mode no Windows 7

leave a comment »


Olá SharePointers,

A dica de hoje é um pouco mais simples, mas MUITO usual para desenvolvedores, testadores, vendedores, enfim, qualquer pessoa que precise ter o SharePoint 2010 instalado em seu computador com Windows 7, mas mesmo assim precise de um ambiente de modo Farm.

Se você escolher o modo farm, o Assistente de Configurações dos Produtos e Tecnologias SharePoint (Configuration Wizard) e digitar uma conta local, aparecerá uma mensagem falando que “contas locais não são suportadas em modo de instalação FARM”.

image

A primeira coisa que pensei é tentar criar um banco de dados de configuração via linha de comando, utilizando o PSConfig. (Não funcionou! Smiley triste)

E agora??

A solução é simples. Abra o SharePoint 2010 Management Shell e Digite o comando abaixo:

New-SPConfigurationDatabase –DatabaseName <Nome do Banco de Dados> –DatabaseServer <Nome da instância do SQL Server> –AdministrationContentDatabaseName <Nome do Banco de dados de Administração>

image

 

Pronto, agora é só Conectar em uma farm existente e correr para o abraço!!

 

Dessa forma, conseguimos simular ambientes de produção com todos os requisitos de segurança e contas menos privilegiadas.

Espero que tenham gostado Smiley piscando!

Written by Rodrigo Romano

April 20, 2012 at 9:33 am

MSDN Code–Exemplos de códigos de SharePoint

with one comment


Olá SharePointers,

Para quem não conhece, a Microsoft possui uma seção muito interessante dentro do portal do MSDN, o MSDN Code Gallery.

Nessa seção, os desenvolvedores podem postar exemplos de códigos para facilitar os usuários a entenderem alguma funcionalidade de um produto específico. Além disso, você poderá baixar a solução do Visual Studio contendo o código demonstrado no exemplo funcionandoo.

Eu achei muito interessante e inclusive comecei a contribuir com essa galeria, porque uma das formas de se aprender é pegar algo que está funcionando e alterar, alterar, alterar….. (Eu particularmente aprendo muito rápido dessa maneira).

Para quem quiser acompanhar os meus exemplos, pode clicar nos links abaixo:

Trabalhando com Audiências programaticamente

Como deletar todos os itens de uma lista / biblioteca do SharePoint

 

#FicaADica Smiley piscando

Written by Rodrigo Romano

April 18, 2012 at 3:20 pm