segunda-feira, 19 de janeiro de 2015

Erro 0x80070003 ao executar Restore-SPSite

Na execução de Restore-SPSite para restaurar nackup de um site em outro servidor ocorreu o serguinte erro:

Restore-SPSite : <nativehr>0x80070003</nativehr><nativestack></nativestack>

No log do SharePoint, procurando pelo nome do arquivo de backup, encontrei o seguinte erro:

Could not deserialize site from C:\TEMP\arquivo_backup.bak . Microsoft.SharePoint.SPException: Schema version of backup 15.0.4649.1000 does not match current schema version 15.0.4569.1000    

Causa do erro é que o servidor de origem está com versão do SharePoint (15.0.4649.1000) mais atual que o servidor de destino (15.0.4569.1000).

Como resolver:
  1. Verificar qual o update/service pack deve ser instalado. Em http://blogs.technet.com/b/steve_chen/archive/2013/03/26/sharepoint-2013-build-numbers-and-cu-39-s.aspx?pi13610=3#Build há uma tabela listando as atualizações, números de versão e links para download dos mesmos.
  2. Baixar e instalar a atualização.
  3. Executar o "SharePoint Product and Configuration Wizard", sem mudar nada, ou o número de versão não será atualizado. 
Nem sempre este último passo é necessário; para verificar, rode o seguinte em uma janela SharePoint Management Shell: 
(Get-SPServer -Identity nome_servidor).NeedsUpgrade

Se o retorno for "True", o Wizard deve ser executado. Confira o resultado executando

(Get-SPFarm).BuildNumber

Se o número de versão não for o esperado após o upgrade e execução do Wizard, dê um boot no servidor e cheque novamente.

segunda-feira, 25 de agosto de 2014

Cmdlets do Reporting Services não reconhecidas na Shell de Gerenciamento do SharePoint

Erro: "Install-SPRSService : The term 'Install-SPRSService' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again."

Soluções:
  1. Você não está em uma janela Windows PowerShell "comum" em vez de uma janela "Shell de Gerenciamento do SharePoint", ou o Reporting Services em modo integrado SharePoint não foi instalado ("Install Reporting Services SharePoint Mode for SharePoint 2013").
  2. O Service Pack 1 para SQL Server 2012 não foi instalado no Reporting Services. De acordo com "Software requirements for business intelligence in SharePoint Server 2013", o SP1 é necessário para Reporting Services em modo integrado no SharePoint 2013.

quinta-feira, 10 de abril de 2014

Como instalar os templates de projeto para SharePoint 2013 no Visual Studio 2012


  1. Baixe e instale o Web Platform Installer (Web PI): http://www.microsoft.com/web/downloads/platform.aspx.
  2. Feche as instâncias em execução do Visual Stuidio ou o setup irá falhar.
  3. No Web PI, selecione e instale o item "Microsoft Office Developer Tools for Visual Studio 2012". 
Depois da instalação, os templates estarão disponíveis na opção "New | Project", em "Installed | Templates | <language> | Office/SharePoint | SharePoint Solutions".

segunda-feira, 24 de março de 2014

SharePoint 2013: Configuração da sincronização de perfis de usuário

Na instalação default do SharePoint 2013, o serviço de sincronização de perfis de usuário não está configurada, então os alertas não funcionam porque os usuários não possuem endereço de e-mail para o qual o SharePoint possa enviar as mensagens de alerta. Supondo que seus endereços de e-mail estejam no AD, para configurar a sincronização de perfis de usuários faça o seguinte:
  1. Seguir o artigo ​"Synchronize user and group profiles in SharePoint Server 2013" (http://technet.microsoft.com/en-us/library/ee721049(v=office.15).aspx). Atenção para o detalhe de colocar a conta usada para a sincronização como Farm Administrator e administradora da máquina local (servidor SharePoint no qual o serviço de sincronização vai rodar).
  2. Usar o ADSI Edit no DC para dar direito de "Replicate Directory Changes" no container do AD que será replicado para o SharePoint.
  3. Meu domínio de teste não tinha Exchange, então a propriedade proxyAddress no AD não estava sendo preenchida. O SharePoint pega o e-mail dessa propriedade, então o e-mail no SharePoint só foi preenchido após trocar o mapeamento da propriedade "Work Email" do SharePoint de proxyAddress para mail (que havia sido preenchido manualmente no AD), e realizar uma sincronização full (uma incremental não trouxe os valores).
Falô,

GB

domingo, 2 de fevereiro de 2014

Visual Studio 2013 e Microsoft.SqlServer.Management.Sdk.Sfc

Erro "Could not file assembly Microsoft.SqlServer.Management.Sdk.Sfc, version ..." ao tentar criar nova conexão de dados no Visual Studio 2013.

Por algum motivo o SQL Server Management Objects (SMO) não foi instalado corretamente. O SMO pode ser baixado do site da Microsoft, mas como ele é parte do SQL Server Feature Pack, é isto que você tem que procurar. Na página de download do Feature Pack não há um único link para download; você tem que selecionar quais "partes" do Feature Pack você quer instalar. O SMO é o arquivo "SharedManagementObjects.msi". Você também deve instalar o CLR Types (arquivo "SQLSysClrTypes.msi"), que é usado pelo MSO.

A versão do SMO a instalar depende da versão mostrada na mensagem de erro:

Falô,

GB

quarta-feira, 13 de novembro de 2013

Como salvar um formulário InfoPath em uma subpasta de uma biblioteca SharePoint

Recentemente precisei salvar um formulário InfoPath 2007 ( :-P ) no seu local original, que era uma subpasta em uma biblioteca de formulários em um SharePoint (2007 tb, :-P ). Como o nome da pasta era gerada dinamicamente no momento da criação do formulário, baseado em um dado que não está presente no mesmo, não há como (pelo menos eu não consegui) criar uma conexão de dados para submeter o formulário para seu local de armazenamento.

A única solução que encontrei foi criar um campo no formulário que armazenasse sua URL, de forma a usar este valor na hora de salvar o formulário. Mas como o formulário está rodando no SharePoint, e é um item de uma lista, o modelo de objetos server do SharePoint está disponível no code-behind do formulário. Usando SPWeb.GetListItem() para acessar o item da lista correspondente ao formulário, as propriedades deste item fornecem a URL do formulário no SharePoint.

     public void FormEvents_Submit(object sender, SubmitEventArgs e)
     {
         // Recupera referência ao formulário na biblioteca SharePoint baseado na sua URL
         SPListItem item = SPContext.Current.Web.GetListItem(this.Uri);
         // Salva o formulário. No código a seguir, a conexão gera o nome do arquivo, mas se o nome
         // deve ser gerado em run-time, pode ser setado através de FileSubmitConnection.FileName
         FileSubmitConnection conexaoSP = (FileSubmitConnection)this.DataConnections["SalvarArquivo"];
         conexaoSP.FolderUrl = item.Web.Url + item.File.ParentFolder.ServerRelativeUrl;
         conexaoSP.Execute();
         e.CancelableArgs.Cancel = false; // Informa o InfoPath que o submit foi ok
     }

sexta-feira, 2 de agosto de 2013

Novidades do Hyper-V no Windows 8

  1. Tem Hyper-V no Windows 8! (no Windows 7 era só o Virtual PC).
  2. Como no Windows 2008 R2, o Hyper-V do Windows 8 suporta VM's de 64 bits (o Virtual PC só suporta VM's de 32 bits, o que é bem restritivo - por exemplo, o SharePoint 2010 não tem versão em 32 bits).
  3. Vantagens em relação ao Hyper-V do W2008 R2:
    - Suporta stand-by da máquina host (no Window 2008, ou você tem o Hyper-V, ou você consegue habilitar o stand-by; um ou o outro, não os dois)
    - Suporta nativamente conexões de VM's a redes externas WiFi (no Windows 2008, nativamente, as VM's só podiam se conectar a redes cabeadas - apesar de existirem "formas alternativas" de se fazer isto).
  4. Novo recurso: Virtaul SAN Manager. Não estudei ainda, mas parece ser suporte a criação de storages virtuais. 
Alguns recursos são novos e outros já eram possíveis de se implementar mas foram incorporados ao produto. De qualquer forma, esta versão que é incluída com o Windows 8 é perfeita para quem trabalha com TI e tem necessidade de criação de ambientes virtuais para desenvolvimento e testes em uma máquina de trabalho.