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
. 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:
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: }
É 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.
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).
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.
A lista "Ramais Empresa" criada já se encontra no site. Observe que como setamos a propriedade
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.
Ainda podemos melhorar esse código fazendo os campos de "Setor" e "Unidade" buscarem de outras listas.