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.

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

4 comentarios en “SharePoint 2010: Personalización con temas (II)!”

Deja un comentario

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