Este artigo irá demonstrar alguns conceitos básicos do modelo de objetos do SharePoint. Para aqueles que ainda não conhecem, o SharePoint é a ferramenta da Microsoft integrante da família Office, voltada para a construção de Portais. O Portal de uma empresa deve integrar e disponibilizar as informações da corporação, de forma a viabilizar o processo colaborativo entre os usuários através da intranet ou internet. Estas informações podem estar contidas em planilhas, documentos, imagens, bancos de dados, aplicações de terceiros ou proprietárias, entre inúmeras outras fontes de conhecimento que uma empresa pode ter.

Onde nós (programadores) entramos nesse universo? Apesar de o SharePoint ser uma ferramenta que implementa um Portal sem a necessidade de codificação, sempre existem necessidades e desafios para atender situações que encontramos em campo. E são nesses casos que são necessárias algumas interferências dos desenvolvedores. O SharePoint é baseado na plataforma .NET e possuí um modelo de objetos que nos permite acesso aos Portais através de código. Neste artigo iremos explorar as classes principais deste modelo, que nos permitem acessar a estrutura de Sites e Áreas de um Portal. Por fim, veremos um exemplo prático de como recuperar e adicionar arquivos armazenados nos Portais SharePoint.

Produto X Plataforma

O SharePoint não é só uma ferramenta, é também uma plataforma. É muito importante esclarecer alguns conceitos que podem nos confundir no futuro. O SharePoint é dividido em duas tecnologias: o SharePoint Services e o SharePoint Portal Server.

O Windows SharePoint Services (WSS) é a plataforma de Information Worker do Windows 2003. Esta plataforma consiste em um modelo de objetos compatível com .NET, e uma ferramenta gratuita da Microsoft para a implementação de Sites Pessoais e de Equipes.

Já o SharePoint Portal Server (SPS) é o Servidor da Microsoft para a implementação de grandes Portais. Com funcionalidades mais avançadas que o SharePoint Services, o SPS atende a cenários mais robustos. Entre inúmeras funcionalidades adicionais, o SPS integra Sites do Sharepoint Services em um único Portal e disponibiliza avançadas funções de indexação e pesquisa. O SPS é baseado na plataforma WSS, e ao nos referirmos a esse conjunto de tecnologias, podemos usar o nome Microsoft SharePoint Products and Technologies.

Quando o Windows SharePoint Services está instalado, encontramos a DLL Microsoft.SharePoint.dll. Basta adicionarmos uma referência a essa DLL em um projeto do Visual Studio e teremos o assembly microsoft.sahrepoint disponível. Se explorarmos o assembly no Object Browser poderemos ver os namespaces do modelo de objetos do WSS.

Principais Classes do WSS

Agora, vamos explorar as principais classes que servirão para acessarmos a estrutura de um Portal, e as informações contidas nele. A estrutura de um portal SharePoint é organizada respeitando uma determinada hierarquia. As classes do Modelo de objetos não poderiam ser diferentes, na Tabela 1 temos uma lista das principais classes para acessarmos a estrutura básica de um Portal. É claro que estas são apenas algumas poucas classes do modelo de objeto, mas serão suficientes para entendermos a dinâmica de acesso às informações do Portal.

Tabela 1. Legenda explicativa da tabela

Classe WSS Namespace SharePoint
SPGlobalAdmin Microsoft.SharePoint.Administration Central de Administração
SPVirtualServer Microsoft.SharePoint.Administration IIS Web Site
SPSite Microsoft.SharePoint Site Collection
SPWeb Microsoft.SharePoint Área / Site
SPList Microsoft.SharePoint Listas (Doc Library, Pic Library, Events, etc)
SPListItem Microsoft.SharePoint Itens de uma Lista
SPFile Microsoft.SharePoint Arquivos de um Lista

SPGlobalAdmin

O WSS tem uma classe chamada SPGlobalAdmin que se encontra no namespace Microsoft.SharePoint.Administration. Quando instanciamos um objeto desta classe, neste objeto temos um conjunto de informações referentes à máquina local onde está instalado o Portal. A partir desta classe poderemos acessar todos os Portais instalados nesta máquina, explorando toda a estrutura dos mesmos. Além disso, através do SPGlobalAdmin poderemos realizar algumas tarefas administrativas do SharePoint. Veja abaixo um exemplo de uma instância do SPGlobalAdmin:


SPGlobalAdmin GlobalAdmin = new SPGlobalAdmin();
        

