SharePoint 2010: Añadiendo propiedades a la Toolpart (IV)!

Siguiendo con la serie de posts sobre como añadir propiedades a la toolpart de configuración de una WebPart, en esta ocasión vamos a ver como añadir estas propiedades a través de la definición de una clase de tipo EditorPart. Pero antes de empezar, os dejo la referencia a los artículos previos de la serie:

El ejemplo que os voy a comentar es relativo a como crear una EditorPart para poder definir propiedades personalizadas que luego se utilicen en una WebPart de tipo visual (para una WebPart de tipo clásico la filosofía es la misma). Lo primero que tenemos que tener claro es que una Editor Part no es más que un control hospedado en una zona de WebParts específica denominada EditorZone, es decir, a todos los efectos es como una WebPart sólo que hereda de la clase base EditorPart. Es esta clase la que proporciona el vínculo  entre la WebPart en cuestión y la EditorPart asociada. Para poder añadir propiedades personalizadas a nuestra WebPart a través de una EditorPart:

  • En primer lugar, en la clase que representa nuestra WebPart tenemos que sobreescribir el método CreateEditorParts() que es el que nos permite devolver una o varias EditorParts que interactúen con nuestra WebPart. Este método devuelve una colección de EditorParts Además, habitualmente se añade una propiedad de tipo WebBrowsableObject que devuelve la instancia de WebPart actual.
   1: public override EditorPartCollection CreateEditorParts()

   2: {

   3:     List<EditorPart> epEditorParts = new List<EditorPart>();

   4:     epEditorParts.Add(new FContactoToolPart());

   5:     return new EditorPartCollection(epEditorParts);

   6: }

   7:  

   8: object IWebEditable.WebBrowsableObject

   9: {

  10:     get { return this; }

  11: }

  • Creamos una clase que herede de EditorPart y en la que configuraremos los elementos que queremos añadir a la Toolpart de nuestra WebPart, es decir, tanto la distribución de las propiedades que formarán parte del la ToolPart, como el tipo de la misma y cualquier otra información adicional:
    • Esta configuraciones las realizaremos en el método CreateChildControls(). Por ejemplo, una parte de implementación tipo sería la siguiente:
   1: /// <summary>

   2: /// Añade los controles de la ToolPart

   3: /// </summary>

   4: protected override void CreateChildControls()

   5: {

   6:     ////******************************************

   7:     ////Tabla

   8:     ////******************************************       

   9:     tblContenedor = new Table();

  10:  

  11:     //Fila para la Url de la Intranet

  12:     tblRow = new TableRow();

  13:  

  14:     //Etiqueta para la Url de la Intranet

  15:     tblCell=new TableCell();

  16:     tblCell.Controls.Add(new LiteralControl("Url de la Intranet"));

  17:     tblRow.Cells.Add(tblCell);

  18:  

  19:     //Caja de texto para la Url de la Intranet

  20:     txtIntranetUrl = new TextBox();

  21:     txtIntranetUrl.ID = "txtIntranetUrl";

  22:     txtIntranetUrl.Text = wpOrigen.IntranetUrl.ToString();

  23:     tblCell = new TableCell();

  24:     tblCell.Controls.Add(txtIntranetUrl);

  25:     tblRow.Cells.Add(tblCell);

  26:  

  27:     //Añadimos la fila a la tabla                    

  28:     tblContenedor.Rows.Add(tblRow);

  29:  

  30:     //Fila para la Url de la Web

  31:     tblRow = new TableRow();

  32:  

  33:     //Etiqueta para la Url de la Web

  34:     tblCell = new TableCell();

  35:     tblCell.Controls.Add(new LiteralControl("Url de la Web"));

  36:     tblRow.Cells.Add(tblCell);

  37:  

  38:     //Caja de texto para la Url de la Web

  39:     txtWebUrl = new TextBox();

  40:     txtWebUrl.ID = "txtWebUrl";

  41:     txtWebUrl.Text = wpOrigen.WebUrl.ToString();

  42:     tblCell = new TableCell();

  43:     tblCell.Controls.Add(txtWebUrl);

  44:     tblRow.Cells.Add(tblCell);

  45:  

  46:     //Añadimos la fila a la tabla

  47:     tblContenedor.Rows.Add(tblRow);

  48:  

  49:     //Añadimos la tabla a la colección de controles

  50:     this.Controls.Add(tblContenedor);  

  51:  

  52:     base.CreateChildControls();

  53: }

    • A continuación lo que se suele hacer es añadir implementaciones de los métodos ApplyChanges() y SyncChanges() que permiten guardar cambios realizados en la WebPart editada o bien cargar datos de configuración de la misma:
   1: /// <summary>

   2: /// Aplica los cambios realizados en la Toolaprt

   3: /// </summary>

   4: /// <returns></returns>

   5: public override bool ApplyChanges()

   6: {

   7:     EnsureChildControls();

   8:     FContactoCIINWP wpOrigen = 

   9:         (FContactoCIINWP)this.WebPartToEdit;

  10:                         

  11:     if (!string.IsNullOrEmpty(Page.Request.Form[txtIntranetUrl.UniqueID]) &&

  12:         !string.IsNullOrEmpty(Page.Request.Form[txtWebUrl.UniqueID]))

  13:         if (txtIntranetUrl.Text!="" && txtWebUrl.Text!="")

  14:         {

  15:             wpOrigen.IntranetUrl = txtIntranetUrl.Text;

  16:             wpOrigen.WebUrl = txtWebUrl.Text;

  17:             return true;

  18:         }

  19:  

  20:     return false;

  21: }

  22:  

  23: /// <summary>

  24: /// Sincroniza los cambios realizados!

  25: /// </summary>

  26: public override void SyncChanges()

  27: {

  28:     EnsureChildControls();

  29:     FContactoCIINWP wpOrigen = (FContactoCIINWP)this.WebPartToEdit;

  30:     txtIntranetUrl.Text = wpOrigen.IntranetUrl.ToString();

  31:     txtWebUrl.Text = wpOrigen.WebUrl.ToString();

  32: }

  • Y con esto y un bizco…digo, el resultado obtenido sería como sigue:

image

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

Un comentario en “SharePoint 2010: Añadiendo propiedades a la Toolpart (IV)!”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *