sábado, 26 de junho de 2010

Tour SP - Consultando listas utilizando filtros

Como primeiro post do nosso tour pelo SharePoint, vou apresentar uma maneira prática de obter itens de uma lista no SP aplicando uma query na consulta.
O cenário é o seguinte, temos uma lista que funciona como um glossário, onde os principais termos e siglas de uma organização são armazenados. Essa lista de nome "Glossário" possui dois campos, "Título" e "Descrição". A idéia é criar um método de busca nessa lista para que passado um termo específico, sejam carregados todos os itens relacionados da lista em uma grid.
Segue o código:
private void makeSearch(String term)
{
    using (SPSite site = new SPSite("http://meuSite:1234/"))
{
        SPWeb web = site.OpenWeb();

        SPList listCol = web.Lists["Glossário"];

        SPQuery query = new SPQuery();
query.Query = "<OrderBy><FieldRef Name='Title' /></OrderBy>" +
                "<Where><Contains><FieldRef Name='Title' />" +
                "<Value Type=\"Text\">" + term + "</Value></Contains></Where>";
        SPListItemCollection itemsCol = listCol.GetItems(query);

            
        DataTable t = this.MakeTable(new String[] { "Título", "Descrição" },
new Type[] { typeof(string), typeof(string) });

        foreach (SPListItem item in itemsCol)
{
            string titulo = item["Título"].ToString();
            string descrição = item["Descrição"].ToString();

t.Rows.Add(new object[] { titulo, descrição });
}

gvSearch.DataSource = t;
gvSearch.DataBind();
}
}

private DataTable makeTable(String[] titles, Type[] types) 
{
DataTable table = new DataTable();

DataColumn[] dataColumns = new DataColumn[titles.Length];

for (int i = 0; i < titles.Length; i++)
{
dataColumns[i] = new DataColumn(titles[i], types[i]);
}

table.Columns.AddRange(dataColumns);

return table;
}



Aqui é instacianda a referência para o portal no qual está nossa lista

using (SPSite site = new SPSite("http://meuSite:1234/"))

Instanciamos o site que possui a lista

SPWeb web = site.OpenWeb();

Uma maneira bastante prática de se obter uma referência para uma lista é passando seu nome como index na coleção de listas do site

SPList listCol = web.Lists["Glossário"];

Este é o ponto chave do exemplo,

Primeiro instaciamos um objeto do tipo SPQuery no qual possui as propriedades necessárias para execução do nosso filtro.

Na propriedade Query nós setamos o filtro, que é construído de acordo com uma CAML(Collaborative Application Markup Language) que possui uma sintaxe própria que pode ser melhor estudada no site do msdn. No nosso filtro nós estamos ordenando a listagem pelo título (tag <OrderBy>) e filtrando (tag <Where>) por todos itens que contiverem o termo passado (tag <Contains>).

Após definido nosso objeto de consulta “query”, ele é utilizado pelo metodo GetItems() e  o rertorno é dado de acordo com o seu filtro.
SPQuery query = new SPQuery();
query.Query = "<OrderBy><FieldRef Name='Título' /></OrderBy>" +
              "<Where><Contains><FieldRef Name='Título' />" +
"<Value Type=\"Text\">" + term + "</Value></Contains></Where>";
SPListItemCollection itemsCol = listCol.GetItems(query);


Bem, executada a consulta, o que nos resta é preencher a grid com os valores.Criei um método para criar uma tabela (makeTable()) e após adicionar as linhas com os itens da lista, carrego a tabela na grid.Percebam que da mesma forma que selecionamos a lista indexando-a pelo nome na coleção de listas do site,nós também o fazemos com o item de uma lista para obter um campo específico, no nosso caso o Título e a Descrição.Após a montagem da tabela, ela é setada no grid e nossa tarefa está completa.
 
DataTable t = this.MakeTable(new String[] { "Título", "Descrição" },
new Type[] { typeof(string), typeof(string) });

foreach (SPListItem item in itemsCol)
{
    string titulo = item["Título"].ToString();
    string descrição = item["Descrição"].ToString();

t.Rows.Add(new object[] { titulo, descrição });
}

gvSearch.DataSource = t;
gvSearch.DataBind();



A utilização da classe SPQuery é bastante útil para manipulação de itens de uma lista, mas não se limita apenas a uma, podendo executar consultas a items de mais de uma lista.

Bem, esse foi o primeiro post do nosso tour pelo SharePoint, ainda temos muitos temas para abordar e em breve estarei postando por aqui. Bons estudos a todos, um forte abraço!

sexta-feira, 25 de junho de 2010

Tour pelo SharePoint - Vamos programar!

Boa madruga pessoal, passei um bom tempo sem postar mas finalmente arrumei um tempinho livre!

Após ministrar alguns treinamentos na tecnologia, percebi que pra quem está começando é muito bom quando se tem um roteiro bem definido e de preferência em um único lugar. Fica complicado quando construir o conhecimento é igual a montar um frankenstein onde  uma "perna" é um conceito que está em um fórum e um "braço" é outro conceito que está em um blog... e por ai vai. Claro que isso não é inédito, se procurarmos bem encontramos importantes contribuições do pessoal pela net a fora. A idéia é somar a essas contribuições e quando alguém der um search, ter mais uma opção, o que é sempre bom!

Então a proposta é a seguinte, vou montar um roteiro com alguns conceitos gerais e extremamente necessários pra quem está começando a desenvolver com SharePoint. Com esse nosso tour pelo SP, teremos  uma base legal pra desenvolver muita coisa e em posts futuros aumentamos a dificuldade! =D

Nosso itinerário vai ser dividido em alguns posts, onde eles abordarão:

  • Gerenciamento de listas e documentos
  • Web Parts
  • Eventos
  • Gerenciamento de usuários
  • Web Services
  • Workflows
Com essa programação já da pra fazer muita coisa com SP. Então é isso aí, objetivo definido, agora é só cumprir! Bons estudos galera!

Abraço forte!

domingo, 2 de maio de 2010

Treinamento SharePoint 2007 - Microsoft Bahia

Boa pessoal!
Estou de volta a Recife depois de uma semana muito bacana em Salvador ministrando um treinamento DEV SharePoint 2007 la na Microsoft Bahia.

Foi um training focado no desenvolvimento de aplicações com a API do SharePoint 2007. Participaram empresas que usam tecnologia como atividade meio e outras que a tem como atividade fim.

Durante as aulas muito material foi criado e vou estar disponibilizando aqui em breve!

Discutimos temas como:
  • Manipulação de Listas e Bibliotecas em codigo
  • Criação de Web Parts like SharePoint
  • Eventos
  • WorkFlows

Por hora (só pra dar o gostinho) segue algumas fotos do training!