Articles Tagués ‘SPWebProvisioningProvider’

Suite à mon article précédent, parlant de Site Definition, je souhaitais aborder la mise en place d’un Site Provisioning.

Site Provisioning ?

Par le terme « Site Provisioning », nous considérons l’action de mettre en place un ensemble d’éléments, permettant la création d’un site, par exemple, template du site, lists, webparts, features, sécurité,…

Il est intéressant d’effectuer du provisioning à partir d’un site definition, en ne modifiant que le WEBTEMP*.XML, et donc en ne modifiant pas le fichier ONET.XML (Sujet traité dans un prochain article).

C’est ce cas que nous allons voir maintenant.

Création de notre premier Site Provisioning

Dans Visual Studio 2010, créez un projet de type « Site Definition » et modifiez le fichier WEBTEMP.XML et ONET.XML, comme mentionné dans mon article précédent.

Ajoutez une Classe (.cs), que vous nommerez « MYSD_ProvisioningProvider ».

Ajouter les références à SharePoint (Microsoft.SharePoint.dll) et ajouter les directives suivantes:

using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;
using Microsoft.SharePoint.Publishing;

Il suffit simplement de définir l’héritage avec la classe SPWebPRovisioningProvider et d’implémenter la méthode Provision().

C’est dans cette méthode que nous allons travailler.

Voici un exemple :

class MYSD_ProvisioningProvider : SPWebProvisioningProvider
{
public override void Provision(SPWebProvisioningProperties props)
{
SPWeb currentWeb = props.Web;
currentWeb.ApplyWebTemplate(« MYSD#1 »);
currentWeb.RoleDefinitions.BreakInHeritance(true,true); //Break Inheritance and maintain role assignments
currentWeb.Update();
}
}

Ce code applique le Web Template, renseigné dans le fichier ONET.XML, au site en cours de création.L’héritage de sécurité est brisé mais les rôles déjà définit sont recopiés.

Une fois notre ProvisioningProvider créé, nous allons modifier le WEBTEMP*.XML pour utiliser ce provider et non directement le fichier ONET.XML, qui lui sera appelé ultérieurement dans le code.

<?xml version= « 1.0″ encoding= « utf-8″?>
<!– _lcid= « 1033″ _version= « 12.0.4518″ _dal= « 1″ –>
<!– _LocalBinding –>
<Templates xmlns:ows= « Microsoft SharePoint « >
<Template Name= « MYSD » ID= « 10001″>
<Configuration ID= « 1″ Title= « My Site Definition » Hidden= »TRUE »  ImageUrl= »/_layouts/images/MYSD.GIF «  Description= « My SD Site «  DisplayCategory= « Custom  »  >
</Configuration>
</Template>

<Template Name= « MYSD_ProvisioningProvider » ID= « 10002″>
<Configuration ID= « 1″ Title= « My Site Definition » Hidden= »FALSE »   ImageUrl= »/_layouts/images/MYSD.GIF «  Description= « My SD Site «  DisplayCategory= « Custom  »  
ProvisionAssembly= »Assembly Reference »
ProvisionClass= »MyNameSpace.MYSD_ProvisioningProvider »>
</Configuration>
</Template>
</Templates>

Nous voyons que deux templates sont définis dont un seul utilise le site définition créé auparavant.L’autre référence notre assembly et notre classe MYSD_ProvisioningProvider.Vous remarquerez que le premier template référence sa configuration comme cachée (HIDDEN=True), ce qui veut dire, qu’on ne la verra pas dans la liste des templates.

Nous ne verrons que le deuxième template, avec aussi le nom « My Site Definition », vu que les deux templates ont le même TITLE.

En Bref, lorsque que nous souhaiterons créer un nouveau site, nous choisirons ce deuxième template (seul visible), qui appellera la méthode Provision(), appliquera notre premier template et modifiera la sécurité !!!

Et voilà !

Il vous sera alors possible de définir votre propre code dans le ProvisioningProvider en fonction de vos besoins.

Dans un prochain article, j’aborderai la problématique d’un ProvisioningProvider pour multiples site definitions.