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.