Automatizando o processo de deploy no Microsoft Sharepoint por meio de features.

O Microsoft Sharepoint é uma excelente plataforma. Ele nos provê diferentes recursos que facilitam nosso trabalho e agregam valor ao modo ao modo como gerenciamos conteúdo. Muitas vezes temos de encarar customizações de seus recursos e este tipo de customização pode depender de recursos providos pelo Visual Studio. Para tanto, existem soluções de empacotamento que facilitam o deploy de nossas customizações.

Tais empacotamentos, chamados de “features”, reduzem a complexidade envolvida no processo de criação de customizações. As features são perfeitas para facilitar o processo de ativação e desativação de funcionalidades.

clip_image002

Neste post demonstrarei como criar features que automatizam algumas tarefas que comumente fazemos no Sharepoint, além de encapsular nossas customizações, tornando o controle de nossos recursos customizados muito mais simples.

Neste exercício demonstrarei: criação de uma feature, criação de uma List Definition, uso de Feature Receivers, uso de Event Receivers, criação automática de itens e exclusão automática de listas.

Obs.: para este exemplo utilizei o Visual Studio 2010 com o Microsoft Sharepoint 2010.

1º Passo – Fazer o start up da feature “Microsoft SharePoint Foundation Sandboxed Code Service”.

Sempre que fazemos o deploy de uma solution sem a feature “Microsoft SharePoint Foundation Sandboxed Code Service” ativada surge para nós a exception: “Cannot start service SPUserCodeV4 on computer (…)”. Então, como pré-requisito para o deploy (e uso de solutions feitas pelo Visual Studio no Sharepoint) é preciso ativar essa feature. Acesse o Central Administration do seu portal, clique em “Manager services on server” e ative a feature “Microsoft SharePoint Foundation Sandboxed Code Service”.

clip_image004
clip_image006
clip_image008

2º Passo – Criando a solution.

Crie seu projeto do Sharepoint utilizando o template “Empty Sharepoint Project”.

clip_image010

Informe a URL do seu portal e marque a solution como “Sandboxed Solution”

clip_image012

Uma estrutura de pastas como a imagem abaixo deve ser criada:

clip_image014

3º Passo – Criando uma lista automaticamente.

Clique com o botão direito sobre o seu projeto e adicione um novo item. Este novo item deve ser criado a partir de um List Definition. Atribua um nome a este List Definition e clique em “Add”.

clip_image016

Logo depois de criar seu List Definition uma janela surgirá, perguntando sobre qual tipo de lista deverá ser criada. Escolha a opção “Custom List” para criação de nossa lista. Deixe a opção “Add a list instance for the list definition” marcada, como na imagem abaixo.

clip_image018

A estrutura de seu projeto deverá se parecer com a estrutura apresentada na imagem abaixo.

clip_image020

No arquivo “Elements.xml” (da List Instance criada) defina a URL e o título da lista que será criada automaticamente. Veja o exemplo abaixo, criei uma lista com o título “Songs” e URL “Lists/Songs”.

clip_image022

Abra o arquivo “Schema.xml” para adição de novas colunas. Procure pelas tag “<Fields>”. Adicione as colunas “Artist”, “Album”, “Year”, “Style” e “Description” como no código abaixo:

<Fields>
    <Field Name="Artist" DisplayName="Artist" Type="Text" Required="TRUE"/>
    <Field Name="Album" DisplayName="Album" Type="Text" Required="TRUE"/>
    <Field Name="Year" DisplayName="Year" Type="Number" Required="TRUE"/>
    <Field Name="Style" DisplayName="Style" Type="Choice" Required="TRUE">
        <CHOICES>
            <CHOICE>Rock</CHOICE>
            <CHOICE>MPB</CHOICE>
            <CHOICE>Samba</CHOICE>
            <CHOICE>Axé</CHOICE>
        </CHOICES>
    </Field>
    <Field Name="Description" DisplayName="Description" Type="Note"/>
</Fields>

Para adicionar novos arquivos na visualização principal da lista é preciso procurar no arquivo “Schema.xml” a tag “<Views>”. Observe que existem duas tags, a primeira contém o atributo “MovieView” como TRUE, está é a visualização para dispositivos móveis, neste instante ela não é importante. A segunda View configura contém o atributo “BaseViewId” valendo “1”, é com esta View que devemos trabalhar. Dentro da tag “<ViewFields>” adicione os campos que deseja exibir na visualização principal, como no exemplo abaixo:

<ViewFields>
    <FieldRef Name="Attachments"></FieldRef>
    <FieldRef Name="LinkTitle"></FieldRef>
    <FieldRef Name="Artist"></FieldRef>
    <FieldRef Name="Album"></FieldRef>
    <FieldRef Name="Year"></FieldRef>
    <FieldRef Name="Style"></FieldRef>
</ViewFields>

Agora, depois de todas essas customizações, faremos o deploy da solution. Clique com o botão direito do mouse sobre o projeto, clique em “Package” e após o processamento clique em “Deploy”.

clip_image024

O resultado deste deploy será a construção de uma lista chamada “Songs”, com o formulário de adição de novos itens igual ao da imagem abaixo:

clip_image026

… a visualização principal deve parecer-se com a seguinte visualização:

clip_image028

4º Passo – Adicionar eventos customizados ao deploy da feature do Sharepoint

