ComputerScience

Matthieu TUDURY… Just another WordPress site…

Sharepoint 2010 : WebPart Générique pour charger des Contrôles ASP.NET

Le modèle de création de WebPart Sharepoint poussé par Microsoft est de faire contenir dans une WebPart un contrôle ASP.NET. Le contenu du WebPart étant assez simple, on peut en faire un générique dont un paramètre permettra de définir le contrôle ASP.NET à charger.

L’intérêt, bien que limité, permet de créer des interfaces qui ne seront pas disponible directement à travers l'ajout de WebPart mais en connaissant le chemin du contrôle ASP.NET uniquement. Cela peut être pratique lorsqu'on a quelques contrôles ASP.NET de debug qu'on ne souhaite pas faire apparaitre dans la liste des WebPart disponibles.

Elle permettra aussi de déployer des contrôles (dépourvus de code behind) en uploadant des contrôles dans Sharepoint.

Il conviendra de vérifier que seuls les administrateurs aient le droit de modifier le chemin car dans le cas contraire cela pourrait entrainer une faille de sécurité.

[ToolboxItemAttribute(false)]
 public class LoadUserControl : Microsoft.SharePoint.WebPartPages.WebPart
 {
  [WebBrowsable(true),
  Category("WebPart Configuration"),
  WebPartStorage(Storage.Shared),
  FriendlyName("ASCX"),
  Description("Chemin du controle ASP.NET."),
  Personalizable(true)]
  public string ascx { get; set; }

  protected override void CreateChildControls()
  {
    if (!string.IsNullOrEmpty(ascx))
    {
      Control control = Page.LoadControl(ascx);
      Controls.Add(control);
    }
  }
 }

Exemple d'exploitation pour charger un contrôle :

<webParts>
 <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
 <metaData>
 <type name="MyNameSpace.LoadUserControl.LoadUserControl, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0000000000000000" />
 <importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>
 </metaData>
 <data>
 <properties>
 <property name="Title" type="string">Titre publique de la WebPart</property>
 <property name="Description" type="string">My WebPart</property>
 <property name="ascx" type="string">~/_CONTROLTEMPLATES/Exemple/Exemple.ascx</property>
 </properties>
 </data>
 </webPart>
</webParts>