Modifier tous les Web.config de vos applications sans code

Il est fort possible que vous connaissiez le moyen de modification par programmation le fichier de configuration de votre application SharePoint grâce à la classe SPWebConfigModification, et si ce n'est pas le cas voici quelques pointeurs qui vont bien :

Mais on connait souvent moins l'existence de fichiers XML permettant d'appliquer des modifications aux fichiers de configuration lors de la création d'une application web. Ces fichiers sont présents dans le répertoire 12\CONFIG de vos serveurs SharePoint et doivent s'appeler "webconfig.[quelquechose].xml". Ici, les fichiers présents sur une installation de MOSS 2007 :

12\CONFIG folder and webconfig fles

Si on jette un coup d'oeil à l'un de ces fichiers (ici webconfig.osrv.xml), on remarque que son contenu est plutôt compréhensible :

WebconfigMods02

En effet, il est composé d'un noeud racine "<actions>" puis d'un ensemble de noeuds "<add>". En fait, il en existe d'autres. Voici une petite liste avec leur utilisation :

  • add : ajoute un noeud au niveau du chemin XPath fourni avec l'attribut "path", par exemple l'ajout des appSettings :
     <add path="configuration" id="{72DB2C92-8BC1-4767-A12C-94B67D46D0CF}">
      <appSettings />
     </add>
  • update : modifie les attributs d'un noeud défini par le chemin XPath + le nom du sous-noeud, par exemple ici l'assignation du provider "CurrentNavSiteMapProvider" par défaut et l'activation des sitemapproviders :
    <update path="configuration/system.web">
        <siteMap defaultProvider="CurrentNavSiteMapProvider" enabled="true"/>
    </update>
  • remove : (au hasard) retire un noeud du fichier de configuration, méthode inverse de l'add, par exemple retrait de filters:
     <remove path="configuration/SharePoint/RuntimeFilter" id="{0582988F-9C26-4990-8672-0099F4567B03}" />

Pour la présence des attributs "id" dans les fichiers déployés par défaut et leur utilité, je suppose que c'est un marqueur à rapprocher du "owner" des SPWebConfigModifications.

[Mise à jour importante] Cet attribut "id" est primordial pour les ajouts et suppressions. En effet, cet identifiant permet à SharePoint de garder une trace de l'ajout / suppression et évite ainsi dans le cas de l'ajout de créer des doublons lors de lancements ultérieurs de la commande "stsadm -o copyappbincontent". Générez donc un identifiant unique (Guid) et utilisez le. Pour ceux qui ne trouvent pas GenGuid.exe, il existe un (en fait plein) de générateurs en ligne : http://www.guidgenerator.com/ (celui à le mérite de se mémoriser facilement)

Petit rappel cependant : évitez de faire ce que font certains de ces fichiers à savoir ajouter un SafeControl, le système de déploiement (solutions SharePoint) sait très bien le faire !

Allez, enchaînons sur 2 cas pratiques :

  1. j'aimerai bien avoir automatiquement le mode debug activé sur mes environnements de dev
  2. j'aimerai aussi avoir directement le support de l'AJAX ASP.Net

C'est parti !

Donc pour commencer, il faut que je crée un fichier xml obéissant à la règle de nommage "webconfig.[nomperso].xml". Je vais l'appeler webconfig.spdev.xml.

A l'intérieur, je vais ajouter les entrées suivantes :

  • un "update" pour passer l'attribut callstack à true du noeud configuration/SharePoint/SafeMode
  • un autre "update" pour passer l'attribut debug à true du noeud configuration/system.web/compilation
  • tant qu'à faire, un "update" pour passer les customerrors à Off
  • et pour finir, l'ajout de l' httpHandler suivant :

    <add verb="GET" path="ScriptResource.axd"
    type="Microsoft.Web.Handlers.ScriptResourceHandler, Microsoft.Web.Extensions,
    Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    validate="false"/>

Ce qui va me donner le fichier suivant (vous pouvez aussi le récupérer ici):

WebconfigMods03

Vous n'avez plus qu'à créer vos applications web et, oh bonheur, vos modifications seront appliquées !

Cerise sur le gâteau, si vous exécutez la commande "stsadm -o copyappbincontent" sur votre serveur, ce fichier sera appliqué à tous les sites web déjà créés. Dans le cadred d'une ferme de serveur, la commande est à lancer sur chacun des serveurs.

Pour finir, il existe bien un article concernant ce système dans le SDK, mais un peu court à mon goût : How To- Add Custom Configuration Settings to Extend a Web Application

Mon petit doigt me dit que ça doit vous donner quelques idées... ;)

Gat, SPModificateur

 

Commentaires

Le 28 May 2008 10:32, Gael Duhamel a dit:

Bonjour Gaetan,

Effectivement, je ne connaissais pas ce systeme de mise a jour via un flux xml. J'utilisais pour ce genre de deploiement le modele objet et son SPWebConfigModification.

Interesse par ton post, j'ai donc essaye de le mettre en place mais j'ai rencontre un soucis. J'ai ajoute dans un fichier xml (deploye par ma feature dans le repertoire config du 12) cette ligne:
<add path="configuration/system.web">
<xhtmlConformance mode="Strict" />
</add>

Lors de la toute premiere commande tout marche parfaitement bien, mon noeud est bien ajoute la ou je le voulais.

Le probleme de cette commande add est qu'elle ne verifie pas la presence du noeud a ajouter. Ce qui fais que si tu executes une nouvelle fois la commande stsadm -o copyappbincontent, ce noeud est ajoute une deuxieme fois. Et dans mon cas precis, cela fais planter mon application web car le noeud xhtmlConformance doit etre unique.

Pour remedier a cela, j'ai simplement ajoute juste avant la commande add, la commande remove:
<remove path="configuration/system.web/xhtmlConformance" />

Voili voilou :)

Gael
ps: Attention pour les fermes, le SDK stipule bien que cette commande doit etre executee sur chaque serveur.

Le 09 Jun 2008 11:33, Bouha a dit:

Salut,
c'est très intéressant comme technique mais peut-on l'appliquer uniquement pour les applications créées à partir d'un custom site definition, car là d'après ce que j'ai compris toute nouvelle apllication créée verra son web.config modifiée.

Merci

Le 09 Jun 2008 09:00, Gat a dit:

Non, ce procédé ne peut être utilisé que sur l'ensemble des applications web. Pour des besoins pour une application web donnée, il faudra utiliser le modèle objet et donc les SPWebConfigModifications.

Laisser un commentaire





Validation Image CAPTCHA