SharePoint 2010: Personalización con temas (II)!

Hace ya unos meses os hablé sobre las novedades que incorpora SharePoint 2010 en cuanto a la personalización de la interfaz de usuario mediante temas. En este segundo post de la serie, os quiero mostrar como podemos hacer la personalización de forma programática sin usar las páginas de aplicación de SharePoint 2010:

  • Lo primero que haremos es crear un nuevo tema usando Microsoft Office PowerPoint 2007 / 2010 tal y como os comenté en el primer post de la serie.
  • Iniciamos Visual Studio 2010 y creamos un proyecto de SharePoint 2010 de tipo “Empty SharePoint Project”.
  • Una vez creado el proyecto, le añadimos un elemento de tipo “Module”.
image image image
  • En el SPI (SharePoint Project Item) que se crea, eliminamos el archivo .txt y añadimos el tema creado con PowerPoint.

image[13]

  • Modificamos el archivo “Elemnts.xml” de la siguiente forma:
   1: <?xml version="1.0" encoding="utf-8"?>

   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/">

   3:   <Module Name="ThemeAdderModule" Path="ThemeAdderModule" Url="_catalogs/theme" RootWebOnly="true">

   4:   <File Path="TemaDemo.thmx" Url="TemaDemo.thmx" IgnoreIfAlreadyExists="true" Type="GhostableInLibrary"/>

   5: </Module>

   6: </Elements>

  • Añadimos a la característica del proyecto un manejador de eventos que utilizaremos para activar programáticamente el tema creado.

image

  • Añadimos una referencia a Microsoft.SharePoint.Utilities y codificamos el evento FeatureActivated del manejador de acuerdo al siguiente código:
   1: using System;

   2: using System.Runtime.InteropServices;

   3: using System.Security.Permissions;

   4: using Microsoft.SharePoint;

   5: using Microsoft.SharePoint.Security;

   6:  

   7: //Espacios de nombres necesarios

   8: using Microsoft.SharePoint.Utilities;

   9:  

  10: namespace SPThemeAdder.Features.Feature1

  11: {

  12:     /// <summary>

  13:     /// This class handles events raised during feature activation, deactivation, installation, uninstallation, and upgrade.

  14:     /// </summary>

  15:     /// <remarks>

  16:     /// The GUID attached to this class may be used during packaging and should not be modified.

  17:     /// </remarks>

  18:  

  19:     [Guid("e5812fbf-7f7b-4949-a442-0342cf4d27e1")]

  20:     public class Feature1EventReceiver : SPFeatureReceiver

  21:     {

  22:         // Uncomment the method below to handle the event raised after a feature has been activated.

  23:  

  24:         public override void FeatureActivated(SPFeatureReceiverProperties properties)

  25:         {

  26:             if (properties.Feature.Parent is SPWeb)

  27:             {

  28:                 SPWeb spwWeb = (SPWeb)properties.Feature.Parent;

  29:                 ThmxTheme.SetThemeUrlForWeb(

  30:                     spwWeb, SPUrlUtility.CombineUrl(

  31:                         spwWeb.Site.ServerRelativeUrl,

  32:                         "_catalogs/theme/TemaDemo.thmx"));

  33:             }

  34:         }

  35:  

  36:  

  37:         // Uncomment the method below to handle the event raised before a feature is deactivated.

  38:  

  39:         //public override void FeatureDeactivating(SPFeatureReceiverProperties properties)

  40:         //{

  41:         //}

  42:  

  43:  

  44:         // Uncomment the method below to handle the event raised after a feature has been installed.

  45:  

  46:         //public override void FeatureInstalled(SPFeatureReceiverProperties properties)

  47:         //{

  48:         //}

  49:  

  50:  

  51:         // Uncomment the method below to handle the event raised before a feature is uninstalled.

  52:  

  53:         //public override void FeatureUninstalling(SPFeatureReceiverProperties properties)

  54:         //{

  55:         //}

  56:  

  57:         // Uncomment the method below to handle the event raised when a feature is upgrading.

  58:  

  59:         //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)

  60:         //{

  61:         //}

  62:     }

  63: }

  • Hacemos el despliegue del proyecto con Visual Studio 2010 y comprobamos que el cambio de tema ha sido efectivo.

image

Y hasta aquí llega este segundo post sobre personalización con temas en SharePoint 2010.

Visual Studio 2010: Libro gratuito–“Moving to Microsoft Visual Studio 2010”…por si no lo tenías claro!

Una pregunta muy típica de los desarrolladores y las empresas de desarrollo que no están tan actualizadas como debieran en cuanto a plataforma de desarrollo es la de que versión de Visual Studio usar ya que están pensando en actualizarse…yo siempre les digo lo mismo: si estáis valorando entre pasaros a Visual Studio 2008 o Visual Studio 2010, sin duda escoger Visual Studio 2010. De todas formas, cualquier soporte para apoyar esta afirmación nunca viene mal y en este caso Microsoft Press acaba de liberar un libro para libre descarga: “Moving to Microsoft Visual Studio 2010”. Podéis descargaros el libro desde este enlace y el código fuente desde este otro enlace.

image