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.
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
Siderys Elite Software

Por último en la clase AssemblyInfo vamos agregar una elevación en los permisos de ejecución de nuestra WebPart para que la misma se ejecute sin ningún problema en nuestro portal de Sharepoint 2007, para eso agregamos el siguiente atributo en nuestro AssemblyInfo [assembly: AllowPartiallyTrustedCallers()], en la siguiente imagen vemos como quedaría:
Una vez configurado nuestro proyecto de biblioteca, lo que demos hacer es configurar nuestro proyecto Web y crear el UserControl correspondiente, para lo cual vamos agregar un nuevo componente a dicho proyecto del tipo UserControl y lo vamos a grabar en el mismo. Una vez agregado lo que demos hacer es codificar el mismo según nuestras necesidades y requerimientos. En la imagen 4 vemos nuestro UserControl codificado, como nos estamos basando en el artículo anterior, nuestro UserControl simplente dibuja el control de Sharepoint PeopleEdito.















