WebControl PeopleEditor Property Webpart Sharepoint 2007

Estábamos desarrollando una WebPart, otro de los requerimientos solicitados por un cliente, cuando con Santiago, Javier y yo nos pusimos a discutir cómo podíamos desarrollarlo. Le empezamos a dar vuelta al tema y encontramos una solución, que se cargara un usuario en las propiedades de las la WebPart que estábamos desarrollando. Entonces decidimos colocar una simple propiedad para que se cargara el usuario que necesitábamos y el usuario final simplemente debía escribir el nombre de un usuario para ser configurado. Pero Santiago fue más lejos y se puso a investigar cómo se podría utilizar el control de Sharepoint 2007 PeopleEditor para brindar al usuario una forma natural de configurar un usuario en nuestra WebPart.
Las WebParts pueden sobre escribir (override) el método GetToolParts() que devuelve un Array del objeto ToolPart. En este Array vamos a retornar las instancias de dos clases “
WebPartToolPartCustomPropertyToolPart” del espacio de nombre “Microsoft.SharePoint.WebPartPages” y la instancia de una clase personalizada que nosotros vamos a crear y que extiende de la clase “ToolPart” que se encuentra en el espacio de nombre ” Microsoft.SharePoint.WebPartPages”.
Lo primero que tenemos que hacer es crear nuestra WebPart, la misma debe heredar de la clase WebPart de Sharepoint, esta clase se encuentra en el espacio se nombre “Microsoft.SharePoint.WebPartPages” puesto que esta clase es la que contiene el método que debemos sobre escribir (override) GetTollParts() y la clase WebPart de Asp.Net no implementa dicho control.
En la sección 1 vemos la implementación de nuestra WebPart la cual es una WebPart simple que lo que hace es mostrar los datos del usuario cargado en el control PeopleEditor.
Sección 1

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.ComponentModel;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace Siderys.Blogs.WebPart
{
[Guid(“b604193b-be0f-4b2e-8b82-d9783fe8c262”)]
public class PeopleEditorWebpart : Microsoft.SharePoint.WebPartPages.WebPart
{
private SPUser mUsuario = null;
public PeopleEditorWebpart()
{
this.ExportMode = WebPartExportMode.All;
}
[Browsable(false)]
public SPUser Usuario
{
get
{
return mUsuario;
}
set
{
mUsuario = value;
}
}
protected override void Render(HtmlTextWriter writer)
{
HtmlTable lTable = new HtmlTable();
HtmlTableRow lRow = new HtmlTableRow();
HtmlTableCell lCell = new HtmlTableCell();
if (mUsuario != null)
{
//Nombre
lCell.InnerText = “Nombre: “;
lRow.Controls.Add(lCell);
lCell = new HtmlTableCell();
lCell.InnerText = mUsuario.Name;
lRow.Controls.Add(lCell);
lTable.Controls.Add(lRow);
//Es admin
lCell = new HtmlTableCell();
lRow = new HtmlTableRow();
lCell.InnerText = “Es Admin: “;
lRow.Controls.Add(lCell);
lCell = new HtmlTableCell();
lCell.InnerText = mUsuario.IsSiteAdmin.ToString();
lRow.Controls.Add(lCell);
lTable.Controls.Add(lRow);
}
else
{
lCell.InnerText = “No hay usuario seleccionado”;
lRow.Controls.Add(lCell);
lTable.Controls.Add(lRow);
}
lTable.RenderControl(writer);
}
public override ToolPart[] GetToolParts()
{
ToolPart[] lToolPart = new ToolPart[3];
WebPartToolPart lWebPartToolPart = new WebPartToolPart();
CustomPropertyToolPart lCustomToolPart = new CustomPropertyToolPart();
lToolPart[0] = lCustomToolPart;
lToolPart[1] = lWebPartToolPart;
lToolPart[2] = new ToolPartPeopleEditor();
return lToolPart;
}
}
}

Bien ahora vamos a implementar la clase “ToolPartPeopleEditor” que utilizamos en el método GetToolParts() la cual es la que crea una instancia del control PeopleEditor y la carga en el panel de configuración de la WebPart. En la sección 2 vemos la implementación de la clase mencionada. Esta clase realiza la sobre escritura (override) de los métodos “RenderToolPart”, “CreateChildControls” y “ApplyChanges”. El primer método dibuja el contenido de la clase, el segundo método agrega la instancia del control PeopleEditor creado en el evento “Init” y el último método es utilizado para obtener el valor del control cargado cuando el usuario presiona el botón “Apply”.

Sección 2

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint.WebControls;

namespace Siderys.Blogs.WebPart
{
public class ToolPartPeopleEditor : Microsoft.SharePoint.WebPartPages.ToolPart
{
private PeopleEditor lPeopleEditor = null;
private const string lNombreControl = “ctl00$MSOTlPn_EditorZone$Edit2g_71a9f59a_11e8_4672_8953_8b96927aee44$PeopleEditorWebPart$downlevelTextBox”;
public ToolPartPeopleEditor()
{
Title = “Seleccionar Usuario ToolPart”;
Init += new EventHandler(ToolPartPeopleEditor_Init);
}

void ToolPartPeopleEditor_Init(object sender, EventArgs e)
{
lPeopleEditor = new PeopleEditor();
lPeopleEditor.ID = “PeopleEditorWebPart”;
lPeopleEditor.AllowEmpty = false;
lPeopleEditor.ValidatorEnabled = true;
lPeopleEditor.MultiSelect = false;
lPeopleEditor.SelectionSet = PeopleEditor.AccountType.User.ToString();
}
public override void ApplyChanges()
{
PeopleEditorWebpart lPeopleWebPart = (PeopleEditorWebpart)ParentToolPane.SelectedWebPart;
string lUsuarioCargado = Page.Request.Form[lNombreControl].ToString();
lPeopleWebPart.Usuario = Microsoft.SharePoint.SPContext.Current.Web.AllUsers[lUsuarioCargado];
}
protected override void RenderToolPart(System.Web.UI.HtmlTextWriter output)
{
output.Write(“
“);
base.RenderToolPart(output);
}
protected override void CreateChildControls()
{
base.CreateChildControls();
Controls.Add(lPeopleEditor);
}
}
}

Una vez implementado estas dos clases lo que debemos hacer es compilar e instalar la WebPart en nuestro portal de Sharepoint.
En la imagen 1 vemos como configuramos el control en el panel de propiedades de la WebPart y en la imagen 2 vemos como obtenemos el usuario cargado y mostramos algunos de sus valores.

Imagen 1
Imagen 2

En un próximo artículo vamos a seguir hablando de cómo podemos ir agregando funcionalidades a nuestras WebParts con controles de Sharepoint 2007.

Javier Apaulaza – Santiago Ferreira – Fabián Imaz
Siderys Elite Software
Compartir