2010-10-19 5 views
0

J'ai vu 2 façons différentes de créer des composants WebPart pour SharePoint. Lequel est préféré par la plupart?Création de composants WebPart pour SharePoint Server

http://msdn.microsoft.com/en-us/library/aa973249%28office.12%29.aspx

+0

Je suppose que j'ai laissé de côté la 2ème voie. http://p2p.wrox.com/content/articles/developing-sharepoint-2007-web-parts?page=0,4 http://msdn.microsoft.com/en-us/library/ms415817.aspx –

+0

Les deux SharepointOverflow et Stackoverflow ne sont pas beaucoup d'aide. Utilisé pour être vraiment bon. J'ai suivi ce lien et je suppose que je suis content du résultat. http://msdn.microsoft.com/en-us/library/ms415817(office.12).aspx –

Répondre

0

Pour les quelques pièces Web que je l'ai écrit, je suppose que je suis allé plus avec la méthode # 2 que la méthode # 1. Semble plus simple et a le potentiel d'être réutilisé en dehors de l'environnement SharePoint (en fonction de la profondeur de votre logique métier).

+0

Merci Jesse pour votre contribution. Je sais ce que vous voulez dire à propos de l'utilisation de la seconde méthode. Les composants WebPart sont basés sur asp.net (2.0), donc ils sont plus utiles au-delà de l'application sharepoint. Merci pour vos mots. –

1

Tout ce qui concerne VSeWSS va juste finir dans la douleur, donc la méthode 1 est définitivement hors. La méthode 2 n'est pas idéale non plus, car la configuration d'éléments html en tant que contrôles devient ingérable à un niveau juste supérieur à ce que vous voyez dans cette démo. J'utilise une classe de base générique assez simple qui prend un contrôle d'utilisateur comme un paramètre de type et me permet de garder toute la disposition bien séparée de l'infrastructure de point de partage. Si vous créez des pages/parties Web par programme, la partie Web xml s'avère également facultative.

public abstract class UserControlWebPart<T> : Microsoft.SharePoint.WebPartPages.WebPart where T:UserControl 
{ 
    protected UserControlWebPart() 
    { 
     this.ExportMode = WebPartExportMode.All; 
    } 

    protected virtual void TransferProperties(T ctrl) 
    { 
     var tc = typeof(T); 
     var tt = this.GetType(); 

     foreach (var p in tt.GetProperties()) { 
      if (p.IsDefined(typeof(ControlPropertyAttribute), true)) { 
       foreach (var p2 in tc.GetProperties()) { 
        if (p2.Name == p.Name) { 
         p2.SetValue(ctrl, p.GetValue(this, null), null); 
        } 
       } 
      } 
     } 
    } 


    protected override void CreateChildControls() 
    { 
     string controlURL = ControlFolder+typeof(T).Name+".ascx"; 
     var ctrl = Page.LoadControl(controlURL) as T; 
     TransferProperties(ctrl); 
     this.Controls.Add(ctrl); 
    } 

    protected virtual string ControlFolder 
    { 
     get { 
      return "~/_layouts/UserControlWebParts/"; 
     } 
    } 

} 
+0

Merci Tom. Cela a l'air mieux et j'apprécie vraiment l'histoire intérieure de chaque utilisation. Bon travail. Encore. Merci beaucoup. –

Questions connexes