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.
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”.
2º Passo – Criando a solution.
Crie seu projeto do Sharepoint utilizando o template “Empty Sharepoint Project”.
Informe a URL do seu portal e marque a solution como “Sandboxed Solution”
Uma estrutura de pastas como a imagem abaixo deve ser criada:
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”.
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.
A estrutura de seu projeto deverá se parecer com a estrutura apresentada na imagem abaixo.
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”.
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”.
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:
… a visualização principal deve parecer-se com a seguinte visualização:
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.
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.
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.
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
pawn shops phoenix bancless
Automatizando o processo de deploy no Microsoft Sharepoint por meio de features. | Fernando Henrique Ferreira
personal finance articles for students
Automatizando o processo de deploy no Microsoft Sharepoint por meio de features. | Fernando Henrique Ferreira
personal finance articles on insurance
Automatizando o processo de deploy no Microsoft Sharepoint por meio de features. | Fernando Henrique Ferreira
personal finance blogs for college students
Automatizando o processo de deploy no Microsoft Sharepoint por meio de features. | Fernando Henrique Ferreira
personal finance company online application
Automatizando o processo de deploy no Microsoft Sharepoint por meio de features. | Fernando Henrique Ferreira
payday loans stores near me
Automatizando o processo de deploy no Microsoft Sharepoint por meio de features. | Fernando Henrique Ferreira
payday loans near me uk
Automatizando o processo de deploy no Microsoft Sharepoint por meio de features. | Fernando Henrique Ferreira