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

# re: MOSS CustomActions retrouver les paramètres lorsqu'on utilise un WebControl @ mercredi 28 janvier 2009 19:10

Bonjour,

Je comprends que tu ais passer du temps à trouver la solution à ta question.

Mais MOSS est comme tout progiciel, il demande un temps d'adaptation et d'apprentissage.

Visiblement, tu ne sembles pas prèt à consacrer ni l'un, ni l'autre.

L'attitude et les critiques affichées ici le prouvent.

Un conseil si tu ne veux pas te faire démonter rapidement, prend du recul et respire avant de poster un message aussi argneux.

Que tu sois un bon développeur .NET (ce que je pense être vrai) n'induira jamais immédiatement celui d'être un bon développeur SharePoint (à forciori MOSS).

SharePoint est un FrameWork puissant, mais complexe et MOSS est un progiciel utilisant ce FrameWork.

Romelard Fabrice [MVP]

ROMELARD Fabrice

# re: MOSS CustomActions retrouver les paramètres lorsqu'on utilise un WebControl @ mercredi 28 janvier 2009 20:01

Tu as raison, je vais éditer mon post...néanmoins dans un contexte de forfait en SSII le temps passé à rechercher des infos est largement supérieur à n'importe quel autre techno ou progiciel, et les docs sont vraiment minimalistes pour un tel produit.

Poppyto

# re: MOSS CustomActions retrouver les paramètres lorsqu'on utilise un WebControl @ mercredi 28 janvier 2009 21:33

Cette attitude est plus adaptée.

Je comprends bien ta situation pour avoir été dans la même il y a quelques temps.

Le temps est un facteur très souvent mis de côté par de très nombreuses SSII.

Or dans le contexte de SharePoint, c'est une grossière erreur.

Je te conseille dans la mesure du possible de commencer cet apprentissage par WSS et non MOSS (il s'agit d'une des plus grosse erreur).

Fabrice

ROMELARD Fabrice

# re: MOSS CustomActions retrouver les paramètres lorsqu'on utilise un WebControl @ jeudi 29 janvier 2009 10:42

Bein disons que ce qui est agacant c'est de faire des chiffrages hallucinants sur des fonctionnalités "simples", et les clients ne connaissant pas vraiment l'outil (normal!) ne comprennent pas du coup.

Poppyto


Les 10 derniers blogs postés

- [Mix 2010] – Telechargez Internet Explorer 9 en Preview ! par RedoBlog - The .NET Gentleman !!! le il y a 2 heures et 45 minutes

- [MIX 2010] – Keynote Day 2 online : Windows Internet Explorer 9, jQuery, OData et Dallas CTP2 ! par RedoBlog - The .NET Gentleman !!! le il y a 3 heures et 25 minutes

- [Mix 2010] – Retour d’expérience développement Seesmic sur Windows Phone 7 par RedoBlog - The .NET Gentleman !!! le il y a 3 heures et 59 minutes

- [Mix 2010] – Le Keynote Day 1 disponible online ! par RedoBlog - The .NET Gentleman !!! le il y a 4 heures et 22 minutes

- Visual Studio Talk Show: EF4 par Matthieu MEZIL le il y a 7 heures et 35 minutes

- [MIX 2010] – Windows Phone 7 en Super Star du Microsoft Mix 2010 ! par RedoBlog - The .NET Gentleman !!! le il y a 9 heures et 52 minutes

- [MIX 2010] – Livre gratuit sur Programmer Windows Phone 7 Series ! par RedoBlog - The .NET Gentleman !!! le il y a 10 heures et 36 minutes

- SQL Server : Estimer le nombre de lignes renvoyées par une requête avec SQLCLR par SQL Server vu par Christian Robert le il y a 10 heures et 52 minutes

- [WF4] Activity avec vue détail masquée par défaut, vive WPF! par Blog de Jérémy Jeanson le il y a 14 heures et 9 minutes

- [SharePoint 2010] Créer et packager une application Silverlight pour SharePoint 2010 par Julien Chable le il y a 18 heures et 19 minutes