WebControls SharePoint : une classe de base plus riche pour vos WebParts avec SharePointOfView
Le framework SharePointOfView que Phil a récemment annoncé comporte un namespace nommé SharePointOfView.WebControls. Au menu de ce namespace, des customs controls, évidemment, et pour commencer deux WebParts.
Pourquoi des customs controls ?
Aux cours de vos développements SharePoint, combien de bouts de code avez vous copié/collé d'un contrôle existant vers un nouveau contrôle ? Combien de Try...Catch pour éviter qu'une erreur provoque un dysfonctionnement complet des pages ? Personnellement, je l'ai fait bien trop souvent. J'ai fini par me faire une WebPart de base dont mes nouvelles webparts héritent, histoire d'y insérer le code que je réutilise le plus souvent. Ont suivi d'autres WebParts que j'ajoutais à mes projets Visual Studio au fil des besoins. C'est donc très naturellement que j'ai souhaité les ajouter au framework SharePointOfView. L'idée est donc de proposer des bases de WebParts riches et génériques.
A ce jour, déjà deux WebParts ont déjà été intégrées au framework, et voici la première d'entres elles :
WebPartBase ("One WebPart to rule them all...")
L'idée de cette WebPart, c'est (essentiellement pour le moment) de permettre aux développeurs de s'affranchir de la gestion d'erreur dans leurs développements, et de la centraliser.
Trois comportements sont incorporés à cette WebPart :
En cas d'erreur, la WebPart indique simplement qu'une erreur s'est produite. L'affichage de la page n'est pas bloqué. Au delà de l'affichage, la WebPart inscrit la StackTrace dans les fichiers de log SharePoint (à l'aide de la classe d'écriture de logs du framework SharePointOfView)
En plus du comportement simple, cette gestion ajoute un lien qui permet de visualiser la StackTrace. Je réfléchis à y indiquer également l'heure de l'erreur. Cette gestion n'est faite que lorsque l'utilisateur courant est administrateur de la collection de sites. On peux facilement imaginer l'utilisation qui pourrait être faite de ce fonctionnement : le responsable fonctionnel / chef de projet (administrateur de la collection de sites ici) est rapidement averti qu'une erreur se produit, réalise une simple capture d'écran et l'envoi aussitôt au(x) développeur(s).
Démonstration :
Parce qu'une petite démo vaut mieux qu'un long discours, je vous propose de regarder tout ça en images :
Fonctionnement
La WebPartBase est marquée comme abstract, et réécrit les méthodes de rendu habituelles pour y incorporer cette gestion d'erreur.
/// Base method that renders the web part.
/// the output stream Html writer
protected sealed override void RenderContents(HtmlTextWriter writer)
{
try
{
base.EnsureChildControls();
base.RenderContents(writer);
RenderWebPart(writer);
}
catch(Exception ex)
{
// Rendering a simple error message instead of the WebPart and logging the real exception
ManageError(ex).RenderControl(writer);
SharePointOfView.Diagnostics.ULS.WriteError(ex.ToString(), "WebPartBase : RenderContents");
}
}
Les méthodes réécrites sont marquées comme sealed de sorte à empêcher toute réécriture de ces méthodes par la suite, et donc la perte de la gestion d'erreur. Il vous faudra donc utiliser l'une des deux méthodes marquées virtual en lieu et place des traditionnelles RenderContents et CreateChildControls :
///
/// Virtual method that replace RenderContents method, so as to ensure error handling.
/// If a failure occurs, a standard message will be shown to the users, and the error will be logged.
/// Besides, the exact exception stack trace will be displayed to the sites collection administrators.
///
/// the output stream Html writer
protected virtual void RenderWebPart(HtmlTextWriter writer)
{
}
///
/// Virtual method that replace CreateChildControls method, so as to ensure error handling.
/// If a failure occurs, a standard message will be shown to the users, and the error will be logged.
/// Besides, the exact exception stack trace will be displayed to the sites collection administrators.
///
protected virtual void CreateWebPartControls()
{
}
Cette WebPart devrait évoluer pour localiser le message d'erreur standard. N'hésitez pas à laisser un commentaire si vous avez des remarques ou des suggestions sur cette WebPart.
Pour conclure, je vous rappelle que le projet SharePointOfView est disponible sur codeplex.
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 :