SharePoint et les HttpModules - 2/3
Pour la suite de cette série sur SharePoint et les HttpModules (flashback), je vais vous expliquer (voire réexpliquer pour ceux qui ont assisté à ma session sur "comment étendre sa plateforme SharePoint 2007" lors des TechDays) une autre manière de les utiliser.
Le 2ème intérêt de ces modules c'est d'intercepter et d'altérer la réponse renvoyée au navigateur. En effet, il existe un événement, "ReleaseRequestState", qui intervient après la récupération de toutes les informations de la requête et surtout qui va nous permettre d'utiliser les "Filters".
La technique est la suivante :
void context_ReleaseRequestState(object sender, EventArgs e)
{
response.Filter = new MyPageFilter(response.Filter);
}
Bien sûr, on en profitera pour y insérer quelques tests histoire de ne pas utiliser inutilement ce mécanisme et éviter au maximum les impacts sur les performances de votre serveur web.
Vous trouverez plus d'explications grâce aux articles suivants:
Au final, nous changeons ainsi le code HTML renvoyé par SharePoint et du coup effectuer des modifications de l'interface sans avoir à toucher les pages originales (car tout le monde sait que changer les pages standard, c'est mal !). Je vous invite aussi à jeter un oeil sur ce projet CodePlex : Macaw SharePoint Skinner qui introduisait déjà ces concepts en modifiant le look des pages renvoyées par SharePoint (version 2003 à l'époque).
Dans le prochain et dernier billet sur les modules HTTP, je proposerai un projet complet d'altération du contenu avec quelques cas pratiques à l'appui, ainsi qu'une installation made in SharePoint.
Gat, SPModule again
[Warning] Comme me l'a fait justement remarqué Renaud, je n'ai pas assez mis en avant l'impact sur les performances. Je l'avais plus évoqué durant la session aux TechDays, mais sachez que les modules ont un impact sur les performances puisqu'ils vont se retrouver appelés pour toutes les requêtes effectuées sur le serveur. Evitez donc le trop et gardez son utilisation pour des cas bien spécifiques et pour lesquels la perte en terme de performance est palliée par la fonctionnalité apportée par le module.