quarta-feira, 24 de fevereiro de 2010

SharePoint: Minha página customizada não pega o tema do site

Se você criou e/ou customizou páginas em um site SharePoint 2007, e ao mudar o tema do site esta mudança não apareceu nas páginas customizadas, uma possível causa é a ausência do controle ASP.NET que inclui na página as folhas de estilo do tema selecionado. Coloque na seção

<asp:Content ContentPlaceHolderId="head">

do código da página o seguinte:

<SharePoint:Theme runat="server">

Isto faz com que o SharePoint emita no HTML gerado para a página a tag <link> que inclui na página os estilos do tema selecionado para o site.

sexta-feira, 12 de fevereiro de 2010

SharePoint 2010: ambiente de testes

Quem está interessado no SharePoint 2010 e quer montar um ambiente de desenvolvimento pra testar o bichinho, aí vão alguns links úteis:
Destes, o mais interessante é o VHD com o ambiente de teste. Pra quem não conhece, um VHD (ou Virtual Hard Drive) é um arquivo que serve como disco de uma máquina virtual que roda no Virtual PC, Virtual Server ou Hyper-V. Neste caso, você terá que usar o Hyper-V, pois o SharePoint 2010 só tem versão de 64 bits, e nem o Virtual PC nem o Virtual Server rodam VM de 64 bits. Caso você não tenha um Windows 2008 à mão (o Hyper-V só roda no 2008), pode fazer download do Hyper-V Server 2008 R2 - uma versão do Windows 2008 com somente o necessário pra subir o Hyper-V e rodar VM's. Free. Mas não tem interface gráfica - você vai ter que ter uma segunda máquina pra conectar no Hyper-V Server, montar a VM e conectar nela pra trabalhar.

Quem tem uma máquina boa - Quad Core com 8GB de RAM - pode instalar um 2008 e criar a VM lá dentro mesmo. Mas pra mim, com um desktop Pentium D (isso mesmo ;-) e 6GB de RAM, o Hyper-V Server deu uma performance aceitável. Depois conectei nele com o netbook Intel Atom (isso mesmo ;-)) da mulher e comecei a trabalhar.

O VHD de teste do SharePoint 2010 é bem completo. Na verdade são 2 VHD's: um com o SharePoint Server 2010 e "penduricalhos": Visual Studio 2010, Designer 2010, um AD, Office 2010, SQL Server 2008 com Reporting e Analisys Services, e vários sites já criados e populados pra servir de exemplo. O segundo contém basicamente um Exchange Server 2010 rodando, pra testar cenários com integração via messaging.

Não se esqueça de que a máquina rodando a VM - Windows 2008 ou Hyper Server - tem que ser de 64 bits, ou a VM não vai subir.
PS: Dê uma olhada nesse post também: "Máquina de testes usando Boot de um VHD". Fazer uma máquina de testes dando boot por um VHD aumenta sensivelmente a performance do ambiente de testes, porque só há um sistema operacional rodando, ao invés de dois, que é o que acontece quando você roda uma VM.

terça-feira, 2 de fevereiro de 2010

Usando Microsoft.SharePoint.dll para listar o ID das listas de um site

Ao migrar um site de uma web application para outra via o backup do SharePoint Designer (menu Site > Administration > Backup Web Site), várias web parts que eu tinha convertido para XSLT mostravam uma mensagem "estranha":
The server returned a non-specific error when trying to get data from the data source. Check the format and content of your query and try again. If the problem persists, contact the server administrator.
Quando você converte uma web part que mostra uma lista para XSLT, o SharePoint coloca na página um controle do tipo WebPartPages:DataFormWebPart para mostrar os dados da lista. Este controle designa a lista cujos dados devem ser mostrados através de seu ID (cada lista no SharePoint ganha um GUID como identificador, que é armazenado na propriedade ID da lista). Pois bem, quando migrei o site para seu novo local, as listas foram recriadas, e logicamente ganharam IDs diferentes. E aí as web parts que faziam referência a elas via ID pararam de funcionar.

Sendo um geek empolgado, resolvi testar o uso de Microsoft.SharePoint.dll para fazer um aplicativozinho de linha de comando que listasse os IDs das listas de um site. Ridiculamente fácil. O código está a seguir, e é um exemplo legal pra dar uma idéia do uso das classes no namespace Microsoft.SharePoint. Pra quem quiser só usar a ferramenta, é só baixar o seguinte arquivo e rodá-lo no seu servidor SharePoint: SPListId.zip.


Imports Microsoft.SharePoint

Module Module1

Sub Main()
Try
Console.WriteLine()
If My.Application.CommandLineArgs.Count = 0 Then
Console.WriteLine("SPListId - Lista os ID das listas de um site")
Console.WriteLine("Copyright (c) 2010 SrNimbus. No rights reserved ;)")
Console.WriteLine("Uso: SPListId url_do_site")
Return
End If
' A classe System.Uri auxilia na manipulação de endereços de rede
Dim urlSite As Uri = New Uri(My.Application.CommandLineArgs(0))
' A classe Microsoft.SharePoint.SPSite representa uma site collection do SharePoint
Dim siteCollection As New SPSite(urlSite.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped))
' A classe Microsoft.SharePoint.SPWeb representa um site dentro de uma site collection
Dim site As SPWeb = siteCollection.OpenWeb(urlSite.AbsolutePath)
Console.WriteLine("Listas em {0}:", urlSite.OriginalString)
Console.WriteLine("------------------------------------")
' A classe SPList representa uma lista do SharePoint
For Each lista As SPList In site.Lists
Console.WriteLine("{0}: {{{1}}}", lista.Title, lista.ID.ToString().ToUpper())
Next
Console.WriteLine("------------------------------------")
Catch erro As Exception
Console.WriteLine("Ooops:")
Console.WriteLine("{0} - {1}", erro.Source, erro.Message)
Finally
Console.WriteLine()
End Try
End Sub

End Module

Lembre-se de colocar uma referência a Microsoft.SharePoint.dll para poder compilar o projeto. Ela está na máquina do SharePoint, em %ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI.