le delegate control “AdditionalPageHead” : l’intégration à posteriori (comme Jquery par exemple)
Je poste ce truc bien utile car souvent méconnu et pourtant si pratique dans certains montage SharePoint un peu “exotique”.

Mais avant, un peu de théorie :)
Un des points fondamentaux de la technologie SharePoint et de sa gouvernance et la gestion fine des déploiements. Tout bon IT SP qu’ils travaillent en Suisse ou en Belgique (coucou) se refuse bien souvent à intervenir ou pire laisser intervenir des externes en direct sur les machines SP de production pour “déployer ce qu’il faut”.
Sous entendu, merci d’utiliser les solutions
Corollaire important : merci de ne pas toucher
- aux fichiers du 12 sans raisons
- à nos divers fichiers/features provenant d’autre projet
En effet, on a tendance à l’oublier mais les fermes SharePoint sont avant tout des usines à sites, il est donc rare qu’elle n’héberge qu’un seul site portail ou un espace collaboratif. Ces fermes sont mutualisés !
Elles possèdent donc avec le temps des livrables diverses et variés, pas forcement pensé les un pour les autres.
On ne peut donc forcement partir de l’apriori qu’il faut absolument retoucher les Master Pages pour intégrer son petit script “qui vas bien”…
>>> A noter que c’est similaire si vous dépendez de la default.master comme par exemple pour les My Site
Autre soucis, tout n’est pas possible via de Feature Receivers, même si beaucoup jurent sur la tête d’Erol Giraudy le contraire.
Non pas que le code est restrictif, mais c’est plutôt le cycle de vie propre des Features. il y a des cas ou leur activation est trop tôt. Comme pour le cas de la génération de site Web. Les Receivers vont s’activer avant même que les listes ou les document soient provisionnées… Donc erreur d’activation ….
C’est la qu’intervient ce cher Delegate Control présent par défaut dans le Master Pages SharePoint : “AdditionalPageHead”
Je ne vous rappelle pas les principes d’injection de control, cet article le fait très bien : http://www.asp-php.net/tutorial/asp.net/sharepoint-delegate-controls.php
Ce Delegate est un peu particulier car il est configuré par défaut en mode multi control (AllowMultipleControls=true )
>>> vous pouvez donc activer plusieurs controls dans ce même delegate : il vas les additionner et non les remplacer les uns par les autres.
Une sorte de “include” dynamique (pour ceux qui ont connus ASP …)
L’idée générale ?
Simple : Comme vous pouvez déployez de multiples control ou ascx dans le delegate AdditionalPageHead et individuellement, vous pouvez gérer le déploiement de composants commun à vos sites ou de composant spécifique voir dépendant à vos projets (et vice et versa).
Une activation niveau Web App, et vous êtes garantit que l’intégration couvre toutes vos collection en ligne, sans rien casser, ni perturber en mutualiser !
Et aussi les désactiver au besoin.
Avec un peu de recul, le principe du multi control du AdditionalPageHead permet de gérer ce genre de scenarii bien pratique
- Intégration de JS / CSS externe sur plateforme existante
- donc par extension, le déploiement de Jquery
- Activation de code métier post génération de site (pour le soucis de Feature Receiver à la création de site)
- Ajouter un tracker pour loger les visites ou toute autres comportement par défaut
- Gérer l’ajout, le retrait, la modification de WebPart dans les My sites sans les itérer en batch
- Personnaliser un team site sans site définition
- créer des sous site
- modifier la master
- insérer des documents
- paramétrer les sous site selon la configuration du père
- …
- …
Bref, je vous laisse imaginer la suite
Si vous êtes intéressé par un petit exemple, je ne peux que vous conseiller le post original de Jan Tielen pur ce qui concerne le déploiement de Jquery :
http://weblogs.asp.net/jan/archive/2008/11/20/sharepoint-2007-and-jquery-1.aspx
Astucieux mais si efficace
Renaud Comte aka TheMit (SPGyver for ever)
Member of WygTeam
http://www.wygwam.com
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :