Inicio > Apunte, C#, SharePoint > Provee información sobre errores en WebParts usando la infraestructura de SharePoint

Provee información sobre errores en WebParts usando la infraestructura de SharePoint


Si has desarrollado WebParts para SharePoint (WSS 3.0 o MOSS 2007) sabrás que un problema recurrente al que nos enfrentamos los programadores es al tratamiento de errores. En efecto, una excepción no controlada puede ser problemático para los usuarios, ya que potencialmente podría dejar inutilizado el sitio. Como anécdota, contaré que un WebPart que hice para Wal-mart tenía un bug y lanzaba una excepción cuando un usuario con la cuenta de sistema ingresaba: aunque era transparente para los demás usuarios, el indexador de los servicios de búsqueda usaba la cuenta de sistema y por ende, lanzaba errores al intentar indexar el sitio, efectívamente dejando sin utilidad los servicios de búsqueda. Live and let die, dicen…

En fin, aún suponiendo que la situación pudiera no ser tan grave, puede suponer una molestia para el usuario, sea éste usuario final o un administrador. De hecho, en WSS/MOSS 2007 no hay nada más molesto, en mi opinión, que la pantalla de error estándar de SharePoint. ¿Te suena conocida?

exceptionusage1

Esta ventana no dice nada de nada, sólo que hubo un error. Como usuario, no tienes ni jota idea de qué pasó. Como administrador, sabes que hubo algún error, posiblemente provocado por un WebPart, pero sin posibilidad de saber más. Como programador, no tienes ni idea de en qué parte del código sucedió esto. Vaya, al menos si se pudiera cambiar el mensaje de error… Pero nada.

Como programadores, es nuestro deber asegurar que no ocurran excepciones, por supuesto. Pero mientras desarrollamos, seguramente nos encontraremos con algunas, por lo que sería bueno poder contar aunque sea con un mísero mensaje de error. Adicionalmente, también sabemos que hay ocasiones en que se pueden violar precondiciones y reglas de negocio, en cuyo caso debemos notificar el error al usuario. Y en este sentido, podríamos aprovechar esta ventanita de error.

Pues bien, resulta que SharePoint cuenta con una clase que nos puede solucionar ambos problemas: WebPartPageUserException, ubicado en el espacio de nombres Microsoft.SharePoint.WebPartPages. SharePoint cuenta con un mecanismo mediante el cual atrapa las excepciones no controladas por los WebParts. Cualquier excepción inmediatamente ocasiona que se muestre la ventana de error con el mensajito de error inesperado. Peeeero si la excepción es de tipo WebPartPageUserException la cosa cambia: nos muestra el mensajito de error contenido en la excepción. Esto ya es algo.

Un ejemplo. Creemos un WebPart que contenga dos botones: uno que lance una excepción cualquiera y uno que lance un WebPartPageUserException. Ahm, el código.

using System;
using System.Web.UI.WebControls;
using Microsoft.SharePoint.WebPartPages;

namespace Blogoso.Fermasmas.Com.WebParts
{
    public class ExceptionUsageWebPart : System.Web.UI.WebControls.WebParts.WebPart
    {
        private Button _anyExceptionButton;
        private Button _webpartExceptionButton;

        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            Literal text = new Literal();
            text.Text = "<p>Haga clic en alguno de los botones para lanzar " +
                               "una excepci&oacute;n.</p>";
            Controls.Add(text);

            _anyExceptionButton = new Button();
            _anyExceptionButton.ID = "_anyExceptionButton";
            _anyExceptionButton.Text = "Excepción normal";
            _anyExceptionButton.Click += (s, a) => { 
                throw new Exception("Esta es una excepción cualquiera. "); 
            };
            Controls.Add(_anyExceptionButton);

            _webpartExceptionButton = new Button();
            _webpartExceptionButton.ID = "_webpartExceptionButton";
            _webpartExceptionButton.Text = "Excepción uso WebPart";
            _webpartExceptionButton.Click += (s, a) => { 
                throw new WebPartPageUserException(
                    "Esta es una excepción de usuario WebPart."); 
            };
            Controls.Add(_webpartExceptionButton);
        }
    }
}

exceptionusage2

Muy simple, lo admito. Compila el WebPart, instálalo en tu SharePoint y colócalo en una página. Si haces clic en el primer botón, se muestra la ventana de error inesperado, como era de esperarse por lanzar una excepción de tipo Exception. El segundo botón lanza el WebPartPageUserException, así que al presionarlo… te lleva a la misma página pero ahora muestra el mensaje de error que contiene la propiedad Message. ¡Cool!

exceptionusage3

Así las cosas, ¡ahora cuentas con un método para mostrar mensajes al usuario o para colocar información de depuración! En efecto, todo lo que queda es colocar todo tu código dentro de bloques try-catch, y cuando haya un problema, relanzar una WebPartPageUserException.

Ahm… una cosa antes de terminar… Debes establecer el nivel de confianza del sitio en WSS_Medium o Full. Esto, en el archivo web.config. Algo así:

<trust level="WSS_Medium" originUrl="" />

Y lixto ahora sí. ¡Suerte!

Categorías:Apunte, C#, SharePoint Etiquetas:
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s