Modificando el Web.config al desplegar una solución en SharePoint


Hola a todos,

Últimamente estoy intentando trabajar en la mejora de los desarrollos y de cómo enfocar las soluciones de SharePoint que después se desplegarán en la granja. Un aspecto de los que me quedaba por trabajar tenía que ver con el web.config de una aplicación web. En ocasiones, por diferentes motivos, algunas soluciones requieren de algunos parámetros de configuración para su funcionamiento, como es evidente, el lugar de esos parámetros es en el web.config (en el apartado de appSettings por ejemplo) de la aplicación web, que se encuentra en el caso de SharePoint en la ruta “C://inetpub/wwwroot/wss/VirtualDirectories”. Pero, imaginemos que tenemos una granja con varios servidores, ¿Es necesario ir a cada servidor de nuestra granja, acceder a su web.config y establecer esos parámetros de configuración manualmente?, es evidente que no, y que eso se trata de una mala práctica (Lo digo con conocimiento de causa XD). Para modificar el web.config de una aplicación web y añadirle parámetros de configuración que necesite nuestra solución, SharePoint nos proporciona los mecanismos necesarios.

Una buena solución puede ser utilizar el evento de activación y desactivación de una característica en una solución de SharePoint, para crear o borrar esos parámetros de configuración del web.config correspondiente. Para hacer esto disponemos de la clase SPWebConfigModification.

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx

Esta clase nos permitirá establecer las modificaciones que queremos hacer al web.config. Además, también haremos uso de la clase SPWebApplication para añadir los cambios que hayamos definido previamente.

Definiendo las modificaciones del web.config

Como ya he comentado, para definir estas modificaciones, se usa la clase SPWebConfigModification, para la que habrá que definir en cada caso, una serie de propiedades que voy a describir a continuación:

  • Name: Esta propiedad no es un nombre interno dado a la modificación. Se debe indicar la etiqueta del XML que se quiere modificar, además de todos los parámetros que se desean establecer del mismo. Esta propiedad posibilita a SharePoint el borrado posteriormente
  • Path: Indica el padre del nodo que se está intentando añadir o establecer
  • Owner: Esta propiedad es muy importante a la hora eliminar las modificaciones del web.config. Lo que hace es establecer un nombre único para los cambios que se han realizado.
  • Type: En la mayoría de las ocasiones se utilizará el valor EnsureChildNode
  • Value: La etiqueta XML que se quiere añadir en el web.config

Vamos a ver ahora un ejemplo de la definición de una modificación del web.config usando esta clase y sus propiedades.

SPWebConfigModification entry = new SPWebConfigModification();
entry.Name = @"add[@key='KeyExample'][@value='ValueExample']";
entry.Path = "configuration/appSettings";
entry.Sequence = 0;
entry.Owner = "Owner";
entry.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
entry.Value = @"<add key='KeyExample' value='ValueExample' />";

Añadiendo las modificaciones al web.config

Una vez que ya hemos creado la modificación que queremos hacer, la añadiremos utilizando la clase SPWebApplication de la siguiente manera.

SPWebApplication webApp = properties.Feature.Parent as SPWebApplication;

webApp.WebConfigModifications.Add(entry);

/*Call Update and ApplyWebConfigModifications to save changes*/
webApp.Update();
webApp.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();

La parte más reseñable de este código es la última línea, donde se llama a la función ApplyWebConfigModifications, os dejo el enlace a la MSDN donde se explica lo que hace esta función, lo cual me ha resultado interesante.

http://msdn.microsoft.com/es-es/library/microsoft.sharepoint.administration.spwebservice.applywebconfigmodifications.aspx

Eliminando las modificaciones del web.config

Para eliminar las modificaciones que hemos insertado anteriormente, por ejemplo, en el evento de desactivación de la característica correspondiente, usaremos, como ya mencionamos anteriormente la propiedad Owner de la clase SPWebConfigModification. Lo que haremos será obtener todas las modificaciones del SPWebApplication, comprobar aquellas cuyo Owner se corresponde con el de las modificaciones que queremos borrar, y en caso de que coincidan las borramos. Vamos a ver el código de cómo tendríamos que hacerlos.

private void removeConfigModification(SPWebApplication webApp)
{
     SPWebConfigModification entry = null;

     if (webApp.WebConfigModifications.Count > 0)
     {
          for (int i = webApp.WebConfigModifications.Count - 1; i >= 0; i--)
          {
              if (webApp.WebConfigModifications[i].Owner == "Owner")
              {
                  entry = webApp.WebConfigModifications[i];
                  webApp.WebConfigModifications.Remove(entry);
              }
          }

          webApp.Update();
          webApp.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
     }
}

Dejo por último algunos enlaces que me han servido de utilidad relacionados con este tema y donde es posible que haya más información sobre cómo se puede utilizar la modificación del web.config en SharePoint.

http://blogs.perficient.com/microsoft/2013/02/how-to-make-web-config-changes-with-a-feature-and-why-you-should/

http://blog.crsw.com/2007/09/20/how-to-modify-the-web-config-file-in-sharepoint-using-spwebconfigmodification/

http://smindreau.wordpress.com/2013/06/12/finally-the-way-to-add-web-config-modifications-to-sharepoint/

Y esto es todo, espero que os pueda ser de utilidad, a mi me ha venido muy bien en mi trabajo para mejorar la organización y estructuración de los proyectos de SharePoint.

Un saludo a todos

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s