Biblioteca de WebParts – dotDEV
Depois de mais uns tempos conturbados eis-me aqui novamente atualizando o blog. E mais uma vez com notÃcias boas também.
Além de estar preparando um post sobre como usar LINQ para buscar e trabalhar as informações do SharePoint eu estou planejando também uma área onde armazenarei algumas WebParts que já tive situações em que tive que desenvolve-las e outras WP que surgiram na minha cabeça numa ou outra hora qualquer.
Só preciso organizá-las, gerar os pacotes de instalação para disponibiliza-las aqui no site. Ainda dando continuidade à idéia de difundir mais o SharePoint, principalmente detalhes técnicos, estas WebParts ficarão disponÃveis para download.
De qualquer forma estou a disposição caso queiram se adiantar antes dessa seção nova. Basta entrar em contato comigo pelo email filipe.cavalcante@dotdev.com.br ou filipe.cavalcante@gmail.com!
Aguardem mais atualizações!
Estamos de volta… e com novidades.
Olá pessoal,
Faz um bom tempo que não mexia no meu blog. Eu havia migrado para este novo servidor, mas depois por um vacilo meu acabei apagando-o involuntariamente e depois fiquei com preguiça de reconfigurar, restaurar tudo de novo...
Mas enfim... o importante é que agora estamos de volta e com novidades.
Todos ja sabem que o Sharepoint 2010 está chegando né? Pois bem, algumas das pessoas que trabalham comigo foram na conferência em Las Vegas sobre o Sharepoint 2010 e em breve pretendo fazer alguns comentários sobre as novidades da nova versão.
Mas enquanto isso, vou deixar aqui um exemplo de código simples para fazer upload de documento para uma biblioteca de documentos do sharepoint com metadados
public static bool UploadDocumento(SPWeb web, string docLib, Documento documento, ParametrosList parametros, bool overwrite)
{
try
{
Hashtable docProperties = new Hashtable();
// Metadados
foreach (Parametros var in parametros)
{
docProperties[var.Parametro] = var.Valor;
}
SPFolder folder = web.Folders[docLib];
SPFile file = folder.Files.Add(documento.Nome, documento.FileBytes, docProperties ,overwrite);
return true;
}
catch
{ return false; }
}
Bem simples.
Nesse método existem dois objetos que eu criei na mão para auxiliar na passagem dos parametros para este método. O objeto 'Documento" basicamente carrega as informações vindas do componente FileUpload, e o objeto "ParametroList" é uma lista de parametros genérico que utilizo para o sistema todo, e conterão as informações dos metadados e seus respectivos valores.
Nesse exemplo não fiz tratamento de erro, simplesmente e retorna um BOOLEANO indicando se foi feito o upload corretamente na biblioteca de documento ou não.
Abraços
Usando SPAlert
Mais um post com dica de Sharepoint. Esses dias precisei usar a função "Alert me" em umas listas mas precisei implementar via código. A função é muito simples e usei o próprio SPAlert nativo do Sharepoint (Microsoft.Sharepoint.dll).
Para isso, eu criei um método que retorna um valor booleano quando criar ou não (por algum motivo) o alerta.
public bool AlertME(string urlSITE, string TituloAlerta, SPListItem itemAlerta)
{
try
{
using (SPSite site = new SPSite(urlSITE))
{
SPWeb web = site.OpenWeb();
SPUser userLogged = web.SiteUsers.GetByID(SPContext.Current.Web.CurrentUser.ID);
SPAlert _alert = userLogged.Alerts.Add();
_alert.AlertType = SPAlertType.Item;
_alert.AlertFrequency = SPAlertFrequency.Immediate;
_alert.EventType = SPEventType.All;
_alert.AlwaysNotify = true;
_alert.Title = TituloAlerta;
_alert.Item = itemAlerta;
_alert.Update(true);
return true;
}
}
catch
{
return false;
}
}
A função é simples. Quando clicar em um botão que eu criei, esse método será acionado tendo como parametro uma string com o endereço do site onde o alerta será criado, uma string com o tÃtulo do alerta e um SPListItem que é o item que será "alertado".
O que eu defini para meu alerta:
SPAlertType.Item = significa que o alerta está associado à um item;
SPAlertFrequency.Immediate = significa que o alerta será enviado imediatamente assim que o item da lista for alterado e salvo;
SPEventType.All = o alerta será enviado para qualquer ação que seja feita no item da lista;
Aguardem mais dicas!
EDIT: Segue link de referência Microsoft.Sharepoint.SPAlert Class
Discussion Board customizado via Web Part
IPra uma pessoa que nunca viu Sharepoint e trabalha a pouco mais de 2 meses com isso até que estou aprendendo bem... claro também se não fosse o auxilio que venho tendo lá na empresa. Esses dias eu tive que fazer uma customização no fórum de discussão que tem no projeto do cliente.
É, o layout é personalizado, e com isso algumas áreas padrões do sharepoint, como o conteúdo de criação de novo post ou resposta à um tópico, ficaram fora de contexto, com tamanhos desproporcionais que "estragavam" o layout do site. Por isso então que tivemos que personalizá-lo. Mas aà veio a pergunta... se o fórum é um componente padrão do sharepoint e funciona "internamente", como eu poderia fazer para criar um item novo na lista? Bom, a resposta até que viria rápida... mas depois me compliquei.
Simplesmente abri a lista numa webpart em C# e depois fiz um método para salvar os campos assunto e mensagem nas colunas relacionadas. Porém a sequencia que foi mais chata de entender.
"Como eu vou fazer para salvar as respostas se não há colunas respostas?"
Sorte que a Microsoft também pensou nisso. E mais uma vez, na referencia Microsoft.Sharepoint.dll existe a solução.
Existem dois métodos chamados CreateNewDiscussion() e CreateNewDiscussionReply(). Haaaa assim ficou fácil. hehe
Segue o trecho do código dos métodos que cria e depois responde o post.
protected void CriarNovoPost()
{
           SPWeb web = SPControl.GetContextWeb(this.Context);
           try
           {
                     SPList lstForum = web.GetList(web.Url + "/Lists/Forum/");
                     SPListItem post = SPUtility.CreateNewDiscussion(lstForum.Items, this.txtAssunto.Text);
                     post[SPBuiltInFieldId.Body] = this.txtMensagem.Text;
                    post.Update();
                   newPost = true;
           }
          catch (Exception ex)
          {
                   newPost = false;
                   throw ex;
           }
}
E abaixo o método que cria a resposta no post. Utilizando também o método da referencia do Sharepoint.
protected void ResponderPergunta(SPListItem _parentListItem){
           SPListItem reply = SPUtility.CreateNewDiscussionReply(_parentListItem);
           reply[SPBuiltInFieldId.Body] = this.txtMensagem.Text;
           reply.Update();Â
            boolReply = true;
}
 Â
