Giovanni Acerbi
a- a+

L'oggetto AspError

E' veramente difficile, se non impossibile, scrivere righe di codice che non contengano nemmeno un errore. Vi sono molti errori possibili e alcuni potrebbero anche non dipendere da noi; il più classico è l'errore di sintassi (sintax error), poi vi sono errori di logica di programmazione, errori che sono generati dal malfunzionamento del server sul quale gira l'applicazione e poi vi sono errori che non vengono segnalati ma che restituiscono un output sbagliato e tanti altri. Fin da subito quindi conviene cercare di prevenire che si generino errori che siano poi difficili da rintracciare. Il primo accorgimento da prendere è sicuramente quello di utilizzare sempre Option Explicit all'inizio delle pagine .asp per fare in modo che tutte le variabili debbano essere per forza dichiarate. Vediamo un esempio:

 

<%

    intLato = 5

    intAltezza = 10

    Response.Write intLato * intAlteza

%>

 

In questo caso, non si genera nessun errore ma l'operazione base * altezza ci darà come risultato 0 anziché 50 e tutto per colpa del fatto che abbiamo dimenticato una zeta nello scrivere intAltezza nella riga dell'operazione. Vediamo come ci può aiutare in questo caso l'Option Explicit:

 

<%

    Option Explicit

    Dim intLato, intAltezza

    intLato = 5

    intAltezza = 10

%>

<html>

<head>

<title>Base x altezza</title>

</head>

<body>

<%

    Response.Write intLato * intAlteza

%>

</body>

</html>

 

In questo caso l'errore viene segnalato con un messaggio del tipo seguente:

Errore di run-time di Microsoft VBScript (0x800A01F4)
Variabile non definita: 'intAlteza'
/asp/err.asp, line 13

Un'altra cosa che ci aiuta è senz'altro l'utilizzo del codice indentato. Vediamo le differenze:

 

<%

For intCont = 1 To 10

Select Case intCont

Case 1,3,5,7,9

Response.Write intCont & " è un numero dispari" & "<br>"

Case Else

Response.Write intCont & " è un numero pari" & "<br>"

End Select

Next

%>

 

Il codice qui sopra non è indentato ed è sicuramente più comodo nel caso di errore lo stesso codice scritto come segue:

 

<%

For intCont = 1 To 10

Select Case intCont

Case 1,3,5,7,9

Response.Write intCont & " è un numero dispari" & "<br>"

Case Else

Response.Write intCont & " è un numero pari" & "<br>"

End Select

Next

%>

 

Un altro accorgimento può essere l'utilizzo di commenti per poter trovare velocemente determinati pezzi di codice all'interno di una pagina, vediamo come:

 

<%

'    *****************************************************************

'    INIZIO CICLO CONTROLLO NUMERO PARI O DISPARI

'    *****************************************************************

    For intCont = 1 To 10

        Select Case intCont

            Case 1,3,5,7,9         ' IL NUMERO E' DISPARI

                Response.Write intCont & " è un numero dispari" & "<br>"

            Case Else               ' IL NUMERO E' PARI

                Response.Write intCont & " è un numero pari" & "<br>"

        End Select

    Next

'    **************

'    FINE CICLO

'    **************

%>

 

E' consigliabile inoltre l'utilizzo di subroutine e funzioni per il riutilizzo del codice e la dichiarazione delle variabili utilizzando le convenzioni viste in precedenza per i nomi da assegnare alle variabili stesse (blnVar per una variabile di subtipo booleano, intVar per una variabile di subtipo integer ecc...)

Ma cosa ci offre ASP per il controllo degli errori? In ASP 2.0 si utilizzava l'oggetto Err, funzionante anche nella versione 3.0, tramite il quale, assieme all'istruzione On Error Resume Next, si poteva forzare la pagina a non terminare l'esecuzione del codice, ignorando gli errori incontrati e non facendo visualizzare all'utente la classica pagina di errore non troppo piacevole a vedersi. Vediamo un esempio:

 

<%

    Dim arrMyArr(3)

    On Error Resume Next

    arrMyArr(5) = 6

    If Err.Number > 0 Then

        Response.Write "E' avvenuto un errore!!!" & "<br>"

        Response.Write "Descrizione: " & Err.Description & "<br>"

        Response.Write "Numero: " & Err.Number & "<br>"

        Response.Write "Origine: " & Err.Source

    End If

%>

 

