WebControl PeopleEditor Property Webpart Sharepoint 2007
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 “WebPartToolPart – CustomPropertyToolPart” 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.
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”.
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 2
Siderys Elite Software