WebPart para Sharepoint 2007 usando UserControl

En el artículo anterior explicamos cómo usar el control de Sharepoint 2007 PeopleEditor y desarrollamos un formulario para colocarlo en Sharepoint.

En realidad lo que construimos fue una WebPart utilizando un UserControl la cual registramos en nuestro Sharepoint y utilizamos. Cuando necesitamos agregar funcionalidad adicional a nuestros sitios de Sharepoint recurrimos a la codificación mediante WebParts, las cuales nos permiten desarrollar dicho componente e incluirlo en nuestro portal Sharepoint. Pero todo sabemos que la codificación de una WebPart no es trabajo fácil y más cuando nos tenemos que preocupar de todo el dibujo (renderización de los controles incluidos en la misma) y el manejo de los preciados eventos, cuando la WebPart es sencilla no es tan complicado su desarrollo, pero ahora si lo que debemos codificar es un formulario complejo, el desarrollo de la misma no es nada trivial.

Nosotros vamos a desarrollar una WebPart, pero en vez de codificarla toda en la clase que implementa la clase base WebPart, lo vamos hacer mediante un UserControl de Asp.Net. Lo primero que tenemos que hacer es preparar nuestro ambiente en Visual Studio, para lo cual necesitamos 2 proyectos, un proyecto Web donde codificaremos el UserControl y un proyecto de Clases donde codificaremos nuestra WebPart, en la siguiente imagen se puede ver como quedaría nuestro ambiente:

Imagen 1

 1_Solucion_VisualStudio

Lo que debemos hacer ahora es configurar nuestros dos proyectos, para poder agregar la referencia al proyecto de biblioteca de clases. Ambos dos proyectos deben estar firmados con un Strong Name (archivo snk, si tienen uno en común  para todos sus desarrollos pueden utilizarlo, si no pueden generar uno con el Visual Studio), el primer proyecto que vamos a configurar es la biblioteca de clases y en las propiedades del proyecto vamos a colocar en archivo snk (Strong Name) en la sección correspondiente a firma del Visual Studio, como se puede ver en la imagen siguiente:

 

Imagen 2

 2_FirmaEnsamblado

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:

Imagen 3

3_AssemblyInfo

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.

Imagen 4

4_UserControl_ASCX  

En la clase asociada a dicho UserControl vamos a codificar todo nuestro comportamiento para el mismo. Una vez que está terminado tenemos que publicarlo así podemos crear el Assembly necesario para dicho UserControl, para ello nos paramos sobre nuestro proyecto Web y seleccionamos publicar. En la nueva ventana que aparece en nuestro Visual Studio vamos a configurar como vamos hacer la publicación, debemos seleccionar una ruta donde se colocaran los archivos generados, vamos a indicarle que nos genere un Assembly independiente para cada uno de los archivos que tenemos en el proyecto Web y vamos a firmar los mismo con un Strong Name (el archivo snk  a utilizar puede ser el mismo que utilizamos para firmar la biblioteca de clases), la imagen 5 nos muestra como quedaría la pantalla configurada. 

Imagen 5

5_PublicacionUserControl  

Una vez publicado, vamos agregar la referencia al Assembly generado por el proceso de publicación en nuestro proyecto de clases, nuestro proyecto de clase debería quedar como se muestra en la siguiente imagen.

Imagen 6

6_Referencia_UserControl  

Los ultimo que vamos hacer es codificar nuestra WebPart para utilizar el UserControl utilizando el método LoadControl y pasándole una ruta a la ubicación de nuestro archivo ASCX, esta ruta deberá ser una ruta relativa en la raíz de nuestro portal Sharepoint, en nuestro caso colocamos el archivo ASCX en una carpeta llamada “UserControl” como se puede ver en la siguiente imagen. 

Imagen 7

7_UserControl_Folder 

En la siguiente sección entraremos el código necesario para cargar el UserControl en la WebPart y adicionarlo a la colección de controles. También hemos incorporado un manejo de errores que nos permitirá enviar el mensaje de error producido a la pantalla utilizada por Sharepoint 2007 para mostrar los mensajes de error.

 

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 Microsoft.SharePoint.Utilities;

 

namespace PeopleEditorWebControlWebPart

{

    public class PeopleEditorWebControlWebPart : System.Web.UI.WebControls.WebParts.WebPart

    {

        private PeopleEditorWebControlUC mPeopleEditorWebControlUC = null;

        private Exception mError = null;

        private string mSourceQuery = string.Empty;

 

        public PeopleEditorWebControlWebPart()

        {

            this.ExportMode = WebPartExportMode.All;

        }

        protected override void CreateChildControls()

        {

            try

            {

                base.CreateChildControls();

                mPeopleEditorWebControlUC = (PeopleEditorWebControlUC)Page.LoadControl(@"/UserControl/PeopleEditorWebControlUC.ascx");

                Controls.Add(mPeopleEditorWebControlUC);

            }

            catch (Exception ex)

            {

                mError = ex;

            }

        }

        protected override void Render(HtmlTextWriter writer)

        {

            if (mError != null)

            {

                SPUtility.TransferToErrorPage(mError.Message + " —> " + mError.StackTrace);

            }

            base.Render(writer);

        }

    }

}

Por último nos queda compilar nuestra WebPart y registrarla en nuestro portal de Sharepoint para poder utilizarla, como cualquier otra Webpart.

Deja un comentario

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