sábado, 12 de julio de 2014

Deployar un theme (sólo un spcolor) mediante una solución de Visual Studio

Creo un “Sharepoint 2013 – Empty Project”

image

Deployo la solución como farm solution

image

Agrego el mapeo de la carpeta

image

image

image

image

A continuación agrego un Module

image

Borramos Sample.txt

image

Agregamos de nuevo el archivo .spcolor dentro de la carpeta Theme

image

A continuación edito el archivo Elements.xml, agregando lo siguiente

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="Theme" Url="_catalogs/theme/15">
    <File Path="Theme\custom.spcolor" Url="custom.spcolor"
          Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE" />
  </Module>
</Elements>

image

Renombramos la feature

image

Hacemos doble click sobre la fature, y editamos el título y descripción. También cambiamos ell scope a “Site”

image

Deployamos la solución y vemos que ya está el archivo en el folder C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\GLOBAL\Lists\themes

image

También vemos que se deployó el archivo spcolor dentro de la carpeta themes/15

image

image

Ahora lo que vamos a hacer es que cuando se active la feature, se setee el theme donde se activa la feature

Para ello, agregamos un event receiver a la feature

image

Agregamos el siguiente código en el método FeatureActivated

public override void FeatureActivated(SPFeatureReceiverProperties properties)
       {
               SPSite siteCollection = (SPSite)properties.Feature.Parent;
               //activo esta feature para el root web del site collection donde se activa esta feature.
               var web = siteCollection.RootWeb;
               if (web == null)
               {
                   return;
               }

               var uri = new Uri(web.Url);
               var url = uri.AbsolutePath;

               if (url.Equals("/"))
               {
                   url = string.Empty;
               }

               var colorPaletteUrl = url + "/_catalogs/theme/15/custom.spcolor";
               var fontSchemeUrl = url + "/_catalogs/theme/15/SharePointPersonality.spfont";

               string backgroundImageUrl = null;
               const bool shareGenerated = true;

               web.ApplyTheme(colorPaletteUrl, fontSchemeUrl, backgroundImageUrl, shareGenerated);                   
       }

Una vez que deployan la solución, y activan la feature, se ve que se activa el custom color deployado

image

image

Que pasa si creamos un sub-site dentro del site collection? Debería tambien setear el custom color al subsite. Para ello creamos un event receiver de tipo

image

image

image

Dentro del método WebProvisioned, agregamos lo siguiente

  base.WebProvisioned(properties);// esta bien que se ejecute primero

            SPWeb website = properties.Web;
          
            SPSite siteCollection = properties.Web.Site;
            string colorPaletteUrl = SPUrlUtility.CombineUrl(siteCollection.ServerRelativeUrl, "_catalogs/theme/15/custom.spcolor");
            string fontSchemeUrl = SPUrlUtility.CombineUrl(siteCollection.ServerRelativeUrl, "_catalogs/theme/15/SharePointPersonality.spfont");

            string backgroundImageUrl = null;
            const bool shareGenerated = true;         

            properties.Web.ApplyTheme(colorPaletteUrl, fontSchemeUrl, backgroundImageUrl, shareGenerated);

image

Revisamos que se agregue dentro de la feature, el event receiver.

image

Deployamos de nuevo, y cuand creemos una nuevo sub-site, y la feature esté activada a nivel de site collection, le seteará el custom color al subsite.

En el caso que nos olvidemos de

Referencias:

http://msdn.microsoft.com/en-us/library/office/jj945889(v=office.15).aspx

http://msdn.microsoft.com/en-us/library/office/jj927175(v=office.15).aspx

Deploy via powershell: http://social.technet.microsoft.com/wiki/contents/articles/23510.sharepoint-2013-deploy-and-apply-theme-to-sharepoint-sites-with-powershell.aspx

No hay comentarios:

Publicar un comentario