Os filhos perdidos da webpart
Parece um estranho titulo para um artigo, parece mais um titulo de filme de baixo orçamento, mas toda a gente fala da WebPart e de como criar uma WebPart, até aqui tudo bem, mas queremos ir um pouco mais alem, ou seja começar a personalizar e utilizar as verdadeiras capacidade das Webpart, quem já teve que realizar uma WebPart robusta e fiavel, o simples "Hello World" não dá resposta :P.
Este artigo tem como função ajudar e a entrar mais a fundo no desenvolvimento das WebParts, pegar nas partes mais aborrecidas e difícil de perceber, chamar aquela parte que os 500 mil artigos de como criar um WebPart em Sharepoint não explica....
Eh eh.... :)
Definir novas Propriedades na Edição da Webpart
No desenvolvimento das Webpart umas das primeira tarefas a realizar é a definição de propiedade para guardar um conjunto de informação que irá servir de apoio ao desenvolvimento da WebPart.
Esta informação vai estar sempre associada a Webpart sem que tenhamos perda de informação ao reiniciar o servidor ou reiniciar os serviços de IIS.
As propriedades podem ser definidos em vários tipos de variáveis.
Para começar a definir as propiedades e necessário chamar um conjuntos de objectos da Webpart para categorizar e definir a sua área de acção, essas áreas pode-mos definir um
WebBrowsable: A propriedade está visivel ou não na Edição da WebPart
Category: Categoria onde se insere a propiedade.
FriendlyName: Nome da area da propiedade
Description: Pequena descrição da utilidade da propriedade
Exemplo de criação de propriedade para Texto e CheckBox.
Propriedade Redirect URL:
//Propriedade Texto[WebBrowsable(true)]
[Category("Redirect Url")]
[PersistenceMode(PersistenceMode.InnerProperty)]
[Personalizable(PersonalizationScope.Shared)]
[FriendlyName("Redirect Url OK")]
[Description("Redirect Url OK")]
public string RedirectURLOK
{
get { return _RedirectURLOK; }
set { _RedirectURLOK = value; }
}
//Propriedade CheckBox
[WebBrowsable(true)]
[Category("Redirect Url")]
[PersistenceMode(PersistenceMode.InnerProperty)]
[Personalizable(PersonalizationScope.Shared)]
[FriendlyName("Active Redirect URL OK")]
[Description("Active Redirect URL OK")]
public bool ActiveOK
{
get { return _ActiveOK; }
set { _ActiveOK = value; }
}
O resultado da nossa Propriedade:
Exemplo de criação de propriedade para DropDown.
Propriedade Cores "Para escolher uma propriedade de uma Lista de valores, devemos criar um enumerate":
//Propriedade Dropdown
public enum cores
{
amarelo = 0,
vermelho,
verde};
protected cores _cor;
[WebBrowsable(true)]
[Category("Cores")]
[PersistenceMode(PersistenceMode.InnerProperty)]
[Personalizable(PersonalizationScope.Shared)]
[FriendlyName("Escolher Cor")]
[Description("Escolher Cor")]
public cores _Cor
{
get { return _cor; }
set { _cor = value; }
}
O resultado da nossa Propriedade:
Desenho do Menu de Edição da WebPart "EditorPart, ToolPart"
Com a evolução dos Sharepoint com as diferentes versões "Wss2.0/Wss3.0" e "SPS2003/MOSS2007" o Controlo WebPart tem sofrido algumas alterações para tornar mais rica a experiência para o utilizador.
Quando foram utilizadas as WebPart em "Wss2.0/SPS2003" estas tinham a class "ToolPart" que dava a capacidade de desenhar controlos na WebPart para ajudar a configuração desta, esta class vinha do Objecto "System.Web.UI.WebControls.WebParts.WebPart".
Com as WebPart existentes em "Wss3.0/MOSS2007" o objecto "System.Web.UI.WebControls.WebParts.WebPart" manteve-se, sendo derivadas dessa class outra do tipo "Microsoft.SharePoint.WebPartPages.WebPart" onde existem novas funcionalidade para ajuda ao desenvolvimento entre elas a class "EditorPart".
Essas Classes são bastantes úteis quando estamos a desenhar a nossa WebPart e controlos de apoio com regras de funcionalidade de muito especifica, aqui fica um exemplo de como podemos chamar esta classes.
public class CustomWebPart : Microsoft.SharePoint.WebPartPages.WebPart
{
..........
//Metodo para Chamar as Classes de Desenho Gráfico "EditorPart"
public override EditorPartCollection CreateEditorParts()
{
List<EditorPart> editorParts = new List<EditorPart>(1);
EditorPart item = new MenuListEditorPart();
item.ID = this.ID + "_mailEditorPart";
editorParts.Add(item);
return new EditorPartCollection(base.CreateEditorParts(), editorParts);
}
//Metodo para Chamar as Classes de Desenho Gráfico "ToolPart"
public override ToolPart[] GetToolParts()
{
ToolPart[] toolparts = new ToolPart[3];
WebPartToolPart wptp = new WebPartToolPart();
CustomPropertyToolPart cptp = new CustomPropertyToolPart();
WebToolPart ctp = new WebToolPart();
toolparts[0] = wptp;
toolparts[1] = cptp;
toolparts[2] = ctp;
return toolparts;
}
.............
}
Com Métodos criados na Class Principal então podemos começar a derivar.
EditorPart
- Desenho Gráfico do Topo da webPart
using System;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
public class MenuListEditorPart : EditorPart
protected override void CreateChildControls()
{
.....Adicionar e Desenhar os controlos para o Topo de Edição da WebPart
}
Imagem Exemplo:
ToolPart
- Desenho Gráfico do fundo do modo de edição da WebPart.
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint;
using System.Drawing;
using Microsoft.SharePoint.WebControls;
class WebToolPart : ToolPart
protected override void CreateChildControls()
{
.....Adicionar e Desenhar os controlos para o fundo de Edição da WebPart
}
Imagem Exemplo:
Novas opções de Menu da WebPart
Umas das grandes capacidades da WebPart a sua flexibilidade e a facilidade em disponibilizar a informação em todas as formas, como no Menu da propia webPart.
Para ter um resultado final como na imagem de anexo, vai ser necessário utilizar o metodo "WebPartVerbCollection" para criar novas opções de Menu da WebPart.
Pequeno exemplo:
public override WebPartVerbCollection Verbs
{
get
{
List<WebPartVerb> verbs = new List<WebPartVerb>();
WebPartVerb verb1 = new WebPartVerb(
this.ID + "_docLibVerb", String.Format("window.location.href = '{0}'", "http://spupload.codeplex.com"));
verb1.Description = ShortcutDescription;
verb1.Text = verb1.Description;
verb1.ImageUrl = "/_layouts/images/HTM16.GIF";
verbs.Add(verb1);
WebPartVerbCollection allverbs =
new WebPartVerbCollection(base.Verbs, verbs);
return allverbs;
}
}
Actualizar Propriedade da WebPart em Código
Sempre que alterar as propriedades em código .cs, deverá ser utilizado o comando "this.SetPersonalizationDirty();" para forçar a actualização da nossa propriedade na WebPart.
Exemplo:
.......
ActiveOK=true;
this.SetPersonalizationDirty();
..........
Espero que estes pequenos exemplo possam ajudar no desenvolvimento mais rico e "User Friendly" das nossas aplicações, nem sempre tudo é simples mas o resultado final será bastante agradável. :)
Podem fazer download do codigo como exemplo no seguinte Link.
Espero que tenham gostado de artigo, um grande abraço. J
1 comment:
Muito claro e útil! ;-)
Post a Comment