viernes, julio 28, 2006

Función VB.NET para manejo de errores

Cuando ocurre algún error en nuestro código muchas veces preferimos mostrarle al usuario un mensaje simple como "Hay problemas técnicos, intente más tarde" y recibir justo en ese momento un correo informándonos dónde ocurrió el error y por qué ocurrió.

La función RutinaError se utiliza cada vez que un error es cachado en nuestro código. Recibe 4 parámetros: mensaje de error, ubicación donde ocurrió el error, una cadena cualquiera que nos permite enviar más información y por último el nombre de la rutina donde ocurrió el error.

Como vemos, no es necesario especificar ningún correo origen o destino. Al final explicaremos esto.

A continuación tenemos las rutinas involucradas:


Function RutinaError(ByVal strMsg As String, ByVal strTrack As String, ByVal StrMoreBody As String, ByVal StrNombreRutina As String) As String
Dim MensajeGeneralError As String
MensajeGeneralError = "&nbsp;<image src='Advise.gif'>"
MensajeGeneralError += "<span style='color:red;font-weight:bold;size:11px;font-family:arial;'"
MensajeGeneralError += "<b> Ha ocurrido un error en la comunicación. Puede ser ocasionado por saturación en el sistema o por su conexión de Internet. Por favor intente de nuevo más tarde.</b>"
MensajeGeneralError += "</span><br><br>"

Dim StrDest As String = ""
StrDest += "user@mipagina.com
Dim StrRem As String = ""
StrRem += "errores@mipagina.com"

Dim strServerName As String = Request.ServerVariables("LOCAL_ADDR")
Dim StrRemoteAddr As String = Request.ServerVariables("REMOTE_ADDR")
Dim strBody As String
strBody = "<FONT face='Verdana' size='1'>"
strBody += "<b>Servidor: </b>" & strServerName & "<br><br>"
strBody += "<b>Mensaje: </b>" & strMsg & "<br><br>"
strBody += "<b>Error: </b>" & strTrack & "<br><br>"
strBody += "<b>Rutina: </b>" & StrNombreRutina & "<br><br>"
strBody += "<b>IP Cliente: </b>" & StrRemoteAddr & "<br><br>"
strBody += StrMoreBody
strBody += "</FONT>"
Dim StrSubject As String = "[" & strServerName & "] Problema en " & Request.ServerVariables("URL")

'ENVIO DE CORREO
If InStr(strBody, "aborted") = 0 Then EnvioCorreo(StrDest, StrRem, StrSubject, strBody)

Return MensajeGeneralError
End Function


Sub EnvioCorreo(ByVal strPara As String, ByVal strDe As String, ByVal strTitulo As String, ByVal strCuerpo As String)
Dim objCorreo As New System.Web.Mail.MailMessage
objCorreo.To = strPara
objCorreo.From = strDe
objCorreo.Subject = strTitulo
objCorreo.Body = strCuerpo
objCorreo.BodyFormat = MailFormat.Html
System.Web.Mail.SmtpMail.Send(objCorreo)
End Sub


Veamos un pequeño ejemplo de cómo se implementaría:


Try
    {... aquí ocurrirá algún error ...}
Catch ex As Exception
    Dim StrMensaje As String = ""
    StrMensaje = RutinaError(ex.Message, ex.StackTrace, "Más texto", "RutinaX()")
    Response.Write(StrMensaje)
End Try


Los correos han sido especificados dentro de RutinaError y no dentro del bloque Catch. De este modo cuando el correo errores@mipagina.com cambie a errores@mipaginanueva.com entonces sólo será necesario un pequeño cambio y todos los errores que se generen en nuestro sitio irán a parar al nuevo correo.

Si tienen alguna duda de cómo implementarlo no duden en contactarnos.

No hay comentarios.: