CÓMO: Crear una página personalizada para tratar errores de ASP

Exención de responsabilidades de contenido KB retirado

Este artículo se refiere a productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Resumen

Cuando se produce un error en una secuencia de comandos del servidor, Active Server Pages (ASP) detiene la ejecución del código y muestra el error que está asociado con el problema que se ha encontrado. No obstante, si lo desea, puede dejar que el código siga ejecutándose a pesar del error y tratar el problema con el código personalizado.


En este artículo se describe cómo utilizar el tratamiento de errores para comprobar específicamente una división por cero para generar un error genérico por cualquier otro error encontrado. La página de ejemplo muestra dos cuadros de texto HTML, vuelve a la misma página y los multiplica o los divide en función del botón en el que se hace clic. Por ejemplo, si el usuario escribe
3
y
0
y hace clic en Dividir, se utiliza una página de tratamiento de errores personalizada para mostrar un mensaje personalizado para este fin. Si se produce cualquier otro problema, por ejemplo si el usuario escribe letras del alfabeto, se puede mostrar solamente el número de error y la descripción, pero la página no falla y el usuario puede volver a intentarlo.

Crear una página de ejemplo

  1. En el menú Inicio, elija Programas, Accesorios y, a continuación, haga clic en Bloc de notas.
  2. En el Bloc de notas, cree una nueva página ASP denominada ErrorHandle.asp.
  3. Copie y pegue el código siguiente en el Bloc de notas:
    <%@ Language=VBScript %>
    <HTML>
    <HEAD>
    </HEAD>
    <BODY>

    <%

    'Al producirse un error reanudar Siguiente

    If Request.Form("sbmtMultiply")<>"" then 'If multiply is clicked
    Value=Cint(Request.Form("txtA"))*Cint(Request.Form("txtB"))
    End If
    If Request.Form("sbmtDivide")<>"" then 'If divide is clicked
    Value=Cint(Request.Form("txtA"))/Cint(Request.Form("txtB"))
    End If
    If Err.number<>0 then
    If Err.number=11 then '11 es el número que se divide por cero.
    Response.Write "Éste es un mensaje personalizado. No se puede dividir
    por cero."
    Response.Write "Escriba un valor diferente en el segundo cuadro
    de texto.<p>"
    else
    Response.Write "Se ha producido un error en esta página.<BR>"
    Response.Write "El número del error es: " & Err.number & "<BR>"
    Response.Write "La descripción dada es: " & Err.Description & "<BR>"
    End If
    End If
    %>

    <FORM action="" method=POST name=f1>
    A:<INPUT type="text" name=txtA size=5> <BR>B:<INPUT type="text" name=txtB size=5><BR>
    <INPUT type="submit" value="Multiply: A x B" name=sbmtMultiply>
    <INPUT type="submit" value="Divide: A/B" name=sbmtDivide>
    <BR>Resultado: <INPUT type="text" name=txtResult value="<%=Value%>">
    </FORM>

    </BODY>
    </HTML>
  4. Guardar ErrorHandle.asp en el directorio principal del servidor Web (por ejemplo, C:\Inetpub\Wwwroot).
  5. Inicie el Servidor Web (por ejemplo, en el menú Inicio, elija Programas y después haga clic en Internet Explorer).
  6. En el explorador Web, escriba la dirección siguiente en la barra de direcciones y después presione la tecla ENTRAR:
    http://servername/ErrorHandle.asp
    donde "nombre del servidor" es el nombre del equipo servidor en el que se ejecuta Microsoft Internet Information Server (IIS). Si éste es el mismo equipo en el que se está trabajando, puede utilizar la palabra "servidor local" en lugar del nombre del equipo.

Prueba sin tratamiento de errores

  1. Escriba valores que funcionen (por ejemplo,
    2,2
    o bien
    5,5
    ) y haga clic en los botones. Aparecerá el resultado adecuado.
  2. Escriba
    0
    y
    0
    . Se producirá un mensaje de error ASP. Tenga en cuenta que no puede volver a intentarlo; en su lugar, actualice la página o busque la página de nuevo.
  3. Actualice la página. Escriba
    e
    u otro carácter en el cuadro. Se produce un error en la página (se bloquea) y devuelve un error ASP. Debe actualizar la página para volver a intentarlo.

Prueba con tratamiento de errores

  1. En el Bloc de notas, abra ErrorHandle.asp.
  2. Busque la línea de comentarios siguiente:
    'On Error Resume Next
  3. Elimine el comentario de esta línea (elimine el apóstrofo) del siguiente modo:
    On Error Resume Next
  4. Guarde ErrorHandle.asp.
  5. Debe cerrar la ventana del explorador y reiniciar el explorador Web para borrar la memoria caché. De forma alternativa, puede presionar la tecla F5 para actualizar la página.
  6. Escriba valores que funcionen (por ejemplo,
    2,2
    o bien
    5,5
    ) y haga clic en los botones. Aparecerá el resultado adecuado.
  7. Escriba
    0
    y
    0
    . Se producirá un mensaje de error personalizado.
  8. Escriba
    e
    u otro carácter en el cuadro. En este caso, se muestran el número de error y la descripción del error del problema, pero la página no falla (no se bloquea) y puede volver a intentarlo.

Comprensión del código

  1. La línea "On Error Resume Next" indica a la página que siga procesándose aunque se encuentre un error. Esta línea registra el problema en el objeto Err, pero continúa con el resto del código. Si esta línea no está presente (como en la primera prueba), la página deja de procesarse inmediatamente y se muestra una página de error con el problema concreto que se ha detectado.
  2. La sección de código siguiente determina en qué botón se debe hacer clic y proporciona a la variable "Value" el producto (valor multiplicado) o el cociente (valor dividido) apropiado:
    If Request.Form("sbmtMultiply")<>"" then 'Si se hace clic en multiplicar
    Value=Cint(Request.Form("txtA"))*Cint(Request.Form("txtB"))
    End If
    If Request.Form("sbmtDivide")<>"" then 'Si se hace clic en dividir
    Value=Cint(Request.Form("txtA"))/Cint(Request.Form("txtB"))
    End If
  3. La última sección del código comprueba los valores del objeto Err para determinar cómo se trata el error encontrado. Se trata de una parte importante. Si el valor Err.number es cero, no se ha detectado ningún error y el código interno no se procesa. Si Err.number no es cero ("If Err.Number<>0"), el código determina qué error se ha producido y lo trata convenientemente. En este caso, el código de ejemplo sólo determina si es una división por cero. El valor Err.number para la división por cero es 11, de modo que el código comprueba el valor del siguiente modo:
       If Err.number=11
    En este caso, el código sólo muestra un mensaje. También puede llamar una función o redireccionarla aquí.


    Dado que se encuentra en mitad del bucle, la sección "else" se ocupa de cualquier error además de la división por cero. En este caso, el código utiliza las propiedades "Description" y "number" del objeto Err del mensaje.
    If Err.number<>0 then
    If Err.number=11 then
    '11 es el número que se divide por cero.
    'Ejecute aquí cualquier código. En este caso, se muestra un mensaje
    personalizado.
    'Otra opción puede ser enlazar a otra página, como en
    'Response.Redirect("divbyzero.asp")
    Response.Write "Éste es un mensaje personalizado. No puede dividirse
    por cero."
    Response.Write "Escriba otro valor en el segundo cuadro de texto.<p>"
    Else
    Response.Write "Se ha producido un error en esta página.<BR>"
    Response.Write "El número de error es: " & Err.number & "<BR>"
    Response.Write "La descripción dada es: " & Err.Description & "<BR>"
    End If
    End If

SUGERENCIAS Y ERRORES

  • Para buscar el número y la descripción de un problema determinado que desea tratar, provoque el problema en una página que utilice "On Error Resume Next" y el código siguiente:
          Response.Write "El número de error es: " & Err.number & "<BR>"
    Response.Write "La descripción dada es: " & Err.Description & "<BR>"
  • Este código no puede detectar los errores de rendimiento o "se bloquea".
  • La colección Err sólo registra el error más reciente. Por ejemplo, utilice el código siguiente:
    X=Cint("x")
    Y=(3/0)
    Response.Write Err.Description
    Esto provoca el mensaje de división por cero y no el tipo de problema de falta de coincidencia.
Propiedades

Id. de artículo: 300043 - Última revisión: 19 jul. 2001 - Revisión: 1

Comentarios