O Microsoft Sharepoint nos permite adicionar ações customizadas ao comportamento de uma Feature. Podemos utilizar Features Receivers para interceptação de eventos pré e pós-instalação e ativação das features.

Para criar esse tipo de customização clique com o botão direito sobre a Feature e clique na opção “Add Event Receiver”. Remova os comentários do código do método “FeatureActivated” e adicione o código apresentado abaixo:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    // Acesso ao site onde a feature foi ativada
    SPWeb objWeb = properties.Feature.Parent as SPWeb;

    // Identificação da lista Songs
    SPList listSongs = objWeb.Lists.TryGetList("Songs");

    // Verifica se a lista realmente existe no site
    if (listSongs != null)
    {
        // Criação de um novo item na lista Songs
        SPListItem newItem = listSongs.AddItem();

        // Atribuição de valores ao novo item criado
        newItem["Title"] = "Cold Fire";
        newItem["Artist"] = "Rush";

        // Salva as alterações no item da lista
        newItem.Update();
    }
}

O código acima simplesmente adicionará um novo registro na lista “Songs” sempre que a feature for ativada. Agora, vamos remover os comentários do evento “FeatureDeactivating” e adicionar o bloco de código abaixo. Este bloco fará a exclusão da lista “Songs” sempre que a feature for desativada.

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
    // Acesso ao site onde a feature foi ativada
    SPWeb objWeb = properties.Feature.Parent as SPWeb;
    // Identificação da lista Songs
    SPList listSongs = objWeb.Lists.TryGetList("Songs");
    // Verifica se a lista realmente existe no site
    if (listSongs != null) {
        // Executa a exclusão da lista Songs
        listSongs.Delete();
    }
}

5º Passo – Adicionar um event receiver a lista criada.

Em nossas features podemos adicionar Event Receivers em nossas listas customizadas, permitindo a adição de novos comportamentos em ações realizadas por nossas listas.

Para criar um novo Event Receiver clique com o botão direito sobre o projeto e adicione um novo Event Receiver.

clip_image030

Após criarmos este item, o Visual Studio fará uma varredura em nosso site do Sharepoint em busca de listas que possam fazer uso deste Event Receiver. Neste caso, faremos a seleção de um Event Receiver do tipo “List Item Events”, que fará a intercepção dos eventos gerados por itens de nossas listas. Também faremos a seleção do List Definition que criamos em nosso exemplo como hospedeiro deste Event Receiver. E por último, selecione os eventos que devem ser interceptados pelo Event Receiver. Neste exemplo interceptaremos apenas o evento “An item was added”, que é acionado após um item ser adicionado à lista. Veja a imagem abaixo, ela demonstra a configuração do Event Receiver para o nosso exemplo.

clip_image032

Vamos adicionar ao evento “ItemAdded” um pequeno trecho de código para demonstrar como o Event Receiver funciona. O código abaixo atualizará o conteúdo do campo “Description” com uma mensagem, demonstrando que o Event Receiver interceptou o evento e atualizou o valor de um dos campos do item adicionado.

public override void ItemAdded(SPItemEventProperties properties)
{
    // Identifica o item que foi adicionado.
    SPListItem itemAdded = properties.ListItem;

    string description = itemAdded["Description"].ToString();

    itemAdded["Description"] = description + " - Event receiver passou por aqui!";
    itemAdded.Update();

    base.ItemAdded(properties);
}

Outro detalhe importante: para associar o Event Receiver com a lista eu costumo abrir o arquivo “Elements.xml” do Event Receiver e substituir o atributo “ListTemplateId” pelo atributo “ListUrl”, informando a URL da lista que o Event Receiver estará associado. Veja o exemplo abaixo:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <Receivers ListUrl="Lists/Songs">
        <Receiver>
            <Name>EventReceiverSongsItemAdded</Name>
            <Type>ItemAdded</Type>
            <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
            <Class>SpProjectBlog.EventReceiverSongs.EventReceiverSongs</Class>
            <SequenceNumber>10000</SequenceNumber>
        </Receiver>
    </Receivers>
</Elements>
 

Depois de feito o deploy acesse a lista criada e insira um novo item, o Event Receiver interceptará o evento e fará a atualização do campo.

clip_image033

Por

MSc. Fernando Henrique Inocêncio Borba Ferreira

Microsoft Most Valuable Professional – Visual C#

Referências:

http://msdn.microsoft.com/en-us/library/ee231541.aspx

http://visualstudiomagazine.com/articles/2011/07/19/wcnet_deploy-sharepoint-lists-in-vs2010.aspx

http://2.bp.blogspot.com/-WUHNXEBsN3I/T4GXYLlmNQI/AAAAAAAAA7c/Y_7XWvVtMV0/s1600/SPUserCodeV4_2.png

http://devendra-sharepoint.blogspot.com.br/2012/01/creating-list-programatically-in_30.html

http://msdn.microsoft.com/en-us/library/ms437580.aspx

http://bramnuyts.be/2011/04/01/add-an-event-receiver-to-a-specific-list-programmatically/

http://msdn.microsoft.com/en-us/library/ms460318(v=office.14).aspx

Publicidade

7 comentários sobre “Automatizando o processo de deploy no Microsoft Sharepoint por meio de features.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.