Una de las novedades que tenemos a nivel de desarrollo para SharePoint 2010 es la posibilidad de crear WebParts de forma visual. Para ello, Visual Studio 2010 incorpora una plantilla de proyecto y de elemento de proyecto que permite crear este tipo de WebParts y obtener una productividad máxima en el desarrollo. Ahora bien, en el desarrollo de WebParts para SharePoint es fundamental disponer de opciones flexibles de configuración que vienen dadas por las propiedades que se pueden configurar a través del panel de control. Este panel de control se puede extender con nuestras propiedades personalizadas como veremos en este primer post y en el siguiente. Empecemos.
Creación de la WebPart
En primer lugar, vamos a crear una sencilla WebPart de tipo visual en Visual Studio 2010:
Creamos un proyecto de tipo “Empty SharePoint project”.
Elegimos como tipo de despliegue “Deploy as farm solution” ya que vamos a crear una WebPart de tipo visual.
Una vez creado el proyecto, le agregamos un elemento de tipo WebPart visual de forma que la correspondiente característica se crea en el nodo Feature del proyecto.
Configuramos la característica de forma adecuada: cambiando su nombre, especificando los valores de las propiedades Title, Description, Scope, …
Diseñamos nuestra WebPart visualmente para que realice la funcionalidad deseada. En mi caso, simplemente he añadido una etiqueta en la que se mostrará el valor de la propiedad añadida a la Toolpart.
Nos vamos al archivo de código asociado al user control que representa la WebPart visual y realizamos los siguientes cambios:
Añadimos un miembro de tipo string a la clase.
Configuramos la etiqueta de la WebPart con el valor del string.
Añadiendo propiedades personalizadas a la WebPart
Una vez diseñada la WebPart de acuerdo a nuestras necesidades, abrimos el archivo “.cs” que contiene la clase que representa realmente nuestra WebPart (hereda de System.Web.UI.WebControls.WebParts.WebPart) y que se encarga entre otras cosas de cargar el control de usuario que hemos creado hace un momento. Es en esta clase dónde tenemos que añadir toda la “fontanería” que nos permite añadir nuevas propiedades al panel de control de la WebPart. Una primera aproximación para añadir nuevas propiedades consiste en:
Añadir a la clase la propiedad correspondiente que representa el nuevo elemento que se va a añadir en el panel de control. Si esta propiedad es de tipo String, como en el ejemplo, implica que veremos una caja de texto en el panel de control.
Añadir en el método CraeteChildControls() la lógica necesaria para que en la WebPart se use la propiedad configurada.
1: using System;
2: using System.Web.UI;
3: using System.Web.UI.WebControls;
4: using System.Web.UI.WebControls.WebParts;
5:
6: namespace SPVisualWebPart1.SPVisualWebPart1
7: {
8: public partial class SPVisualWebPart1UserControl : UserControl
9: {
10: public string sUrlSite;
11: protected void Page_Load(object sender, EventArgs e)
12: {
13: this.Label1.Text = sUrlSite;
14: }
15: }
16: }
Como podéis comprobar en el código anterior:
Hemos añadido una propiedad de tipo String a la clase que decoramos con los atributos Personalizale() y WebBrowsable que son los que permiten que aparezca en el panel de control de la WebPart lista para su uso.
A continuación en el método CreateChildControls() simplemente inicializamos el valor del miembro añadido en la clase del control de usuario con el valor de la propiedad personalizada.
Probando la solución
Una vez añadida la propiedad, sólo nos queda probar la funcionalidad de la misma:
Desplegamos la WebPart desde Visual Studio utilizando la opción de “Deploy”.
Añadimos la WebPart en una página del sitio y a través del menú de edición comprobamos que en la sección “Miscellaneous” o “Varios” en función del idioma aparece la propiedad creada y lista para su uso.
Y hasta aquí llega este primer post sobre como añadir propiedades personalizadas al panel de control de una WebPart visual.
1: using System;
2: using System.ComponentModel;
3: using System.Web;
4: using System.Web.UI;
5: using System.Web.UI.WebControls;
6: using System.Web.UI.WebControls.WebParts;
7: using Microsoft.SharePoint;
8: using Microsoft.SharePoint.WebControls;
9:
10: namespace SPVisualWebPart1.SPVisualWebPart1
11: {
12: [ToolboxItemAttribute(false)]
13: public class SPVisualWebPart1 : WebPart
14: {
15: // Visual Studio might automatically update this path when you change the Visual Web Part project item.
16: private const string _ascxPath = @"~/_CONTROLTEMPLATES/SPVisualWebPart1/SPVisualWebPart1/SPVisualWebPart1UserControl.ascx";
17: private String _intranetUrl = null;
18:
19: [Personalizable(), WebBrowsable]
20: public String IntranetUrl
21: {
22: get { return _intranetUrl; }
23: set { _intranetUrl = value; }
24: }
25: protected override void CreateChildControls()
26: {
27: Control control = Page.LoadControl(_ascxPath);
28: ((SPVisualWebPart1UserControl)control).sUrlSite =
29: this.IntranetUrl;
30: Controls.Add(control);
31: }
32: }
33: }