Explorando o Modelo de Objetos do Windows SharePoint Services – Parte II

SPList

Uma das funcionalidades mais interessantes do SharePoint é a WebPart. Uma WebPart nada mais é do que uma classe que implementa uma interface Web a ser renderizada dentro de um determinado espaço (zona) de uma página. Isso nos permite termos várias aplicações rodando em um mesmo Site do nosso Portal, como se fossem várias janelas de um desktop. Essa é uma funcionalidade tão interessante que no .NET 2.0 nós temos a WebPart disponível em nossos projetos Web, independente do SharePoint.

Dentro do SharePoint, as WebParts mais utilizadas são aquelas que implementam as Listas, como por exemplo: Document Library, Picture Library, Events, Surveys, etc. Veja na Figura 3 um exemplo de duas Listas (Bilbioteca de Documentos e Biblioteca de Imagens), expostas em duas WebParts em um Site de Vendas.

 

 

Figura 3. Exemplos de duas Listas do SharePoint: Biblioteca de Documentos e Biblioteca de Imagens

A maioria das informações armazenadas em um portal está dentro de listas, e é através delas que poderemos recuperar essas informações. Para entendermos o conceito de Lista no SharePoint, basta fazermos uma analogia com uma tabela de um banco de dados. Uma Lista, assim como uma tabela, possuí uma estrutura de campos (colunas). E assim como uma tabela é preenchida com registros, uma Lista é preenchida com itens. No exemplo da figura 3, temos uma Biblioteca de Imagens que possuí dois itens, no caso duas figuras. Observe que esta lista possuí as colunas Nome e Tamanho. Estes são campos pertinentes a uma lista do tipo biblioteca de imagens, e podem ser customizados pelos usuários do portal.

 

A classe SPWeb possuí uma collection chamada Lists. Nesta coleção iremos encontrar todas as Listas do Site. Uma Lista é representada em nosso modelo de objetos pela classe SPList. A Listagem 4 nos mostra um exemplo de como buscar as Listas de um Site. A classe SPList nos disponibiliza diversas informações a respeito da Lista. Das mais importantes vale a pena citar a collection Fields, onde podemos encontrar toda a estrutura de colunas de uma Lista, inclusive as customizações que são feitas no Portal.

 

Listagem 4. Recuperando as Listas de um Site

SPSite SiteCollection = new SPSite("http://taunet");

SPWeb Site = SiteCollection.OpenWeb();

 

foreach( SPList List in Site.Lists )

{

       Console.WriteLine("List:" + List.Title);

}

Recuperando e Incluindo Itens em uma Lista

Toda Lista é composta por itens. As principais diferenças entre os tipos de listas existentes são as colunas que cada tipo de lista tem. A classe SPList possuí uma collection chamada Items onde podemos recuperar todos os itens da mesma. Algumas listas têm um arquivo vinculado ao Item, são os casos das Document Libraries e Picture Libraries. A classe que representa um item de uma Lista é a SPListItem, e a classe que representa um arquivo de um Item é a SPFile.

 

O SharePoint armazena todas as informações contidas no Portal em um database no SQLServer, inclusive os itens e arquivos inclusos nas listas. Os arquivos são armazenados em campos do tipo BLOB no SQL Server, esta é um das características principais dos Portais SharePoint. Toda informação não estruturada de uma empresa, encontrada em arquivos convencionalmente gravados em File System, no Portal devem ser armazenadas em um database através de uma Lista SharePoint. Isso garante funcionalidades como: Lock para alteração de arquivo, versionamento, alertas de modificação, informações agregadas ao arquivo, entre outras.

 

No exemplo a seguir vamos demonstrar como recuperar um arquivo que está em uma lista do Portal, e salvar este arquivo em um diretório do File System. O processo de recuperação do arquivo de uma lista, consiste em recriá-lo em FileSystem através da sua representação binária. Essa representação binária pode ser recuperada do SharePoint utilizando o modelo de objetos. A Listagem 5 nos mostra como este procedimento pode ser implementado.

 

Listagem 5. Recuperando Arquivos de uma Lista

SPSite SiteCollection = new SPSite("http://taunet");

SPWeb Site = SiteCollection.OpenWeb();

SPList List = Site.Lists["Document Library"];

 

string path = "C:\\ListFiles\\";

foreach( SPListItem Item in List.Items )

{

       string NomeArq = path + Item.File.Name;

       FileStream fstream = new FileStream( NomeArq, FileMode.Create );

       byte[] binFile = Item.File.OpenBinary();

       fstream.Write( binFile, 0, binFile.Lenght );

       fstream.Close();

}

 

O método OpenBinary() da classe SPFile recupera em uma array de bytes, a representação binária do arquivo, assim como ele é salvo no SQLServer.Utilizando um objeto da classe FileStream podemos criar o arquivo, independente do seu tipo (Word, Excel, bitmap, txt, etc). Observe que temos a string NomeArq onde armazenamos o caminho completo onde iremos gravar o arquivo no FileSystem. Para utilizarmos a classe FileStream precisamos incluir uma referencia ao namespace System.IO.

 

Assim como podemos recuperar um arquivo de uma Lista, podemos incluir um novo arquivo na lista através do modelo de objetos. Este processo pode ser bastante útil na implementação de rotinas para incluir grandes quantidades de arquivos nas listas. O processo é basicamente o inverso do que vimos na listagem anterior. Veja na Listagem 6 um exemplo de como fazer.

 

Listagem 6. Incluindo um arquivo em uma lista

SPSite SiteCollection = new SPSite("http://taunet");

SPWeb Site = SiteCollection.OpenWeb();

SPList List = Site.Lists["Document Library"];

 

string path = "C:\\ListFiles\\proposta.doc";

FileStream fstream = new FileStream( path, FileMode.Open );

byte[] binFile = new byte[(int)fstream.Lenght]

fstream.Read( binFile, 0, (int)fstream.Lenght);

List.RootFolder.Files.Add("proposta.doc", binFile);

fstream.Close();

Conclusão

Em linhas gerais pudemos explorar as principais classes do modelo de objetos do WSS. Através delas conseguimos varrer toda a estrutura de sites de um Portal SharePoint, até a recuperação de um arquivo armazenado em uma Lista. Estes foram exemplos simples que servem apenas para entendermos a dinâmica e estrutura do modelo de objetos. O modelo é bem extenso e completo, mas com estes conceitos básicos é possível explorar as opções mais avançadas desta estrutura.

Leia também