Objet ASPError |
Introduit dans la version ASP 3.0, l'objet ASPError intégré vous permet de visualiser en détail les informations sur la dernière erreur survenue dans le script d'une page ASP dans la session en cours. Cet objet, doté de neuf propriétés en lecture seule, fournit des informations plus détaillées sur le type et la source des erreurs que l'objet Err de VBScript. Pour utiliser l'objet ASPError et les propriétés qu'il présente, vous devez appeler une nouvelle méthode de l'objet Server, GetLastError, qui renvoie un objet ASPErrorObject avec les valeurs des propriétés définies de façon à refléter les détails concernant la dernière erreur survenue dans le script.
    Dim objMyASPError
    Set objMyASPError = Server.GetLastError
Lorsque vous installez IIS 5.0, par défaut, toutes les erreurs de prétraitement, script et exécution dans le code ASP entraînent l'arrêt du traitement du script en cours et le renvoi de l'exécution du script vers une page d'erreur personnalisée nommée 500-100.ASP. Ce renvoi s'effectue par un appel interne à la méthode Server.Transfer qui, comme décrite au chapitre 9, déplace l'exécution, d'un script à un autre, tout en protégeant les informations d'état disponibles dans le premier script. Le script 500-100.ASP (situé par défaut dans le répertoire C:\WINNT\Help\iisHelp\common ) contient un appel vers la méthode Server.GetLastError. Lorsque vous exécutez ce script, il met en forme et affiche les valeurs de la propriété en cours de l'objet ASPError renvoyé par cet appel vers GetLastError. Vous pouvez utiliser la page d'erreur par défaut, 500-100.ASP, comme elle se présente ou l'adapter à l'aspect général de votre site, ou encore utiliser le snap-in Internet Services Manager pour envoyer les services IIS vers une page de votre choix (voir l'annexe D). Les propriétés, collections, méthodes et événements de l'objet ASPError sont décrits dans le cadre suivant.

Commentaires/Dépannage |
De nombreux développeurs ASP débutants utilisent le code suivant pour activer le débogage de leurs scripts en utilisant l'objet Err dans VBScript :
    On Error Resume Next
Si vous incluez cette ligne de code dans votre script, alors uniquement les erreurs de prétraitement et de script (syntaxe) forceront IIS à appeler la méthode Server.Transfer et à envoyer l'exécution du script à votre script 500-100.ASP (ou script de gestion des erreurs personnalisé). Les erreurs d'exécution ne forceront par IIS à transférer le traitement vers le script 500-100.ASP. Par exemple, si vous utilisez cette ligne de code de débogage, vous risquez de ne pas intercepter l'erreur dans le bloc de code suivant :
    Dim intCounter
    For intCounter = 1 to 100
         intResult = intCounter / (intCounter - 100)
    Next