In questo caso si è tentato di assegnare un valore ad un indice dell'array fuori dall'intervallo consentito e il messaggio di errore da noi generato si presenta così:

E' avvenuto un errore!!!
Descrizione: Indice non incluso nell'intervallo
Numero: 9
Origine: Errore di run-time di Microsoft VBScript

La novità in ASP 3.0 è appunto l'oggetto ASPError, l'unico oggetto interno nuovo rispetto alla 2.0. La novità di questo oggetto è che ci aiuta a gestire gli errori in maniera personalizzata senza dover scrivere del codice all'interno di ogni pagina .asp. Si interviene infatti direttamente sul server tramite l'IIS (Internet Information Services). Quando si verifica un errore nelle pagine .asp, viene generato l'errore HTTP 500;100. Si deve quindi intervenire sulle proprietà del sito tramite l'IIS e impostare una nuova pagina di destinazione in caso di errore al posto di quelle di default; sarà in questa pagina che si potrà utilizzare l'oggetto ASPError.

Quello che segue è un codice di esempio di una pagina di errore personalizzata che si presenterà all'utente nel caso in cui un errore del tipo 500;100 si generasse sul server:

 

<%

Option Explicit

Dim objAspError, strTable

Set objAspError = Server.GetLastError()

strTable = "<table align=""center"" border=""1"">" & vbCrLf

strTable = strTable & "<tr>" & vbCrLf

strTable = strTable & "<td nowrap>Codice ASP</td><td>" & objAspError.AspCode & "<br></td>" & vbCrLf

strTable = strTable & "</tr>" & vbCrLf

strTable = strTable & "<tr>" & vbCrLf

strTable = strTable & "<td nowrap>Numbero di Errore</td><td>" & objAspError.Number & "<br></td>" & vbCrLf

strTable = strTable & "</tr>" & vbCrLf

strTable = strTable & "<tr>" & vbCrLf

strTable = strTable & "<td nowrap>Origine</td><td>" & objAspError.Source & "<br></td>" & vbCrLf

strTable = strTable & "</tr>" & vbCrLf

strTable = strTable & "<tr>" & vbCrLf

strTable = strTable & "<td nowrap>Categoria</td><td>" & objAspError.Category & "<br></td>" & vbCrLf

strTable = strTable & "</tr>" & vbCrLf

strTable = strTable & "<tr>" & vbCrLf

strTable = strTable & "<td nowrap>Errore verificatosi in</td><td>" & objAspError.File & "<br></td>" & vbCrLf

strTable = strTable & "</tr>" & vbCrLf

strTable = strTable & "<tr>" & vbCrLf

strTable = strTable & "<td nowrap>Numero di linea</td><td>" & objAspError.Line & "<br></td>" & vbCrLf

strTable = strTable & "</tr>" & vbCrLf

strTable = strTable & "<tr>" & vbCrLf

strTable = strTable & "<td nowrap>Numero di colonna</td><td>" & objAspError.Column & "<br></td>" & vbCrLf

strTable = strTable & "</tr>" & vbCrLf

strTable = strTable & "<tr>" & vbCrLf

strTable = strTable & "<td nowrap>Descrizione</td><td>" & objAspError.Description & "<br></td>" & vbCrLf

strTable = strTable & "</tr>" & vbCrLf

strTable = strTable & "<tr>" & vbCrLf

strTable = strTable & "<td nowrap>Descrizione estesa</td><td>" & objAspError.ASPDescription & "<br></td>" & vbCrLf

strTable = strTable & "</tr>" & vbCrLf

strTable = strTable & "</table>" & vbCrLf

%>

<html>

<head>

<title>Pagina di errore</title>

</head>

<body>

<p align="center"><b>Si è verificato un errore!</b></p>

<% = strTable %>

<p align="center"><a href="default.asp">Torna alla Home Page</a></p>

</body>

</html>

 

Alla riga 4 si crea una istanza dell'oggetto ASPError tramite il metodo GetLastError dell'oggetto Server dopodiché si genera una tabella riassuntiva che contiene tutte le proprietà che l'oggetto ASPError può ritornare. Riassumiamo le proprietà dell'oggetto di seguito:

ASPCode
Number
Source
Category
File
Line
Column
Description
ASPDescription

Ci sono tre categorie di errori che l'oggetto ASPError può riconoscere, errori interni ASP, errori dello script, errori negli oggetti ed è in base all'errore che si genera che la descrizione dell'errore può essere più o meno precisa.

Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Pier Paolo
Condividi le tue opinioni su questo articolo!