none
[WSS3.0] Déploiement d'une feature de site sur chaque site d'une collection RRS feed

  • Question

  • Bonjour,

     

    je suis en possession d'une fonctionnalité (feature) dont le scope est le site. J'ai déployé la solution sur la collection de site ce qui rend la feature activable sur chaque site. Malheureusement la feature est désactivée par défaut et je voudrais l'activer sur chaque site de la collection, sachant qu'un site contient des sous sites qui eux meme contiennent des sous sites... Via stsadm il n'est possible de donner qu'une seul URL donc je voulais savoir quel objet je pourrais utiliser dans un developpement .NET qui me donnerait accès à l'ensemble des sites existant sur une collection.

     

    Merci

    jeudi 27 septembre 2007 12:53

Toutes les réponses

  • Bonjour

     

    Vous pourriez réaliser une feature de scope "Site" pour l'activer au niveau de la collection en y associant des événements.

    Sur le FeatureActivated, vous pouvez récupérer la collection de site courante (via les SPFeatureReceiverProperties, vous avez la propriété Feature puis Parent qui vous donne l'entité correspondant au scope de la feature, ici le SPSite).

    Reste ensuite à lister tous les sites/SPWeb via la  (propriétés AllWebs) et activer votre fonctionnalité pour chacun d'eux.

     

    Si vous voulez le faire depuis votre fonctionnalité de scope Web (site web), il suffira de récupérer la collection courante (même topo sauf que le Feature.Parent correspond au SPWeb, lui même possédant la propriété Site). Mais attention, un admin de site n'est pas forcément l'administrateur de la collection et n'a pas forcément le droit d'activer la fonctionnalité sur les sites/sous-sites => pensez à l'impersonnation (mais je préfère ma méthode avec une feature dédiée).

     

    Voici une idée du code de la première méthode :

     

    Extrait de code

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {

      SPSite site = properties.Feature.Parent as SPSite;

      foreach(SPWeb web in site.AllWebs)
      {
         web.Features.Add(<id de la feature>);
         web.Dispose();
      }
    }

     

     

    jeudi 27 septembre 2007 15:02
  • Une alternative serait de travailler via la notion de Feature Stapling:
    • http://sharepointnutsandbolts.blogspot.com/2007/05/feature-stapling.html
    • http://blogs.msdn.com/cjohnson/archive/2006/11/01/feature-stapling-in-wss-v3.aspx
    Maintenant, l'option tout code du Feature Receiver avec ajout de la Feature de Gaëtan me plait beaucoup.

    On peut aussi voir une variante assez sympathique en utilisant une génération de batch ou tout simplement l'activation via qques lignes de Powershell

    Non ?

    PS : le Stanpling permettrait de mettre a jour aussi les futures sites à posteriori
    jeudi 27 septembre 2007 16:51
  • Merci pour vos réponses très utiles.

    J'ai au final utilisé un mix des solutions selon les collections avec du code ou du stsadm avec liste de sites.

    Effectivement à présent je voudrais que la feature soit activée pour tout nouveau site créé. Je vais donc me tourner vers le stapling pour voir si j'arrive à mes fins Smile

     

    Merci

     

    mercredi 3 octobre 2007 08:56