none
Problème d'activation de l'event receiver de ma feature RRS feed

  • Question

  • Bonjour,

    Je rencontre un problème sur lequel je viens de passer un grand nombre d'heures sans avoir trouvé de solution.
    J'ai créé une solution Sharepoint qui consiste à déployer une master page avec code behind. Le scope de ma feature est à Web. J'ai décommenté les deux méthodes FeatureActivated() and FeatureDeactivation() dans la classe MafeatureEventReceiver.cs. Le but est de changer les propriétés MasterUrl et CustomMasterUrl de mon site selon qu'on active ou désactive la feature. En gros, activation de la feature = utilisation de MA master page; désactivation de la feature = retour à l'utilisation de v4.master. Cela fonctionne très bien lorsque la solution est déployée et que j'active la feature en me rendant dans le menu Manage Site Features et que je clique sur le bouton Activate.
    En revanche, lorsque j'utilise un script PowerShell pour boucler et activer cette feature pour tous les sites de ma site collection, la feature est activée, le masterpage est accessible dans la MasterPageGallery du Site mais la dernière étape (changer les propriétés MasterUrl etCustomMasterUrl) ne s'effectue pas.

    Voici le code C# de ma méthode FeatureActivated() et ensuite le script PowerShell utilisé.
    Si quelqu'un a une piste, n'importe laquelle, je suis preneur :)

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
      SPWeb currentWeb = (SPWeb)properties.Feature.Parent;
      if (!currentWeb.ServerRelativeUrl.Equals("/"))
        {
          currentWeb.MasterUrl = currentWeb.ServerRelativeUrl + "/_catalogs/masterpage/toto.master";
          currentWeb.CustomMasterUrl = currentWeb.ServerRelativeUrl + "/_catalogs/masterpage/toto.master";
        }
        else
        {
          currentWeb.MasterUrl = currentWeb.ServerRelativeUrl + "_catalogs/masterpage/toto.master";
          currentWeb.CustomMasterUrl = currentWeb.ServerRelativeUrl + "_catalogs/masterpage/toto.master";
        }
        currentWeb.Update();
      }

    Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue
    $webs = get-spsite -webapplication "http://voicimawebapp.com"
    $feature = "MaFeature"
    Foreach ($oneweb in $webs)
    {
      write-host $oneweb
      $siteFeature = get-spfeature -site $oneweb | where {$_.displayname -eq $feature}
      if ($siteFeature -eq $null)
      {
        write-host "Activating Site level Feature at $oneweb" -foregroundcolor Yellow
        Enable-SPFeature -Identity $Feature -URL $oneweb.URL -Confirm:$False
        }
      else
      {
        write-host "Feature $Feature is already activated on $oneweb" -foregroundcolor green
      }
    }


    jeudi 26 juillet 2012 13:05

Réponses

  • Merci pour ta réponse NicoBzh.

    J'ai effectué un premier test en désactivant l'UAC : ça a fonctionné. Cela dit, cette solution n'est pas acceptable dans la durée.
    J'ai donc creusé avec un collègue sur cet UAC et voici la solution à laquelle nous sommes parvenus :
    - nous avons identifié le compte responsable du lancement du Service Sharepoint 2010 Timer
    - nous avons ajouté ce compte au groupe administrateur
    - nous avons enfin réactivé l'UAC

    La commande Enable-SPFeature déclenche maintenant l'event receiver de ma feature.

    Merci bcp pour ton commentaire qui nous a mis sur la bonne voie !

    jeudi 26 juillet 2012 15:37

Toutes les réponses