Site Provisioning sous SharePoint : Comment faire ?

Publié: 17/05/2011 dans SharePoint 2007, SharePoint 2010
Tags:, , , ,

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.

Publicités
commentaires
  1. Nox dit :

    Plop !
    Fait gaf, tes guillemets sont toutes faussé !
    Sinon ça fonctionne très bien, je le vois dans ma liste de sites que je peux créer, mais comment fait-on pour personnalisé ce site au niveau contenue? (Liste, design, autorisation…)

    Merci

  2. nox dit :

    Cool j’attends la suite avec impatience !

  3. Woodo dit :

    Thank you!!! I have copied the SP Publishing Site Template, and wanted to modify some settings in the Pages Library. Your approach lets me provision the site, then programmatically change the parts I can’t do in ONET.XML (In my case, ONET.XML only allows Major/Minor versioning, not the actual number of versions to retain)

    • Maxime Legena dit :

      The definition in ONET.XML is called by ApplyWebTemplate method.If you want to modify or adapt some elements like Library, permission, …, you must modify the .NET code in the Provision() method before currentWeb.Update().
      You will be able to implement all modficiations you want, because I agree, you can’t do everything in ONET.xml.
      I hope it helps 😉

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s