Sunday, March 22, 2009

Code behind en las páginas maestras o de contenido en Sharepoint

Mucho se ha escrito sobre este tema. Pero espero contribuir de manera práctica sin mucho enredo sobre esto.

1. Lo primero que vamos hacer es crear un proyecto de librería de clases en VS.NET 2005 o 2008, da igual al cual llamaremos MasterPageCustom. Les sugiero crear ese proyecto en C#. Las páginas de Sharepoint utilizan ese lenguaje por defecto. Aunque en este momento me estoy preguntando qué pasa si ponemos a trabajar eso con VB.NET, pero si no es molestía seleccionen C#.

2. Supongamos que vamos a asignarle un poco de lógica a nuestra página mestra, que hemos personalizado para nuestro proyecto, y a la que hemos colocado una etiqueta (Label) que deberá desplegar el título de nuestro sitio dinámicamente. El objetivo es que este simple ejemplo, les de pie para construir lo que deseen en su página maestra o páginas de contenido (ASPX). Asignenle un nombre al archivo .cs por ejemplo Master.cs, igual utilicen ese nombre para su clase. El caso es que deben tener algó así:

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls ;

namespace MasterPageCustom
{
    public class Master : MasterPage
    {
        protected Label  lblTitulo;

        protected override void OnLoad(EventArgs e)
        {
            SPSite objSitioActual = SPControl.GetContextSite(Context);
            using (SPWeb objWeb = objSitioActual.OpenWeb())
            {
                this.lblTitulo .Text = objWeb.Title;
            }

        }

    }
}

Pongan atención a la definición del Label, la reescritura del evento Load que escuchará cuando se carga la Master, y por supuesto la herencia de la clase MasterPage. Lo demás es carpinteria del modelo de objetos de Sharepoint.

3. Compilen y firmen su proyecto de libreria de clases. La firma nos permite arrastar y soltar el assembly en el GAC. Entonces coloquen el assembly en el GAC.

4. Es momento de decirle a Sharepoint que les permita ejecutar el assembly, esto lo hacen asignando la siguiente entrada en el Web.config asociado con el sitio de sharepoint que están trabajando. Busque en su web.config la sección adecuada, en este caso <SafeControls>.

<SafeControl Assembly="MasterPageCustom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=254e1a9738d6d566" Namespace="MasterPageCustom" TypeName="*" Safe="True" />

5. Con lo anterior configurado finalmente debemos asignar el archivo Master.cs a la página maestra, sencillamente en la siguiente línea de su archivo .master asociado a su sitio de Sharepoint hacen el siguiente cambio.

<%@Master language="C#" Inherits="MasterPageCustom.Master,MasterPageCustom,Version=1.0.0.0, Culture=neutral, PublicKeyToken=254e1a9738d6d566" %>

Importante: El valor de PublicKeyToken, obviamente cambiará según su libreria de clases, y lo pueden ver en el GAC muy fácilmente viendo las propiedades del archivo ahi mismo.

Si todo va bien lo anterior estará funcionando sin problema y desplegandoles el título asignado a su sitio raíz o subsitio en el Label que se ha colocado en la Master.

Además del tema técnico, lo que vemos aquí es la potencia de Sharepoint + .NET, que nos permitirá hacer muchas cosas espectaculares de forma programática.

Feliz code behind!!

No comments: