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!!

Saturday, March 21, 2009

Sharepoint Tips y Tricks I Parte

Tip 1- Comprando libros

El primer consejo que les puedo dar es, compren libros, muchos libros, pero que ojalá y obviamente sean buenos. Para ahorrarles en gastos innecesarios, dejenme recomedarles dos biblias excelentes. Muy claramente un libro es sobre Windows Sharepoint Services 3.0 y el otro es sobre MOSS 2007. Estos dos engendros se han convertido en mi mejor fuente de información, por su claridad y excelente forma de explicar cada concepto de estos dos sabores de Sharepoint. Les dejo el enlace de Amazon para que detallen y analicen si los adquieren o no, yo lo hice a ojo cerrado:

http://www.amazon.com/Mastering-Windows-SharePoint-Services-3-0/dp/0470127287/ref=sr_1_16?ie=UTF8&s=books&qid=1237687347&sr=1-16

http://www.amazon.com/Microsoft-Office-SharePoint-Server-Practices/dp/0735625387/ref=sr_1_1?ie=UTF8&s=books&qid=1237687534&sr=1-1

Tip 2- Lean estos artículos antes de...

La revista MSDN Magazine llega con un muy interesante artículo, donde los autores comparten experiencias de la vida real y hacen unas excelentes recomendaciones, que dada mi experiencia uno debería tomar en cuenta antes de hacer cualquier cosa con Sharepoint, llamese WSS 3.0 o MOSS 2007.

http://msdn.microsoft.com/es-co/magazine/dd458798.aspx

Igualmente detallen cada uno de los artículos que el citado enlaza poque son igualmente muy buenos, sobre todo si somos desarrolladores marca Sharepoint.

Tip 3- Ya me leí los artículos y ahora?

Después de tener conceptos claros, por lo menos lo básico, es hora de destapar la caja e instalar Sharepoint, aclaro que la instalación debió ser tema de lectura antes de, porque es todo un proceso de cuidado. Si la intención es un ambiente de desarrollo, les recomiendo mucho tener claro el punto del artículo recomendado en Tip 2 "Desarrollando sin Servidor", es decir, que no necesariamente tenemos porque instalar Visual Studio .NET en el servidor donde reside Sharepoint, la idea consumir los Web Services que ofrece la plataforma http://msdn.microsoft.com/es-co/library/ms458094.aspx. Si es un máquina virtual lo que ustedes desean pues simplemente instalen todo ahi. Mi recomendación es que dejen la máquina virtual para juegos con muñecas, en un proyecto real, lo mejor es tener un buen servidor donde desarrollador y diseñador puedan trabajar a la par, ya que las exigencias de negocio de cada cliente exigirán la presencia de estos dos individuos, porque no hay cosa que el usuario final deteste más que el diseño por defecto de Sharepoint. Quieren comenzar a modificar el diseño básico de Sharepoint? todo un reto, y les recomiendo leer sobre Branding en Sharepoint. Si su diseñador es hábil, como en mi afortunado caso, presentenle Sharepoint Designer, aunque igual este señor los regañará, porque realmente lo que Designer hace con el HTML de las páginas, es sencillamente desastrozo, o bueno por lo menos desde la perspectiva del diseñador, quien está acostumbrado a ver cosas más "limpias". Pero no habiendo más, es hora de explotar Sharepoint designer, así que una buena idea es comenzar viendo a los mejores: http://www.microsoft.com/downloads/details.aspx?familyid=5B10F061-41D4-48CE-85CB-01D46772240D&displaylang=en

No desperdicien dinero en libros de este engendro, que quede claro, no lo veo nada necesario.

Mis consejos son:

- Dejen las páginas maestras de Sharepoint quietas, no las modifiquen, creen sus propias páginas maestras, ojalá basadas en las por defecto y de ahi comiencen el embellecimiento.

- Estudien los formularios ASPX propios de Sharepoint, esos utilizan páginas maestras por defecto de Sharepoint, y por lo tanto no se renderizan con su página maestra, pero aclaro, pueden ponerlos apuntar a la que ustedes construyan. Sinceramente esos formularios propios de Sharepoint, deberían tratar de dejarlos como vienen, a no ser que el cliente les exija que debe conservarse el diseño en todos los rincones, hasta en los más reconditos. Esas formas son por ejemplo: DispForm.aspx, EditForm.aspx, NewForm.aspx.

- Dejen su página mestra global a todo sitio de su proyecto Sharepoint. How To? Primero coloquen su nueva master en el sitio raíz y en cada subsitio que la requiere sencillamente apunten con esta línea en sus páginas ASPX: MasterPageFile="~sitecollection/_catalogs/masterpage/miMaestra.master"

No se inventen más de dos páginas maestras por sitio, es decir máximo yo aconsejo tener la maestra del Home, cuando el cliente requiere que este sea totalmente diferente de lo demás, y su maestra global a cada subsitio. Esto ahorrará dolores de cabeza a ustedes y al adminstrador final.

- Como para el diseñador no hay vida después de las hojas de estilo o CSS, sencillamente estas serán creadas desde cero para su nueva personalización y será enlazada a través de su página mestra global: <link rel="stylesheet" type="text/css" href="miCSS.css"/>

Algo que deberán enfrentar seguramente, si nuevamente cuentan con un gran diseñador que quiere hacer retoques especiales a cosas como WebParts, es que se debe sobreescribir los estilos definidos en CORE.CSS, la hoja de estilos propia de Sharepoint, lo cual se puede lograr en miCSS.css. Les doy un ejemplo, imaginen que quieren ocultar el header de sus webparts, donde sharepoint coloca los titulos de las columnas que se muestran en cada webpart. Hacen esto en su CSS y listo, el estilo por defecto queda sobreescrito:

.default .ms-viewheadertr {
    display:none;
}

Pero deben tener cuidado que lo anterior afectará todos y cada uno de los formularios ASPX que muestran webparts, lo cual no puede ser muy deseable, pero esto ya será vuestro problema.

Esta es mi primera entrada sobre temas relacionados a Sharepoint, que espero poder seguir escribiendo para dar guia y recibir su retroalimentación y así compartir las lecciones aprendidas.

Un abrazo!!