Espero que ajude quem mais possa precisar!
Web Part de uma Image Library – Sharepoint
Eu comecei recentemente a trabalhar também com Microsoft Sharepoint (pra quem não conhece vale a pena dar uma olhada no site da Microsoft pra conhecer), e como com todas as ferramentas que não conheço, sempre apanho no começo pra conseguir fazer alguma coisa funcionar.
Uma das caracterÃsticas bem interessantes do Sharepoint, é que você pode desenvolver as chamadas "web parts" no visual studio e integrá-lo ao seu site. É nisso basicamente que estou trabalhando atualmente, além de ter entrado no mundo dos programadores .NET C# eu também entrei para o mundo dos "Sharepointer's".
Bom, vou então ao que interessa. Como disse, apanhei pra caramba pra desenvolver uma web part onde eu tenho uma biblioteca de imagens e eu precisaria personalizar de uma forma, que as opções do Sharepoint não me davam, numa área pequena da página. Então eu fiz uma busca imensa pela internet sobre algum site que desse uma sugestão de como fazer isso... finalmente depois de tanto suor achei em um outro blog (Share the Learning) algumas dicas relacionadas. Então resolvi mandar um email para eles sobre minha dúvida. Gary Payne me respondeu sugerindo a classe SPPictureLibrary
Show de bola, o método da web part que desenvolvi ficou assim:
protected void ListarImagens()
{
try
{
using (SPSite spSITE = new SPSite(this.Page.Request.Url.ToString()))
{
SPWeb spWEB = spSITE.OpenWeb();
SPPictureLibrary ImageLibrary = (SPPictureLibrary)spWEB.Lists["Bottons"];
SPQuery spQUERY = new SPQuery();
spQUERY.Query = "";
SPListItemCollection lstIMAGE = ImageLibrary.GetItems(spQUERY);
int i = 0;
foreach (SPListItem item in lstIMAGE)
{
if (i < 2)
{
Literal ltrimagem = new Literal();
ltrImage.text = "<img src="item['Nome']" style="'Float:left;">";
Controls.Add(ltrimagem);
}
i++;
}
}
}
catch (Exception ex)
{
throw ex;
}
}
Isso é uma parte só do código, ainda tem outras coisas, mas dessa forma eu peguei a Image Library que criei com as imagens e assim consegui personaliza-la no site.
Deixo aqui essa dica pra quem precisar um dia também. Sharepoint ainda é novo e por isso tem pouquissimos sites e foruns falando sobre isso.