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

- Intégration Yammer et SharePoint Online (Office 365), étape 1 … par Le blog de Patrick [MVP SharePoint] le 06-12-2013, 17:37

- [Dynamics CRM] Ajouter les dossiers de CRM au dossier Favoris d’Outlook par Christine Dubois le 06-10-2013, 15:50

- Visual Studio 2013 par Etienne Margraff le 06-04-2013, 10:26

- Configurer la collation SQL Server pour SharePoint par Blog de Jérémy Jeanson le 06-03-2013, 19:48

- Etendre le Team Web Access de TFS 2012 – Step 1: Création du plugin par Philippe Didiergeorges Aka Philess le 06-03-2013, 07:30

- Livre Blanc : Développer des applications NUI par Fathi Bellahcene le 06-01-2013, 11:35

- [Dynamics CRM 2011] Copier une vue d'entité par Christine Dubois le 05-29-2013, 13:20

- [Conf’SharePoint 2013] Mes présentations… par Le blog de Patrick [MVP SharePoint] le 05-28-2013, 09:04

- [wpdev] Storage bug in MediaLibrary.SavePicture par Kévin Gosse le 05-26-2013, 19:08

- VMMap en mode instrumentation sur système 64bit : attention à la plateforme cible du build .NET par CoqBlog le 05-25-2013, 22:25