Boa Noite Sharepointers,
Hoje vamos desenvolver uma web part customizada.
Nativamente o Sharepoint já nos oferece uma grande quantidade de webparts que, com pequenas customizações e configurações, antendem grande parte dos casos. Mas mesmo assim, em grandes projetos é bem comum termos que desenvolver “aplicativos” .net para resolver nossos problemas, estas soluções são as webparts customizadas.
Existem diversas formas de se criar uma webpart, desde criar um simples projeto de class library no Visual Studio com a sua estrutura e objetos sendo criados nela, podemos criar um User Control com o visual de nossa webpart e apenas compilar o código de apoio do aplicativo ou ainda criar, utilizando o Visual Studio 2008 Extensions for Sharepoint, dentro de um site em branco um novo projeto de webpart(com uma arquivo de compilação, um arquivo .webpart para configurações da webpart e ainda um arquivo .xml.
No primeiro exemplo vou desenvolver uma WebPart da forma mais simples e que muitas pessoas desconhecem. Sem utilizar um UserControl e sem utilizar o Extensions for Sharepoint, este exemplo seguira uma linha bem simples de um desenvolvedor .Net entender.
Primeiro passo é criarmos um novo projeto do tipo Windows Class Library, um projeto de arquivos de classe que quando compilados darão origem a uma dll.
Depois da criação do projeto devemos adiconar a referência a System.Web e a Microsoft.SharePoint, clicando com o botão direitona pasta References, em Add Reference e depois selecionar estes namespaces.
Depois das devidas referências criadas devemos abrir o arquivo WebPartsUsandoClassLibrarys.cs e adicionarmos estas referências a ele:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using System.Web.UI.WebControls;
namespace WebPartsUsandoClassLibrarys
{
public class Cadastro : WebPart
{
}
}
E definir que a classe irá herdar de WebPart.
Para termos acesso aos métodos da WebPart começaremos a digitar “protected override” e utilizamos o intellisense do visual studio para sobreescrevermos estes métodos e eventos com os parâmetros adequados.
No exemplo abaixo estou apenas utilizando o método CreateChildControls(), responsável por criar os objetos que serão mostrados na página.
namespace WebPartsUsandoClassLibrarys
{
public class Cadastro : WebPart
{
#region Variáveis
Label lblNome = null;
Label lblEmail = null;
TextBox txtNome = null;
TextBox txtEmail = null;
Button btnSalvar = null;
Button btnCancelar = null;
#endregion
#region Métodos Protected
protected override void CreateChildControls()
{
lblNome = new Label();
lblNome.Text = "Nome :";
Controls.Add(lblNome);
lblEmail = new Label();
lblEmail.Text = "Email :";
Controls.Add(lblEmail);
txtNome = new TextBox();
txtNome.Width = Unit.Pixel(200);
txtNome.ID = "txtNome";
Controls.Add(txtNome);
txtEmail = new TextBox();
txtEmail.Width = Unit.Pixel(200);
txtEmail.ID = "txtEmail";
Controls.Add(txtEmail);
btnCancelar = new Button();
btnCancelar.ID = "btnCancelar";
btnCancelar.Click += new EventHandler(btnCancelar_Click);
btnCancelar.Text = "Cancelar";
Controls.Add(btnCancelar);
btnSalvar = new Button();
btnSalvar.ID = "btnSalvar";
btnSalvar.Click += new EventHandler(btnSalvar_Click);
btnSalvar.Text = "Salvar";
Controls.Add(btnSalvar);
}
#endregion
#region Eventos Click
void btnCancelar_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
void btnSalvar_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
#endregion
}
}
Alem do CreateChildControls() dois métodos são bastante usados em desenvolvimentos simples de WebParts, são eles o Render(System.Web.UI.HtmlTextWriter writer), responsável por mostrar(renderizar) os objetos na sua WebPart e o OnPreRender(EventArgs e), responsável por executar ações antes da renderização dos objetos, como preencher uma lista, um DropDownList, criar uma tabela, etc.
Se o usuário não sobreescrever (der um override) nestes métodos, eles terão sua execução normal, isto é, vão apenas renderizar os objetos criados no CreateChildControls, em ordem de adição neste mesmo método.
Após desenvolvido esta primeira parte devemos assinar com uma strong key (Token) o nosso projeto de class library, para isto clicamos com o botão direito no nosso projeto e em properties.
Entramos na aba Signing como mostra a imagem acima, checamos o Sign the assembly e criamos uma nova Token clicando em New.
Podemos criar uma Token com o nome de nosso projeto, sem utilizar senhas para o assembly neste caso.
Após este passo vamos ao projeto e estartamos o build ou utilizamos a tecla de atalho CTRL+SHIFT+B para executar a compilação.
Se tudo ocorrer bem o código compilará e uma Dll será gerada dentro da pasta Bin de nosso projeto.
Abriremos a pasta C:Windowsassembly (GAC – Global Assembly Cache) e também a pasta Bin onde está a dll, e em seguida arrastamos a nova dll para a pasta de assembly do sistema.
Depois de arrastada a Dll fará parte de nosso sistema, mas para que este assembly se torne seguro para a nossa aplicação, ainda temos que configura-lo em nosso web.config. Para isto, vamos encontrar a Dll dentro da pasta assembly e abrir as suas propriedades.
Utilizaremos estes dados para configura-la em nosso web.config.
Agora iremos até a pasta dentro de Inetput, onde se encontra nosso website(se não estiver criado ainda, procure na internet que existem diversos exemplos de como criar webapplications e sites em sharepoint) e abriremos o web.config desta aplicação.
Achamos a seção <SafeControls> e utilizando os dados da dll gerada acima, preenchemos mais uma linha de SafeControl.
<SafeControl Assembly="WebPartsUsandoClassLibrarys, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5a4b9306b4d0c2d2" Namespace="WebPartsUsandoClassLibrarys" TypeName="*" Safe="True" />
Atente-se para que Assembly=nome da dll, namespace=namespace colocado lá no arquivo .cs, version=padrão para um novo desenv. É 1.0.0.0 e a PublicKeyToken=strong name gerado para a dll no GAC.
Após estas configurações executamos o comando “iisreset” no cmd do windows, ou ainda no Iniciar executar, para resetar nosso Internet Information Services para que ele efetue as mudanças.
Próximo passo é acessar o site pelo browser, entramos em Ações do Site, Definições do Site.
Na pagina de definições entramos na aba Web Parts na área de Galerias.
Esta pagina mostrará todas as webparts ativas que você encontra disponível para este site, como nossa webpart ainda não está ai clicamos em Novo.
Se os passos acima foram bem executados, nossa webpart irá ser mostrada por último.
Selecionamos ela e clicamos em Preencher galeria.
Após a nossa webpart já estar disponível na galeria, vamos até uma página de webparts, que pode ser a home do site como no exemplo abaixo, e clicamos em Ações do Site/Editar Página.
Nestas páginas de webparts existem lugares predefinidos que podem conter webparts, são chamados de WebPartZone, clique em algum desses e na janela que se abrirá, procure a webpart criada, pelo nome, no caso “Cadastro”, que deve estar na aba “Diversos”.
E adicione ela a página e a nossa webpart já estará visivel para os usuários do site.
Este primeiro exemplo foi uma forma bem simples de criar uma webpart, sem pensar em deploy, configurações mais avançadas, etc.
No próximo post vou fazer meu segundo exemplo, utilizando o Extensions para Sharepoint para a criação da webpart com o template correto.
Depois vou criando posts utilizando essas webparts para dar algumas dicas de desenvolvimento.
Até a próxima,
Abs