Dans ce fragment de code, vous devez ajouter du code avant l'instruction Next pour intercepter l'erreur de division par zéro qui survient lorsque la valeur intCounter est égale à 100. L'ajout de ces lignes pour intercepter les erreurs dans votre code est laborieux et prédisposé aux erreurs, car vous devez prévoir quelles lignes sont les plus sensibles aux erreurs éventuelles. Par conséquent, et parce que l'objet ASPError fournit plus d'informations que l'objet Err, il est déconseillé d'utiliser On Error Resume Next, si possible. Une autre application réussie de la page d'objet ASPError, 500-100.ASP (ou similaire, scripts personnalisés pour les erreurs), consiste à gérer les erreurs qui surviennent sur un site accessible au public. Par exemple, vous pouvez personnaliser le script 500-100.ASP afin qu'il applique le modèle de couleur et l'arrière-plan de votre site, et inclure un numéro d'assistance pour les utilisateurs ayant besoin de support. De même, le service d'assistance peut résoudre l'appel plus efficacement si vous exploitez les informations complètes que l'objet ASPError est en mesure de fournir au script 500-100.ASP. Une autre possibilité consiste à utiliser le script 500-100.ASP pour diriger une notification d'erreur vers le personnel approprié à l'arrière-plan, ainsi que pour masquer les détails de l'erreur aux utilisateurs. Cette version de 500-100.ASP indique simplement qu'une erreur est survenue et que l'utilisateur devra s'en charger plus tard, tout en envoyant, à l'arrière-plan, un message électronique au service d'assistance. Vous trouverez, en fin de chapitre, un exemple illustrant ces fonctions. Les exemples de code illustrant les propriétés de l'objet ASPError utilisent tous trois scripts de génération d'erreur différents. Le premier contient une erreur de syntaxe, le second contient une erreur dans une directive de prétraitement et le dernier génère une erreur d'exécution. Les exemples utilisent tous les mêmes trois pages ASP pour générer les erreurs, alors que le contenu de la page d'erreur 500-100.ASP personnalisée change pour illustrer les différentes propriétés. Les trois pages ASP générant des erreurs sont les suivantes :
    **** BEGIN Error Generating Script #1 ****
    <HTML>
    <HEAD><TITLE>
    Error Generation Page #1
    </TITLE></HEAD>
    <BODY>
    <%
    ' This page contains a syntax error.
    ' In the following For...Next loop, the keyword
    ' "For" is mispelled.
    Dim intCounter
    Fir intCounter = 1 to 100
    %>
    Look everyone! I'm counting: <%=intCounter%><BR>
    <%
    Next
    %>
    </BODY>
    </HTML>
    **** END Error Generating Script #1 ****

    **** BEGIN Error Generating Script #2 ****
    <HTML>
    <HEAD><TITLE>
    Error Generation Page #2
    </TITLE></HEAD>
    <BODY>
    <%
    ' This page contains a preprocessing error.
    ' The work "file" in the #INCLUDE preprocessor
    ' directive is mispelled:
    %>
    <!--#include fil=/headers/AdminHeader.INC -->
    </BODY>
    </HTML>
    **** END Error Generating Script #2 ****

    **** BEGIN Error Generating Script #3 ****
    <HTML>
    <HEAD><TITLE>
    Error Generation Page #3
    </TITLE></HEAD>
    <BODY>
    <%
    ' This page contains a runtime error.
    ' In the following For...Next loop, when the
    ' intCounter variable gets to zero, the result
    ' is a divide by zero error.
    Dim intCounter
    Dim dblDivResult
    For intCounter = 1 to 100
         dblDivResult = intCounter / (intCounter - 100)
    %>
    Look everyone! I'm dividing: <%=dblDivResult%><BR>
    <%
    Next
    %>
    </BODY>
    </HTML>
    **** END Error Generating Script #3 ****

ASPCode |
objASPError.ASPCode
La propriété ASPCode contient un code numérique représentant l'erreur spécifique à ASP survenue dans le script qui a généré l'erreur. La propriété est renseignée par IIS si l'erreur survient en traitant le script ASP. La propriété ASPCode est définie sur lecture seule.
Paramètres
Aucun
Exemple
Cet exemple suppose que le code suivant a été ajouté au script d'erreur personnalisé par défaut, 500-100.ASP, et que chacun des trois scripts affichés à la fin de la section Commentaires/Dépannage est utilisé pour déclencher une erreur l'appelant.
    **** BEGIN ASPCode Example Script ****
    <%
    ' This script demonstrates the use of the ASPCode
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the ASPCode property is " & objMyASPError.ASPCode
    %>
    **** END ASPCode Example Script ****
Lorsque vous exécutez les scripts de génération d'erreur, le script d'exemple précédent génère les trois réponses suivantes : Script de génération d'erreur #1 :
    The value of the ASPCode property is [EMPTY]
Script de génération d'erreur #2 :
    The value of the ASPCode property is ASP 0128
Script de génération d'erreur #3 :
    The value of the ASPCode property is [EMPTY]
Remarques
Comme indiqué précédemment, la propriété ASPCode n'est pas renseignée, sauf si l'erreur est survenue lors de l'interprétation du script ASP lui-même. La présentation des directives de prétraitement est terminée.

