MOSS CustomActions retrouver les paramètres lorsqu'on utilise un WebControl

Les Customs actions permettent de personnaliser le backoffice avec des boutons ou des MenuItem & Co, c'est cool mais bon il faut souvent aller plus loin que de naviguer sur une url (...).

Bref voilà la tronche d'une custom action qui ne s'affiche que sur un contenttype donné:

  <CustomAction
   Id="ContribCH2.Rejeter"
   Location="DisplayFormToolbar"
   Title="blabla"
   RegistrationType="ContentType"     RegistrationId="0x01200086CE764410434C0196C0FCFBDAB05AAB0063397E...."                  
   Sequence="1000"
   ControlAssembly="MonNamespace.CustomActions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"
   ControlClass="MonNamespace.CustomActions.Pages.SuperCustomAction"
/>

Donc il s'agit là d'un bouton dans une DispForm page. Derrière tout ça se cache un Webcontrol mais alors comment accéder aux propriétés Title, ou encore Location ou même RegistrationId ( qui au passage ne correspond pas forcément à ce qui a été déclaré dans les XML, à retrouver donc par code si le bouton ne s'affiche pas !) quand on veut mettre plusieurs boutons sans coder en dur une classe/bouton.

                                                    Voilà la réponse : ON NE PEUT PAS, NE CHERCHEZ PAS,.

MAIS
....
il y a une astuce, trouvée grâce à reflector, mais c'est un truc dégueulasse. En fait lors de la construction du contrôle Mr MOSS va rechercher les noeuds Property et les lier aux noms existants dans la classe....trop classe ! cf SetPropertiesOnControlFromXml dans Reflector

Du coup ça donne ça :

<CustomAction
   Id="ContribCH2.Rejeter"
   Location="DisplayFormToolbar"
  ....
>
    <Property Name="toto">Coucou</Property>
    <Property Name="foo">Hello</Property>

</CustomAction>

Et dans le webcontrol

public class SuperCustomAction : WebControl
{
     public string toto;
     public string foo;

         protected override void OnLoad(EventArgs e)
        {
            EnsureChildControls();
            base.OnLoad(e);
        }
         protected override void CreateChildControls()
        {

            HyperLink lnk = new HyperLink();
            lnk.Text = toto;
            lnk.NavigateUrl = foo;
            Controls.Add(lnk);
           
            base.CreateChildControls();

        }

}

Vous l'aurez compris, c'est pas beau, c'est pas documenté, mais ça permet de retrouver nos moutons.
Publié mercredi 28 janvier 2009 14:38 par Poppyto
Classé sous
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires


Les 10 derniers blogs postés

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 21 heures et 15 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le il y a 23 heures et 48 minutes

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39