Wednesday, November 11, 2009

Os filhos perdidos da WebPart

Autor:André Lage
Publicação:__________
Download: Documento
(EN)TranslateLink

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.
  • String
  • Boolean
  • Enum

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


Post a Comment