Feature stapling
Activation de feature sur base de modèle de site
10/02/2010
2003 lectures
1 commentaire
5/5 (1 vote)
Le principe de feature stapling, bien qu'il est assez méconnu, est assez pratique. Celui-ci sert à activer automatiquement une feature à la création d'un site basé sur un certain modèle. Le principe est donc d'associer une feature à une définition de site pour que cette feature soit activée automatiquement lorsqu'un site basé sur cette définition est créé.
Nous allons développer un exemple tout simple pour montrer ce principe. Effectivement, nous allons créer une feature qui va ajouter une liste sur le site racine d'une collection de site. Nous lierons ensuite cette feature à la définition du site d'équipe pour qu'elle soit automatiquement activée si un utilisateur crée un site de ce type.
Commencez donc par ouvrir Visual Studio, créez un nouveau projet WSP Builder Project et nommez-le FeatureStapling.
Nous allons ensuite créer la feature qui devra être automatiquement activée. Ici, nous allons utiliser le principe de feature receiver pour créer la liste à l'activation de la feature. Cliquez donc avec le bouton droit de votre souris sur votre projet et faites Add > New Item et choisissez Blank feature :
Choisissez Site pour le scope de cette feature. Supprimez ensuite le fichier Elements.xml ainsi que le contenu de l'élément ElementManifest. Au final, votre fichier feature.xml devrait contenir ceci :
Ajoutez ensuite une nouvelle classe à votre projet que vous nommerez AutomaticFeatureReceiver.cs.
Cliquez ensuite avec le bouton droit de votre souris sur le dossier References de votre projet et cliquez sur Add Reference. Dans la liste qui apparaît, choisissez Windows SharePoint Services et validez. Revenez ensuite dans votre classe et rendez-la publique en rajoutant public devant le mot-clé class. Ajoutez enfin la directive suivante :
Faites également dériver votre classe de SPFeatureReceiver :
Le code de la fonction FeatureActivated ne va pas être compliqué, il va se contenter de créer une liste sur le site racine de la collection de site. Le code nécessaire pour cela est :
Nous récupérons simplement le parent de la feature, c'est à dire, l'objet SPSite et nous ajoutons une liste au site racine de cette collection. Nous allons maintenant lier ce code à la feature pour que celui-ci s'exécute à l'activation de celle-ci. Commencez par compiler votre solution pour obtenir votre fichier dll. Ouvrez ensuite Reflector et récupérez la signature de votre assembly. Enfin, ajoutez l'attribut ReceiverAssembly et ReceiverClass à votre fichier feature.xml. Au final, vous devriez obtenir quelque chose de similaire à :
Maintenant que notre feature est développée, nous allons développer la feature permettant d'associer celle que nous venons de créer et la définition du site d'équipe. Cliquez donc avec le bouton droit de votre souris sur votre projet et choisissez Add > New Item et sélectionnez Blank Feature. Nommez cette feature FeatureStapling et modifiez sa portée sur Farm. Effectivement, cette feature devra être activée avant que l'on crée un site, nous la plaçons donc au niveau de la ferme.
Ouvrez maintenant le fichier Elements.xml de cette feature. C'est dans ce fichier que nous allons définir l'association de la feature et de la définition de site. C'est extrêmement simple, effectivement, il suffit de taper :
Comme vous voyez, tout cela se fait en une ligne grâce à l'élément FeatureSiteTemplateAssociation. Le premier attribut de cet élément va nous permettre de dire quelle feature nous voulons associer. Il suffit simplement de faire passer le GUID de cette feature. Le deuxième attribut permet d'indiquer la définition de site auquel nous voulons associer la feature. La manière de connaitre la valeur de l'attribut TemplateName est assez simple. Si vous vous rendez dans le dossier 12\TEMPLATE\1033\XML, il y a un fichier WEBTEMP.XML. Si vous ouvrez ce dernier, vous verrez :
Ce code permet de faire apparaitre une définition de site dans la liste des templates disponibles à la création d'un nouveau site. Vous verrez que le template se nomme STS. Nous avons ensuite différente configuration avec un ID défini. Ici, en mettant STS#0, nous indiquons que nous nous basons sur le template STS et la configuration 0 (=> Team Site). Autrement dit, si vous aviez voulu associer votre feature à un Blank Site, vous auriez dû mettre STS#1.
Compilez et déployez maintenant votre projet. Une fois ceci fait, rendez-vous dans la centrale d'administration de SharePoint et créez un nouveau site d'équipe (Team site). Une fois celui-ci créé, affichez tout le contenu de ce site, et vous verrez apparaître une liste nommée Automatic List. Allez maintenant dans Site Settings > Site collection features :
Vous voyez que notre feature est automatiquement activée à la création du site d'équipe.
Télécharger l'exemple
Nous allons développer un exemple tout simple pour montrer ce principe. Effectivement, nous allons créer une feature qui va ajouter une liste sur le site racine d'une collection de site. Nous lierons ensuite cette feature à la définition du site d'équipe pour qu'elle soit automatiquement activée si un utilisateur crée un site de ce type.
Commencez donc par ouvrir Visual Studio, créez un nouveau projet WSP Builder Project et nommez-le FeatureStapling.
Nous allons ensuite créer la feature qui devra être automatiquement activée. Ici, nous allons utiliser le principe de feature receiver pour créer la liste à l'activation de la feature. Cliquez donc avec le bouton droit de votre souris sur votre projet et faites Add > New Item et choisissez Blank feature :
Choisissez Site pour le scope de cette feature. Supprimez ensuite le fichier Elements.xml ainsi que le contenu de l'élément ElementManifest. Au final, votre fichier feature.xml devrait contenir ceci :
Ajoutez ensuite une nouvelle classe à votre projet que vous nommerez AutomaticFeatureReceiver.cs.
Cliquez ensuite avec le bouton droit de votre souris sur le dossier References de votre projet et cliquez sur Add Reference. Dans la liste qui apparaît, choisissez Windows SharePoint Services et validez. Revenez ensuite dans votre classe et rendez-la publique en rajoutant public devant le mot-clé class. Ajoutez enfin la directive suivante :
Faites également dériver votre classe de SPFeatureReceiver :
Le code de la fonction FeatureActivated ne va pas être compliqué, il va se contenter de créer une liste sur le site racine de la collection de site. Le code nécessaire pour cela est :
Nous récupérons simplement le parent de la feature, c'est à dire, l'objet SPSite et nous ajoutons une liste au site racine de cette collection. Nous allons maintenant lier ce code à la feature pour que celui-ci s'exécute à l'activation de celle-ci. Commencez par compiler votre solution pour obtenir votre fichier dll. Ouvrez ensuite Reflector et récupérez la signature de votre assembly. Enfin, ajoutez l'attribut ReceiverAssembly et ReceiverClass à votre fichier feature.xml. Au final, vous devriez obtenir quelque chose de similaire à :
Maintenant que notre feature est développée, nous allons développer la feature permettant d'associer celle que nous venons de créer et la définition du site d'équipe. Cliquez donc avec le bouton droit de votre souris sur votre projet et choisissez Add > New Item et sélectionnez Blank Feature. Nommez cette feature FeatureStapling et modifiez sa portée sur Farm. Effectivement, cette feature devra être activée avant que l'on crée un site, nous la plaçons donc au niveau de la ferme.
Ouvrez maintenant le fichier Elements.xml de cette feature. C'est dans ce fichier que nous allons définir l'association de la feature et de la définition de site. C'est extrêmement simple, effectivement, il suffit de taper :
Comme vous voyez, tout cela se fait en une ligne grâce à l'élément FeatureSiteTemplateAssociation. Le premier attribut de cet élément va nous permettre de dire quelle feature nous voulons associer. Il suffit simplement de faire passer le GUID de cette feature. Le deuxième attribut permet d'indiquer la définition de site auquel nous voulons associer la feature. La manière de connaitre la valeur de l'attribut TemplateName est assez simple. Si vous vous rendez dans le dossier 12\TEMPLATE\1033\XML, il y a un fichier WEBTEMP.XML. Si vous ouvrez ce dernier, vous verrez :
Ce code permet de faire apparaitre une définition de site dans la liste des templates disponibles à la création d'un nouveau site. Vous verrez que le template se nomme STS. Nous avons ensuite différente configuration avec un ID défini. Ici, en mettant STS#0, nous indiquons que nous nous basons sur le template STS et la configuration 0 (=> Team Site). Autrement dit, si vous aviez voulu associer votre feature à un Blank Site, vous auriez dû mettre STS#1.
Compilez et déployez maintenant votre projet. Une fois ceci fait, rendez-vous dans la centrale d'administration de SharePoint et créez un nouveau site d'équipe (Team site). Une fois celui-ci créé, affichez tout le contenu de ce site, et vous verrez apparaître une liste nommée Automatic List. Allez maintenant dans Site Settings > Site collection features :
Vous voyez que notre feature est automatiquement activée à la création du site d'équipe.
Télécharger l'exemple






1 commentaires
PEINOIT Toni a dit:
Bonjour,
Je développe actuellement une custom WebPart pour MS Project EPM 2007 (moteur Sharepoint 2007).
J'ai modifié la "site definition" de mon PWA (Project Web Access) afin que ma webpart se déploie automatiquement dans le PWS (Project WebSite) lorsqu'un nouveau projet est crée.
Seulement, et parce que ces PWS gèrent la personnalisation (ajout/suppression/déplacement de widgets pour chaque ressource), cet ajout automatique de ma WebPart ne s'effectue pas.
Pour voir ma WebPart se charger automatiquement, j'ai dû recréer un deuxième PWA. Et là ça fonctionne. Seulement ça ne m'arrange pas franchement...
Pensez-vous que le "feature Stapling" puisse être la solution à mon problème. Que me conseilleriez-vous?
En vous remerciant,
Cordialement,
Toni
Ajouter un commentaire