Observe que o construtor da classe não possuí nenhum parâmetro. Todas as diretivas de segurança ao acessarmos o Portal pelo modelo de objetos são controladas pela autenticação do próprio Windows. Portanto, se ao instanciar a classe SPGlobalAdmin o usuário logado não tiver os devidos direitos, teremos uma exceção de segurança.

SPVirtualServer

Um dos pré-requisitos para a instalação do SharePoint é o IIS 6, uma vez que um portal é hospedado em um Servidor Web. Em um Servidor podemos ter diversos portais, e cada portal precisa de um Web Site exclusivo no IIS.

A classe SPVirtualServer é uma representação de um Web Site do IIS, e a classe SPGlobalAdmin possuí uma collection de classes SPVirtualServer, chamada VirtualServers. É através dela que podemos listar todos os Web Sites que temos no IIS. Porém, nem todo Web Site do IIS pode estar hospedando um Portal SharePoint. Para identificarmos quais Web Sites hospedam Portais SharePoint, temos a propriedade State. Quando esta propriedade for igual a constante SPVirtualServerState.Ready, saberemos que este Web Site hospeda um Portal SharePoint.

Na Listagem 1 temos um exemplo de um trecho de código que irá listar todos os VirtualServers que estiverem com a propriedade State igual a Ready.

Listagem 1. Listando os VirtualServers que estão Ready

SPGlobalAdmin GlobalAdmin = new SPGlobalAdmin();

foreach( SPVirtualServer vServer in GlobalAdmin.VirtualServers )

{

If (vServer.State == SPVirtualServerState.Ready)

Console.WriteLine("Virtual Server:" + vServer.Url.ToString());

}
        

SPSite

Um objeto da classe SPVirtualServer possuí uma collection chamada Sites. Esta collection armazena objetos da classe SPSite. Cada SPSite em um Virtual Server é o que chamamos de Site Collection, ou seja, uma coleção de Sites do nosso Portal. Na Listagem 2 estamos listando todos os SPSites de um Virtual Server. Uma implementação simples de um Portal SharePoint terá apenas uma Site Collection.

Listagem 2. Listando os SPSites de um VirtualServer

Foreach (SPSite SiteCollection in vServer.Sites)

{
            
Console.WriteLine("Site Collection:" + SiteCollection.Url.ToString());
            
}
        

SPWeb

A classe SPWeb é a representação de um Site em nosso portal, também conhecida como Área no SharePoint Portal Server. Esta é uma das principais classes na estrutura de um portal, e é através dela que conseguiremos acessar praticamente todas as informações armazenadas. Quando estamos navegando pelo Portal, podemos identificar os Sites nas barras verticais e horizontais de opções.

A Classe SPSite possuí uma propriedade chamada RootWeb, que nos retorna um objeto SPWeb. Este é considerado o nosso Top Level Site ou Site principal na nossa hierarquia.

Todo objeto SPWeb possuí uma collection chamada Webs. Essa coleção de objetos da própria classe SPWeb, é que nos garante a recursividade necessária para podermos ter uma estrutura hierárquica de Sites. A Listagem 3 nos mostra um método que percorre recursivamente a estrutura de Sites de uma SiteCollection, recebendo como parâmetro inicial o RootWeb.

Listagem 3. Recuperando a estrutura hierárquica de Sites de uma Site Collection

static void Main(string[] args)

{
            
SPSite SiteCollection = new SPSite("http://taunet");
            
LoadSites( SiteCollection.RootWeb );
            
}
            
             
            
protect void LoadSites( SPWeb Site )
            
{
            
Console.WriteLine("Site :" + Site.Url);
            
foreach( SPWeb ChildSite in Site.Webs )
            
{
            
LoadSites(ChildSite);
            
}
            
}
        

No Exemplo da Listagem 3, ao invés de percorrermos todos as SiteCollections de um VirtualServer como foi demonstrado anteriormente, estamos recuperando a SiteCollection através da URL da mesma, basta passar a URL como parâmetro ao construtor da classe SPSite.

Depois de recuperarmos a SiteCollection, chamamos o método LoadSites passando o nosso RootWeb como parâmetro. O método LoadSites imprime a URL do Site recebido e percorre todos os Sites da collection Webs. Para cada objeto SPWeb da collection, o método LoadSites é chamado novamente. Essa rotina nos retorna toda a estrutura de Sites da SiteCollection, de forma hierárquica.

Leia também: