Flickr Images

Pages

Banner 468

terça-feira, 19 de julho de 2011

Criação de Listas Programaticamente

1 comentários
 
Olá para todos!!! Uma das necessidades que ocorre durante o desenvolvimento de alguma feature é a utilização de listas customizadas. Para não deixar a criação dessas listas para o usuário gosto de criar as listas que preciso programaticamente. O visual studio 2010 tem um tipo de projeto especial para a criação de listas, mas não irei trabalhar com esse tipo de projeto neste exemplo. Aqui vamos criar uma lista via código mesmo. O objetivo é demonstrar que é realmente fácil criar uma lista via código. Então vamos lá:
Para esse projeto criei um console application. Adicionei a referência da Dll Microsoft.SharePoint.dll. Como sabemos o Sharepoint 2010 trabalha na plataforma 64 bits logo temos que alterar nossa aplicação para que também rode em 64 bits. Acesse as propriedades do projeto e altere a seguinte configuração:

Feito isso salve e vamos a codificação:


   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using Microsoft.SharePoint;
   6:   
   7:  namespace Sharepoint.CriacaoListas
   8:  {
   9:      class Program
  10:      {
  11:          static void Main(string[] args)
  12:          {
  13:              using (SPSite oSite = new SPSite("http://intranet.contoso.com/"))
  14:              {
  15:                  using (SPWeb oWeb = oSite.OpenWeb())
  16:                  {
  17:                      string nomeLista = "Ramais Empresa";
  18:                      SPList oList = oWeb.Lists.TryGetList(nomeLista);
  19:                      if (oList == null)
  20:                      {
  21:                          CriaListaRamaisEmpresa(oWeb);
  22:                      }                    
  23:                  }
  24:              }
  25:          }
  26:   
  27:          private static void CriaListaRamaisEmpresa(SPWeb oWeb)
  28:          {
  29:              //Seguindo as boas práticas colocamos a lista sem espaços ou caracteres especiais.
  30:              Guid idLista = oWeb.Lists.Add("Ramais_Empresa", "Lista com os ramais da empresa", SPListTemplateType.GenericList);
  31:              SPList oList = oWeb.Lists[idLista];
  32:              
  33:              //Colocando o nome amigável para o usuário
  34:              oList.Title = "Ramais Empresa";
  35:   
  36:              //Informo que não quero que a lista apareça na barra de inicio rápido do site.
  37:              oList.OnQuickLaunch = false;
  38:              
  39:              //Atualizo a lista
  40:              oList.Update();
  41:              
  42:              //Atualizando o campo titulo
  43:              SPField oField = oList.Fields[SPBuiltInFieldId.Title];
  44:              oField.Title = "Funcionário";
  45:              oField.Update();
  46:              
  47:              //Adiciono os campos a lista
  48:              //Campo setor do tipo escolha e obrigatório.
  49:              oList.Fields.Add("Setor", SPFieldType.Choice, true);
  50:              SPFieldChoice oChoiceField = (SPFieldChoice)oList.Fields["Setor"];
  51:              oChoiceField.Choices.Add("Financeiro");
  52:              oChoiceField.Choices.Add("Administrativo");
  53:              oChoiceField.Choices.Add("TI");
  54:              oChoiceField.Choices.Add("Recursos Humanos");
  55:              oChoiceField.Description = "Informe o setor do funcionário.";
  56:              oChoiceField.Update();
  57:   
  58:              //Campo unidade
  59:              oList.Fields.Add("Unidade", SPFieldType.Choice, true);
  60:              oChoiceField = (SPFieldChoice)oList.Fields["Unidade"];
  61:              oChoiceField.Choices.Add("Matriz - Belo Horizonte");
  62:              oChoiceField.Choices.Add("Filial - São Paulo");
  63:              oChoiceField.Choices.Add("Filial - Rio de Janeiro");
  64:              oChoiceField.DefaultValue = "Matriz - Belo Horizonte";
  65:              oChoiceField.Description = "Informe qual a unidade do funcionário.";
  66:              oChoiceField.Update();
  67:   
  68:              //Campo Observação
  69:              oList.Fields.Add("Observacao", SPFieldType.Note, false);
  70:              SPFieldMultiLineText oMultilineField = (SPFieldMultiLineText)oList.Fields["Observacao"];
  71:              
  72:              oMultilineField.Title = "Observação";
  73:              
  74:              //Informo que o campo deve aceitar tags Html.
  75:              oMultilineField.RichText = true;
  76:              
  77:              //Informo que ele apenas pode utilizar algumas tags html simples como negrito, itálico e alinhamento.
  78:              oMultilineField.RichTextMode = SPRichTextMode.Compatible;
  79:              oMultilineField.Update();
  80:   
  81:              //Atualiza a view default para exibir os novos campos criados.
  82:              SPView oView = oList.DefaultView;
  83:              oView.ViewFields.Add("Setor");
  84:              oView.ViewFields.Add("Unidade");
  85:              oView.ViewFields.Add("Observacao");
  86:              oView.Update();
  87:          }
  88:      }
  89:  }


Creio que o código esta bem comentado mas mesmo assim vamos a alguns pontos:

Linhas 13 e 15:

É uma ótima prática utilizar o using em objetos SPSite e SPWeb pois eles utilizam muita memoria do servidor. Logo quanto mais rápido vocês liberarem esses objetos da memoria melhor. Em um outro post falo mais sobre a importância de dar o dispose nesses objetos.

Linha 18:

Uma coisa muito boa do sharepoint 2010: agora o objeto SPListCollection possui um método TryGetList. Nas versões Wss 3.0 e MOSS 2007 isso não existia. Para contornar esse problema nas versões antigas criavamos alguns extension methods (Novidade a partir do framework 3.0).

Linha 69:

O campo “Observação” é criado sem caracteres especiais e logo na linha 72 é atualizado para o nome correto. Nas imagens abaixo poderemos ver o motivo.
E o resultado desse código:


A lista "Ramais Empresa" criada já se encontra no site. Observe que como setamos a propriedade OnQuickLaunch da lista para false ela não aparece na barra de inicio rápido do site.


Como podemos ver no detalhe da url o campo tem o InternalName como "Observacao" enquanto o DisplayName é "Observação". Mais uma boa prática aplicada.


Observe que a url da lista ficou como Ramais_Empresa sem os caracteres especiais que tanto incomodam.


O Cadastro de novos itens com os campos dropdown.


Item já cadastrado.


Ainda podemos melhorar esse código fazendo os campos de "Setor" e "Unidade" buscarem de outras listas.
Bom é isso qualquer dúvida basta postar!!!

One Response so far.

  1. Faltou um Refactoring no fim do código mas tudo bem...

Leave a Reply

O que achou? Alguma coisa esta errada? Quem sabe uma sugestão? Faça seu comentário e/ou crítica logo abaixo!