Codemotion: El evento de los eventos de desarrollo tendrá lugar en marzo y en Madrid!

Pues eso, el próximo 24 de marzo tendrá lugar en España un evento de desarrollo de SW qué dará mucho que hablar no sólo ya por su carácter abierto ya que no está atado a una tecnología o metodología en cuestión, sino también por la calidad de los ponentes que participarán en el mismo y el lugar dónde se celebrará: La Universidad Politécnica de Madrid. El evento en cuestión es Codemotion y continua la experiencia del mismo evento realizado en Italia el año 2011 en el que participaron nada menos que 2.500 personas y en el que se realizaron hasta 7 tracks de sesiones paralelas. El objetivo de la edición de Codemotio de este año es poder estar al nivel de ediciones previas y demostrar que en  España hay una gran pasión por la tecnología y desarrollo del SW como lo demuestran las diversas comunidades técnicas que hay en nuestro país y algunas de las cuáles están colaborando en la organización de este evento (en lo que a SharePoint y a mí me toca, SUGES está como comunidad colaboradora y si todo va bien, habrá sesiones específicas de SharePoint).

image

Y otra gran detalle, ir a Codemotion no cuesta dinero, la entrada es gratuita y el registro ya está abierto desde este enlace. Os animo desde ya a que os inscribáis y a que sigáis todas las novedades del evento en Twitter (codemotion_es) y en LinkedIn (http://linkd.in/tE52YK). Y por supuesto, el call for papers está abierto para empezar a enviar sesiones al evento.

SharePoint 2010: Como leer y modificar el archivo web.config de una aplicación web!

En ciertas ocasiones, tendremos que recurrir a modificar el archivo web.config de una aplicación web para por ejemplo añadir cadenas de conexión, nuevas entradas en los Safe Controls, etc. Estas modificaciones se pueden realizar de forma manual o bien de forma automática mediante un Feature Event Receiver por ejemplo:

  • En VS 2010, creamos un proyecto de tipo “Empty SharePoint Project”. Elegimos como tipo de despliegue “Deploy as farm solution”.
  • Añadimos una Feature al proyecto.
  • A través del diseñador de características, configuramos la Feature de forma adecuada.

image

  • Añadimos un Event Receiver para la Feature. Añadimos directivas using a Microsoft.SharePoint.Administration y System.Collections.ObjectModel.
  • Codificamos el método FeatureActivated() de la siguiente forma:
   1: SPWebApplication webApplication = (SPWebApplication)properties.Feature.Parent;   

   2: SPWebConfigModification myModification = 

   3:     new SPWebConfigModification();

   4: myModification.Path = 

   5:     "configuration/SharePoint/SafeControls";

   6: myModification.Name = 

   7:     "SafeControl[@Assembly='MyCustomAssembly'][@Namespace='MyCustomNamespace'][@TypeName='*'][@Safe='True']";

   8: myModification.Sequence = 0;

   9: myModification.Owner = 

  10:     "contoso\\Administrator";

  11: myModification.Type = 

  12:     SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;

  13: myModification.Value = 

  14:     "<SafeControl Assembly='MyCustomAssembly' Namespace='MyCustomNamespace' TypeName='*' Safe='True' />";            

  15:  

  16: webApplication.WebConfigModifications.Add(myModification);

  17: webApplication.WebService.ApplyWebConfigModifications();

  18: webApplication.Update();

  • Como vemos, para modificar el archivo WebConfig nos creamos una instancia de SPWebConfigModification que a través de sus propiedades nos permite indicar dónde queremos añadir las modificaciones del archivo web.config (Path), las modificaciones a añadir (Name) y el valor (Value), el orden (Sequence), etc.
  • Una vez configurada la modificación, no tenemos más que añadirla al correspondiente objeto SPWebApplication que hemos instanciado a partir de la feature y listo.
  • Hacemos el despliegue de la Feature y comprobamos que efectivamente el archivo web.config se ha modificado:

image

Por supuesto, para dejarlo todo bien hecho deberíamos añadir a la feature el método FeatureDeactivating() habría que hacer la correspondiente limpieza.