ASPDescription |
objASPError.ASPDescription
La propriété ASPDescription est une valeur de chaîne renseignée par IIS à la détection d'une erreur ASP. Elle fournit des données plus descriptives sur le type de l'erreur ASP survenue que la propriété ASPCode. Comme avec la propriété ASPCode, la propriété ASPDescription n'est renseignée que si l'erreur qui survient fait partie de l'interprétation d'un script ASP, plutôt que s'il s'agit d'une erreur d'exécution.
Paramètres
Aucun
Exemple
Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :
    **** BEGIN ASPDescription Example Script ****
    <%
    ' This script demonstrates the use of the ASPDescription
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the ASPDescription property is " & _
         objMyASPError.ASPDescription
    %>
    **** END ASPDescription Example Script ****
Lorsque vous exécutez les scripts de génération d'erreur, le script ASPDescription précédent génère les trois réponses suivantes : Script de génération d'erreur #1 :
    The value of the ASPDescription property is [EMPTY]
Script de génération d'erreur #2 :
    The value of the ASPDescription property is The Include file name must be
    specified using either the File or Virtual attribute.
Script de génération d'erreur #3 :
    The value of the ASPDescription property is [EMPTY]
Remarques
Comme ASPCode, la propriété ASPDescription n'est utile que pour les erreurs d'interprétation spécifique à ASP. La propriété Description de l'objet ASPError fournit presque toujours les mêmes informations ou des informations plus complètes sur l'erreur la plus récente.

Category |
objASPError.Category
La propriété Category contient une chaîne spécifiant le type de l'erreur qui est survenue : spécifique à IIS, au langage de script ou au composant.
Paramètres
Aucun
Exemple
Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code d'exemple suivant au script d'erreur personnalisé par défaut, 500-100.ASP :
    **** BEGIN Category Example Script ****
    <%
    ' This script demonstrates the use of the Category
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Category property is " & objMyASPError.Category
    %>
    **** END Category Example Script ****
Lorsque vous exécutez les scripts de génération d'erreur, ce script génère les trois réponses suivantes : Script de génération d'erreur #1 :
    The value of the Category property is Microsoft VBScript compilation
Script de génération d'erreur #2 :
    The value of the Category property is Active Server Pages
Script de génération d'erreur #3 :
    The value of the Category property is Microsoft VBScript runtime
Remarques
La propriété Category vous permet d'identifier l'emplacement de l'erreur plus rapidement.

Column |
objASPError.Column
La propriété Column contient une valeur Long indiquant la colonne de caractères spécifique dans laquelle apparaît le premier caractère du code générant l'erreur.
Paramètres
Aucun
Exemple
Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :
    **** BEGIN Column Example Script ****
    <%
    ' This script demonstrates the use of the Column
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Column property is " & objMyASPError.Column
    %>
    **** END Column Example Script ****
Lorsque vous exécutez les scripts de génération d'erreur, le script Column précédent génère les trois réponses suivantes : Script de génération d'erreur #1 :
    The value of the Column property is 19
Script de génération d'erreur #2 :
    The value of the Column property is -1
Script de génération d'erreur #3 :
    The value of the Column property is -1
Remarques
La propriété Column vous aide à localiser la syntaxe incorrecte dans votre code. Toutefois, si l'erreur est spécifique à ASP, ou si l'emplacement où survient l'erreur ne contient pas de code syntaxiquement incorrect, cette valeur est de -1 et, de ce fait, d'usage limité.

Description |
objASPError.Description
La propriété Description est une chaîne décrivant la dernière erreur survenue. En général, cette propriété fournit plus de détails et est plus utile que la propriété ASPDescription associée, sauf lorsqu'il s'agit d'une erreur spécifique d'interprétation ASP.
Paramètres
Aucun
Exemple
Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :
    **** BEGIN Description Example Script ****
    <%
    ' This script demonstrates the use of the Description
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Description property is " & objMyASPError.Description
    %>
    **** END Description Example Script ****
Lorsque vous exécutez les scripts de génération d'erreur, le script Description précédent génère les trois réponses suivantes : Script de génération d'erreur #1 :
    The value of the Description property is Expected end of statement
Script de génération d'erreur #2 :
    The value of the Description property is Missing File or Virtual attribute
