quarta-feira, 30 de novembro de 2011

Desenvolvendo Connectable Web Parts para o SharePoint 2010


Mostrarei aqui como desenvolver web parts para o SharePoint 2010 através do Visual Studio 2010 que comuniquem entre si, ou seja, enviem e recebam informações de umas para as outras que estão contidas na mesma página.
Começaremos criando um novo projeto “Empty SharePoint Project”, escolha “Deploy as a farm solution”.

Vamos agora criar a interface quem iremos utilizar para definir os valores que iremos enviar e receber.

Aqui vamos criar uma interface básica com uma simples string.

public interface IWPInterface02
{
    string Text { get; set; }
}



Com a interface criada, vamos agora adicionar duas Web Parts ao projeto (botão direito no projeto -> Add - > New item -> Web Part):

Obs.: Neste exemplo não estou utilizando “Visual Web Part”.



-WPConsumer: Web part que irá receber o valor e exibir através de um TextBox.

-WPProvider: Web part que irá enviar um texto digitado em um TextBox e será enviado ao clique de um Button.

Com as duas web parts devidamente criadas, vamos agora adicionar o código necessário para realização da funcionalidade.

No arquivo .cs da WPProvider adicionamos o seguinte código:

//Devemos adicionar a interface "IWPInterface02" pois faremos a implementação dela abaixo
[ToolboxItemAttribute(false)]
public class WPProvider : WebPart, IWPInterface02
{

    //Declaração dos controles utilizados
    private Label lbl;
    private TextBox txt;
    private Button btn;
    public String _text = String.Empty;

    //Implementação de get e set
    [Personalizable()]
     public string Text
    {
        get
        {
            return _text;
        }

        set
        {
            _text = value;
        }
    }


    protected override void CreateChildControls()
    {

        //Criação dos controles na web part

        Controls.Clear();

        lbl = new Label();
        lbl.ID = "lbl";
        lbl.Text = "Digite um texto:";

        Controls.Add(lbl);


        txt = new TextBox();
        txt.ID = "txt";
        txt.Text = "";

        Controls.Add(txt);

        Controls.Add(new LiteralControl("<br>"));


        btn = new Button();
        btn.ID = "btn";
        btn.Text = "Enviar texto";
        btn.Click += new EventHandler(Button1_Click);

        Controls.Add(btn);

    }


    //Conexão
    [ConnectionProvider("Provider for String From TextBox", "TextBoxStringProvider")]
    public IWPInterface02 TextBoxStringProvider()
    {
        return this;
    }


    //Evento Click do botão que fará o envio do texto digitado para a propriedade Text
    void Button1_Click(object sender, EventArgs e)
    {

        if (txt.Text != String.Empty)
        {
            Text = txt.Text;
            txt.Text = String.Empty;
        }
    }

}



Agora vamos adicionar o código abaixo no arquivo .cs da WPConsumer.

[ToolboxItemAttribute(false)]
public class WPConsumer : WebPart
{
    private IWPInterface02 provider02;

    //Declaração do controle
    private TextBox txt;

    protected override void CreateChildControls()
    {
        //Criação dos controles na web part
        Controls.Clear();
        txt = new TextBox();
        txt.ID = "txtConsumer";
        txt.Text = "";

        Controls.Add(txt);
    }

    //Conexão
    [ConnectionConsumer("String Consumer", "StringConsumer")]
    public void TextBoxStringConsumer(IWPInterface02 Provider)
    {
        provider02 = Provider;
    }



    protected override void OnPreRender(EventArgs e)
    {
        EnsureChildControls();

        if (provider02 != null)

        {
            //Atribui o valor presente no provider para o TextBox
            txt.Text = provider02.Text;
        }
    }

}



Os códigos acima adicionados estão todos comentados a respeito da funcionalidade de cada bloco.
Agora basta realizar o deploy através do próprio Visual Studio 2010 e adicionar as duas web parts em uma mesma página e ver o resultado.

Nenhum comentário:

Postar um comentário