none
[WSS3] Feature ne prend pas en compte le code sous SPFeatureReceiver RRS feed

  • Question

  • Bonjour.

    Je travaille sous :

    • Visual Studio 2010.
    • WSS3 SP1.
    • WSPBuilder.

    J'ai une solution qui active/déactive l'ajout d'une MasterPage customisée.

    A cette activation/désactivation, j'ai besoin d'associer un code à travers l'implémentation de SPFeatureReceiver.

    Je fait alors :

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
    
          using (SPWeb web1 = properties.Feature.Parent as SPWeb)
          {
            web1.Properties["My Title"] = web1.Title;
            web1.Title = "Hello World";
            web1.Properties.Update();
            web1.Update();
          }

    Je constate malheureusement que le code contenu dans les méthodes de SPFeatureReceiver n'est pas pris en compte par l'activation/désactivation de la feature!

    Dans l'exemple ci dessus, le nom du site est sensé devenir "Hello World", dans mon cas, aucun changement!

    Cela serait il lié à l'utilisation du WSPBuilder ? Ou bien à l'utlisation de VS2010 pour WSS3 ? Faut il passer à SP2 ? C'est lié à autre chose ?

    Pouvez vous svp me donner des pistes ?

    En vous remerciant d'avance.

     

    vendredi 22 avril 2011 14:44

Réponses

  • Bonjour,

    En fait je voulais dire de faire un throw tout court :

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
       throw new Exception("Test");
    }
    
    
    

     

    Ca parait un peu débile, mais ça permet d'être sur qu'on passe bien dans le code :
    Si lors de l'activation de la feature, ça ne plante pas, c'est que le code n'est pas lu.

    Si ça ne marche pas, faites les étapes manuellement :
    - Copier la feature dans le dossier SharePoint
    - Glisser/Déposer la DLL dans le GAC
    - Faites un IISRESET
    - faites un stsadm -o unninstallfeature, puis  stsadm -o installfeature puis  stsadm -o activatefeature


    Sylvain Reverdy
    Consultant / Formateur à Winwise
    Mon blog
    • Marqué comme réponse spsPocket jeudi 28 avril 2011 06:42
    mardi 26 avril 2011 23:01

Toutes les réponses

  • Bonjour,

    En théorie ça devrait marcher.

    Pas besoin de passer à SP2 ou de changer d'outil.

    Les possibilités que ça na marche pas sont :
    - Mauvaise version de DLL dans le GAC
    - Mauvaise déclaration du feature receiver dans la feature
    - Mauvaise version de la feature
    ...

    Quelques conseils : vérifiez directement dans le dossier SharePoint que la feature est correct. Même chose avec la DLL dans le GAC.
    Faites un IISRESET. Réessayer.

    Si ça ne marche toujours pas, faites un "throw new Exception("Test")" dans le code et retestez pour être bien sur que le code est exécuté (ça devrait planter ^^)....
    Comme ça vous aurez si c'est le code qui ne marche pas ou simplement le code qui n'est pas exécuté

    Dernier conseil, ne pas disposer (ne pas utiliser using) l'objet  "properties.Feature.Parent", car il peut s'agir d'un objet du context.

    (http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/c0f1a05f-f1db-4f37-8f24-5966ab43e73b/)

     


    Sylvain Reverdy
    Consultant / Formateur à Winwise
    Mon blog
    vendredi 22 avril 2011 19:34
  • Bonjour ,

    A mon avis le probleme est lie principalement au reference du DLL sans le fichier Feature.XML, Donc assurez vous que la structure du votre Fichier est telque dans l'example suivant :

    <?xml version="1.0" encoding="utf-8"?>
    <Feature Id="6eec15cf-5505-430f-a13e-c8ad96140c2f"
         Title="FeatureWithReceiver1"
         Description="Description for FeatureWithReceiver1"
         Version="12.0.0.0"
         Hidden="FALSE"
         Scope="Web"
         DefaultResourceFile="core"
          ReceiverAssembly="WSPBuilderProject1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=be02c50325b391ed"
         ReceiverClass="WSPBuilderProject1.FeatureWithReceiver1"
         xmlns="http://schemas.microsoft.com/sharepoint/">
     <ElementManifests>
      <ElementManifest Location="elements.xml"/>
     </ElementManifests>
    </Feature>

     

    liens Utiles

    Cordialement,

     

     


    A.Nemri
    lundi 25 avril 2011 08:34
  • Bonjour et merci beaucoup pour vos réponses.

    • La PublicKeyToken correspond bien à la valeur qu'on a sous "C:\Windows\Assembly"!
    • ConceptorMe, le feature.xml correspond exactement à celui que vous avez donné à titre d'exemple...
    • Sylvain, j'ai tester le trow et ça ne plante pas en fait:  
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
    try
    {
    SPWeb web1 = properties.Feature.Parent as SPWeb
    
    web1.Properties["My Title"] = web1.Title;
    
    web1.Title = "Hello World";
    
    web1.Properties.Update();
    
    web1.Update();
    }
    catch (Exception)
    {
    throw new Exception("Test");
    }
    }
    




    mardi 26 avril 2011 07:17
  • Bonjour,

    En fait je voulais dire de faire un throw tout court :

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
       throw new Exception("Test");
    }
    
    
    

     

    Ca parait un peu débile, mais ça permet d'être sur qu'on passe bien dans le code :
    Si lors de l'activation de la feature, ça ne plante pas, c'est que le code n'est pas lu.

    Si ça ne marche pas, faites les étapes manuellement :
    - Copier la feature dans le dossier SharePoint
    - Glisser/Déposer la DLL dans le GAC
    - Faites un IISRESET
    - faites un stsadm -o unninstallfeature, puis  stsadm -o installfeature puis  stsadm -o activatefeature


    Sylvain Reverdy
    Consultant / Formateur à Winwise
    Mon blog
    • Marqué comme réponse spsPocket jeudi 28 avril 2011 06:42
    mardi 26 avril 2011 23:01
  • Bonjour.

    En effet, le WSPBuilder --> Copy To GAC ne copiait pas la dll...

    Je le fait à la main!

    Merci beaucoup.

    vendredi 29 avril 2011 08:58