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

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01