Script de génération d'erreur #3 :
    The value of the Description property is Division by zero
Remarques
La valeur de la propriété Description fournit en général plus de détails que les autres propriétés de l'objet ASPError. Toutefois, comme les autres propriétés, elle est peu utile aux utilisateurs de votre application ASP. Par conséquent, il est essentiel que les explications que vous fournissez sur la cause de l'erreur soient complètes et utiles au niveau de l'utilisateur. En fin de chapitre, vous trouverez un exemple de script 500-100.ASP personnalisé que vous pouvez utiliser pour afficher des informations anodines sur une erreur tout en fournissant des informations utiles au développeur du script.

File |
objASPError.File
La propriété File indique le chemin d'accès complet du fichier contenant le code de génération d'erreur. Le nom de fichier contient le chemin d'accès complet du fichier à partir de la racine Web.
Paramètres
Aucun
Exemple
Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :
    **** BEGIN File Example Script ****
    <%
    ' This script demonstrates the use of the File
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the File property is " & objMyASPError.File
    %>
    **** END File Example Script ****
Lorsque vous exécutez les scripts de génération d'erreur, le script File précédent génère les trois réponses suivantes : Script de génération d'erreur #1 :
    The value of the File property is /errorgen1.asp
Script de génération d'erreur #2 :
    The value of the File property is /errorgen2.asp
Script de génération d'erreur #3 :
    The value of the File property is /errorgen3.asp
Remarques
Notez que le chemin d'accès du fichier est indiqué à partir du chemin d'accès racine du serveur Web, plutôt qu'à partir de la racine de l'application en cours.

Line |
objASPError.Line
La propriété Line est une valeur Long représentant le numéro de la ligne contenant le code de génération d'erreur.
Paramètres
Aucun
Exemple
Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :
    **** BEGIN Line Example Script ****
    <%
    ' This script demonstrates the use of the Line
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Line property is " & objMyASPError.Line
    %>
    **** END Line Example Script ****
Lorsque vous exécutez les scripts de génération d'erreur, le script Line précédent génère les trois réponses suivantes : Script de génération d'erreur #1 :
    The value of the Line property is 11
Script de génération d'erreur #2 :
    The value of the Line property is 11
Script de génération d'erreur #3 :
    The value of the Line property is 14
Remarques
Le compte des lignes débute à la première ligne de code ASP et commence par le numéro 1.

Number |
objASPError.Number
La propriété Number contient une valeur Long représentant un code d'erreur renvoyé par un composant COM. Cette valeur Long représente un code d'erreur COM standard.
Paramètres
Aucun
Exemple
Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :
    **** BEGIN Number Example Script ****
    <%
    ' This script demonstrates the use of the Number
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Number property is " & objMyASPError.Number
    %>
    **** END Number Example Script ****
Lorsque vous exécutez les scripts de génération d'erreur, ce script génère les trois réponses suivantes : Script de génération d'erreur #1 :
    The value of the Number property is -2146827263
Script de génération d'erreur #2 :
    The value of the Number property is -2147467259
Script de génération d'erreur #3 :
    The value of the Number property is -2146828277
Remarques
Aucune

Source |
objASPError.Source
La propriété Source est une chaîne contenant la ligne de code qui a causé l'erreur la plus récente, si ce code était syntaxiquement incorrect.
Paramètres
Aucun
Exemple
Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :
    **** BEGIN Source Example Script ****
    <%
    ' This script demonstrates the use of the Source
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Source property is " & objMyASPError.Source

    %>
    **** END Source Example Script ****
Lorsque vous exécutez les scripts de génération d'erreur, le script Source précédent génère les trois réponses suivantes : Script de génération d'erreur #1 :
    The value of the Source property is Fir intCounter = 1 to 100
Script de génération d'erreur #2 :
    The value of the Source property is [EMPTY]
Script de génération d'erreur #3 :
    The value of the Source property is [EMPTY]
Remarques
Comme indiqué précédemment, la propriété Source n'est utile que si l'erreur générée est une erreur de syntaxe. Dans le cas contraire, cette propriété apparaît vide.