Accueil
Contact: Contact



ASP et Composants Serveurs



Comment les intégrer proprement

Un composant serveur est typiquement un contrôle ActiveX, conforme aux normes COM, DCOM, ou COM+. Normalement, ce sont des fichiers avec l’extension de nom de fichier ‘.dll’ ou ‘.ocx’. Ces fichiers doivent exister sur le serveur et en plus être référencés dans la base de registres du système d’exploitation. Une fois l’installation faite, le composant est disponible pour les scripts ASP. On utilise l’instruction VBScript suivante pour créer une instance de l’objet :

Set MonObjet = Server.CreateObject("Scripting.FileSystemObject")

…où Scripting.FileSystemObject est un exemple d’un nom d’objet. On accède aux fonctionnalités de l’objet utilisant la variable MonObjet. A la fin du script, ou dès que vous n’avez plus besoin de l’objet, détruisez-le avec l’instruction VBScript suivant :

Set MonObjet = Nothing

Si l’objet à des méthodes comme Open (ouverture), appeler une méthode Close (fermeture) avant de détruire l’objet. Si vous négligez de faire cette action, les ressources du serveur seront mal utilisées : au bout d’un moment, la machine va s’apercevoir que l’objet n’est plus requis, mais en attendant, elle sera moins performante.

Vous n’avez pas la liberté de choisir vous mêmes les composants serveurs à utiliser dans les projets. Certains composants des différents éditeurs ne sont pas compatible entre eux, ou encore pire, ne sont pas fiable : ce qui provoque des gros problèmes de mise en production d’une application.

Composants tierce partie

Ce sont des composants achetés auprès des entreprises spécialisées dans la création des objets ActiveX. Nous utilisons actuellement un composant de téléchargement de fichiers depuis un navigateur (upload) vers un serveur, et un composant de compression et de décompression des fichiers (formats ZIP, GZIP, TAR, etc.). Ces composants doivent être installés sur le serveur.

Réutilisation du code

Il faut d’abord que tout code soit lisible et commenté. C’est-à-dire : expliquer le but de chaque section de code, son fonctionnement, les données en entrée et en sortie, et sa façon de gérer les erreurs (ou les données inattendues).

Utilisez des fonctions et des sous-procédures au maximum. Ceci favorise la réutilisation, et a l’avantage supplémentaire de rendre modulaire le code, ce qui à son tour permet d’isoler mieux des éventuels problèmes ou des bogues. D’ailleurs, tout ce qui commun devrait être mis dans un emplacement partagé, c’est-à-dire un fichier INCLUDE dans la plupart des cas.

Un ou plusieurs fichiers de constantes (variables dont la valeur ne change jamais, sauf si on modifie l’installation du site) sert à faciliter la maintenance et la réutilisation du code. Pensez à paramétrer les noms des tables ou des champs s’il existe une possibilité de changement de bases de données, par exemple.

Evidemment, il vaut mieux ne pas réinventer le même code pour chaque projet. Normalement, les besoins des codes sources devront être identifiés au démarrage d’un projet.

Pour aller plus loin, on peut écrire le code commun d’un projet en tant qu’une série de services ; on applique le même principe à tout objet, même les objets de base. La raison, c’est la maintenance et longévité des projets. Par exemple, l’interface ODBC sera remplacée par OLE DB d’ici quelques années ; comme presque tout site s’appuie sur un accès aux bases de données, il est clair qu’il faut prévoir tout problème.

En effet, un service peut être implémenté avec une fonction ou une classe en VBScript. On appelle la fonction ou une méthode de la classe afin d’effectuer l’action requise : une telle fonction ou méthode s’appelle une service (pour la messagerie, accès aux bases de données, FTP, téléchargement, …). Ces fonctionnes peuvent être modifiées pour prendre en compte de tels changements d’environnement informatique : on n’a qu’à appeler la fonction (qui acceptera toujours les même paramètres et qui rendra toujours le même format de résultat) sans se soucier des traitements faits par la fonction.

On va maintenant regarder quelques exemples

D’abord, pour appliquer la meilleure pratique, on définit les constantes dont les fonctions de service auront besoin. Il vaut mieux définir ces constantes dans un fichier commun qui ne sert qu’au paramétrage.

Voici un exemple:

DSN_CONSTANTE = "chaîne_de_connexion_ODBC"

Ensuite, on définit la fonction. Comme d’habitude, utilisez un fichier commun.

Function ObtenirConnexionBDD()
Dim oAdoCnx
Set oAdoCnx = Server.CreateObject("ADODB.Connection")
oAdoCnx.Open (DSN_CONSTANTE)

' La constante
Set ObtenirConnexionBDD = oAdoCnx
End Function
Sub DetruireConnexionBDD
(ByRef
oAdoConnexion)
Call oAdoConnexion.Close()
Set oAdoConnexion = Nothing
End Sub

Finalement, on appelle cette fonction. Le format de l’appel ne devrait jamais changer d’une page à l’autre, sauf s’il y a des paramètres à fournir.

Dim oConx
Set oConx = ObtenirConnexionBDD()
' Traitements ici qui se servent de la connexion...
DetruireConnexionBDD (oConx)

Ici, pour l’ouverture de la connexion, on ne sait pas qu’elle s’agit d’une connexion ADO ; on n’a pas besoin de le savoir. Evidemment, il faut faire des traitements en respectant l’API d’ADO : mais pourquoi écrire des fonctions de service pour accomplir ces traitements aussi ?

Ces exemples vous ont été présentés en VBScript, car ce langage est le plus utilisé en ce moment. Cependant, du point de vue technique, j’aurais préféré utiliser JavaScript. Pourquoi? Parce que dans le cas où une erreur serait survenue (soit une erreur logique, soit une vraie erreur système), on peut remonter le problème avec un objet 'erreur' Dans l’exemple, il fallait signaler l’échec par la valeur Null.


Rappel du langage et des objets

VBScript

VBScript s’intègre à tout environnement de scripting sur les plate formes Microsoft. Il est le langage le plus utilisé dans l’environnement ASP, principalement parce qu’il s’interface facilement aux autres éléments dans cet environnement. VBScript est facile à apprendre, et presque tous les exemples d’ASP sont en VBScript. N’oubliez pas par contre que d’autres langages peuvent être utilisés à sa place. Par exemple, JScript propose une meilleure structure et une meilleure gestion d’erreurs ; l’utilisation de JScript facilitera la conversion des ASP vers les JSP (JavaServer Pages) si jamais cette opération se révèle nécessaire.

On ne va pas vous former ici à VBScript . Nous supposons que vous comprenez déjà ce langage assez bien.


Environnement ASP

ASP n’est pas un langage. ASP est un environnement de programmation qui propose un jeu d’objets qui interface avec un serveur IIS (Internet Information Server). Pour interagir avec ses objets, ASP propose une interface à laquelle plusieurs langages peuvent se connecter, à condition qu’ils soient compatibles avec l’interface ActiveX hôte de scripting. Par défaut, cela vous permet d’utiliser VBScript ou JScript avec ASP ; il existe en plus d’autres langages tierce partie, comme PerlScript, qui sont compatibles avec cette interface. Donc, vous pouvez changer les versions de IIS-ASP indépendamment des versions des moteurs de scripting. Chaque site web est reconnue comme une Application IIS.

Celles-ci commencent lorsque le service IIS démarre sur une machine Windows NT/2000 Server, jusqu’à ce que l’on les arrête volontairement depuis le console d’administration d’IIS. Un serveur IIS peut contenir plusieurs applications à la fois; chacune d’entre elles peut être démarrée ou arrêtée indépendamment.

Lorsque un client (typiquement un ‘internaute’ ou un utilisateur d’un Intranet ou d’un Extranet) se connecte à un site web IIS-ASP, ce serveur lui donne un identifiant unique (s’il n’en a pas déjà un), utilisant un cookie. A chaque fois qu’il y a un échange d’information entre le client et le serveur, ce cookie est transmit avec la requête HTTP; le serveur saura alors associer la requête avec le bon profil d’utilisateur et ses informations (le serveur garde ces informations localement dans sa mémoire ou sur disque). Cette association dure jusqu’à ce qu’il n’y ait plus de connexions au serveur au bout d’une période prédéfinie, ou jusqu’à ce que le client ou serveur demande volontairement l’abandon de cette association. Ce concept est connu comme une Session.

Lorsque une application ASP ou une session commence ou se termine, il est possible de répondre à ces événements avec des scripts dans un fichier facultatif – global.asa – à la racine de l’arborescence du site web. Ainsi, au début d’une session ou d’une application, on peut définir des paramètres globaux ; également, à la fin, on peut libérer les ressources utilisées et nettoyer tout ce qui a été créé de façon temporaire.

Les objets qui font l’environnement ASP sont toujours immédiatement disponible aux scripts. Les voici:

  • Applicatio: contient des paramètres valides pendant la durée de vie d’une application et communs avec toutes les Sessions.

  • Session: contient des données relatives à chaque client. Non partagées avec d’autres clients.

  • Request: toutes les données associées à la requête HTTP sont gérées et interprétées par cet objet. Notamment les informations à propos de l’identité du client, la sécurité, et les informations transmises un formulaire.

  • Response: la réponse à envoyer (normalement un document HTML) est générée par cet objet. Permet notamment de créer dynamiquement la réponse. On peut également envoyer des directives HTTP au client pour rediriger la requête ailleurs.

  • Server: permet de accéder aux composants ActiveX sur le serveur, contrôler l’environnement de scripting, et encoder des données. Il existe d’importantes nouveautés dans la version 5 d’IIS (voir plus tard).

Environnement de données

L’accès aux bases de données se fait avec un ensemble de composants ActiveX installés sur le serveur. Ces composants font partie de MDAC (Microsoft Data Access Components), dont notamment l’ensemble d’objets ADO (ActiveX Data Objects). Les objets principaux d’ADO sont:

  • Connection (connexion): permet l’échange de données. Tout autre objet ADO a besoins d’une connexion ouverte.

  • Command (commande) : encadre une instruction SQL.

  • Parameter (paramètre) : encadre un paramètre d’une instruction SQL.

  • RecordSet (collection d’enregistrements) : permet de naviguer et manipuler des données.

  • Field (champ) : une colonne d’une RecordSet.

Transactions

Microsoft Transaction Server assure les transactions. Le but d’une transaction est de regrouper une série de traitements pour éviter l’instabilité d’une application. Si tout élément de la transaction réussi, la transaction sera ‘commit’ : c’est-à-dire que toutes les actions effectuées seront acceptées ; sinon, si tout échoue ou même juste une partie de la transaction échoue, toutes les actions seront annulées pour revenir à l’état du départ.

Environnement XML

La bibliothèque d’objets qui permet de traiter les documents XML se trouve dans le fichier MSXML.DLL. Ce fichier est à télécharger ou est installé sur un poste avec Internet Explorer 5. Ce fichier est destiné aux applications clientes et serveurs. Les objets principaux sont XMLDOM (traitement XML et XSL) et XMLHTTP (échange de données XML à travers un réseau). XMLDOM comprend un parseur validant (contre une DTD) et non-validant, ainsi qu’un processeur XSL.

Notez qu’à partir de la version 2.5 des ADO, il sera possible d’accéder les données sous format XML dans des objets RecordSet hiérarchiques. Aussi, SQL Server (et probablement d’autres serveurs de bases de données) sera capable de traiter des requêtes et des réponses de données sous format XML et HTTP




Autres langages dans l’environnement ASP



JavaScript

On peut utiliser le noyau du langage JScript pour accéder et manipuler les objets de l’environnement ASP. Rien ne change en terme de fonctionnalités par rapport à VBScript, mais vous disposerez de tous les avantages du JScript. Notez que les objets des navigateurs web ne sont évidemment pas disponible : par exemple, vous ne pouvez pas utiliser window.alert() ou document.write() ; pour cette dernière méthode, vous utiliserez Response.Write(). Commençons avec un exemple d’un script ASP écrit en JScript :

<%@ Language=JavaScript %>
<%
var oAdoCnx, oAdoRst, sCmdSql, arNoms, i, j;
try {
oAdoCnx = Server.CreateObject("ADODB.Connection");
oAdoCnx.Open("PerfASP");
try {
sCmdSql = "SELECT * FROM tabExemple ORDER BY Nom ASC";
oAdoRst = Server.CreateObject("ADODB.RecordSet");
oAdoRst.Open (sCmdSql, oAdoCnx);
arNoms = new Array();
i = 0;
while (!oAdoRst.EOF) {
arNoms[i++] = oAdoRst("Nom")+", "+oAdoRst("Prenom");
oAdoRst.MoveNext();
}
oAdoRst.Close();
}
catch (t) {
throw (t); // A exécuter si une erreur est survenue
}
finally {
oAdoRst = null; // A exéctuer en tout cas
}
oAdoCnx.Close();
oAdoCnx = null;
}
catch (t) {
oAdoCnx = null;
Response.Redirect("erreur.asp?desc=" + escape(t.description));
}
%>

L’avantage principal dans cet exemple est la gestion d’erreurs on ne mélange pas le code applicatif avec le code qui gère les erreurs potentielles. On encadre les endroits où il y a une risque d’erreur pour un traitement ailleurs.

Cet exemple est très simple: on aurait pu aussi se servir de l’orientation objet de JScript ou interagir avec des scripts écrits dans d’autres langages.

PerlScript

PerlScript utilise le noyau du langage Perl (version de ActiveState) pour accéder et manipuler les objets de l’environnement ASP. Regardons un exemple simple

Language=PerlScript %>
<%
my $oAdoCnx = $Server->CreateObject("ADODB.Connection");
$oAdoCnx->Open("PerfASP");
my $sCmdSql = "SELECT * FROM tabExemple ORDER BY Nom ASC";
my $oAdoRst = $Server->CreateObject("ADODB.RecordSet");
$oAdoRst->Open ($sCmdSql, $oAdoCnx);
my @arNoms;
my $i = 0;
while ($oAdoRst->{EOF} == 0) {
$arNoms[$i] = $oAdoRst->Fields("Nom")->{Value} . ", " . $oAdoRst->Fields("Prenom")->{Value};
$oAdoRst->MoveNext();
$i++;
}
$oAdoRst->Close();
undef $oAdoRst;
$oAdoCnx->Close();
undef $oAdoCnx;
%>
for (my $j = 0; $j < scalar(@arNoms); $j++) {
$Response->Write(" }
%>

Le premier constat : les scripts Perl dans l’environnement ASP n’utilise pas les mêmes moyens qu’un script CGI (sur un serveur Apache par exemple) pour gérer le traitement de la page. On n’utilise pas l’environnement CGI ici : on utilise les objets ASP. Le deuxième constat, c’est que normalement (avec JScript et VBScript) on utilise souvent (même sans le savoir) les " propriétés par défaut " d’un objet ; par exemple, dans un exemple VBScript ou JScript, vous verrez qu’il suffit de préciser le nom de la colonne (entre guillemets et entre parenthèses) suivant le nom de l’objet RecordSet pour accéder à la valeur d’un champ. Avec Perl par contre (qui ne connaît pas l’OLE de Microsoft), il faut spécifier la propriété précisement, d’où le nom de la collection Fields et le nom de la propriété Value.

En résumé, le noyau du langage Perl est toujours disponible (ce qui est très puissant et riche en fonctionnalité, notamment les expressions régulières et l’accès à Internet). Il suffit de préciser le langage à utiliser dans l’en-tête du script, et puis se souvenir que l’on utilise le jeu d’objets d’ASP au lieu des bibliothèques CGI.


ASP Evolutions Techniques



IIS 5.0 – l’environnement serveur

Internet Information Server 5.0 fait partie de Windows 2000 Server. Au niveau des fonctionnalités du serveur lui-même, il propose un meilleur contrôle de l’environnement dans lequel tournent les applications web (partage et séparation des ressources) et une répartition de charge améliorée à travers plusieurs serveurs. Pour ce qui concerne les scripts ASP, les changements ne sont pas très nombreux mais restent cependant significatifs :

  • la propriété Response.Buffer est par défaut mis à True ; dans les versions précédents, cette propriété était à False par défaut. En conséquence, les pages générées par un script ne seront envoyées au client qu’au moment que le script se termine ou qu’une commande d’envoi exprès est exécutée. Avant, les pages étaient envoyées au fur et au mesure qu’un morceau du document était prêt à envoyer.

  • l’objet Server propose une méthode Transfer, qui permet de continuer l’exécution du script dans un autre fichier ASP ; le script qui reprend l’exécution aura accès à toutes les variables utilisées dans la page d’origine.

  • l’objet Server propose une autre nouvelle méthode, Execute. Celle-ci demande qu’une autre page ASP s’exécute, et à la fin d’exécution de cette deuxième page, la page d’origine reprend l’exécution.

Moteurs de script ActiveX


  • VBScript 5

    • Sommaire

      Les comparaisons entre VBScript et JScript avaient souvent favorisé ce dernier à cause de sa puissance, mais avec la version 5 qui est sortie depuis 1999, et la version 5.5 (prévu de sortir prochainement), il y des nouveautés réellement très utiles pour ce langage.

    • RegExp

      Les expressions régulières sont très utilisés dans le langage Perl : il permet de valider des chaînes de caractères contre les patterns – c’est-à-dire, des séries de caractères, de mots, et de chiffres, à inclure et à exclure ; on peut combiner ces séquences. Dans l’exemple ci-dessous, on valide une chaîne de caractères contre un pattern e-mail (notez que l’exemple peut être encore réduit)


      Function ValiderAdresse (ByRef sEmail)
      Dim oRegExp, bOut
      Set oRegExp = New RegExp
      RegExp.pattern = "\w+\@[.\w]+"
      If oRegExp.Test(sEmail) = True Then
      bOut = True
      Else
      bOut = False
      End If
      ValiderAdresse = bOut
      End Function

      Le syntaxe des patterns est expliqué dans la documentation officielle de Microsoft. La version 5.5 de VBScript (actuellement en phase de test) apportera encore plus de puissance aux RegExp.

    • Eval, Execute, et ExecuteGlobal

      Un avantage clé de JavaScript était sa capacité de se modifier en cours d’exécution. Maintenant, VBScript sait faire plus ou moins la même chose : par contre, avec VBScript, c’est plus compliqué (principalement due au fait que l’opérateur ‘=’ en VBScript a deux sens). Eval est destiné à évaluer une expression, et Execute est destiné les instructions entières ; ExecuteGlobal permet d’exécuter les instructions dans un contexte global, permettant de créer des nouveaux classes dynamiquement par exemple.


      Eval ("x = 15") ' x est comparé à 15; le résultat est soit True ou bien False
      Execute ("x = 15") ' x aura la valeur 15

    • DCOM

      DCOM permet d’utiliser un objet sur un serveur distant comme s’il existant sur le poste local. La seule différence au niveau d’utilisation d’un objet DCOM par rapport à un objet installé localement se trouve au moment de création d’un objet : on ajoute le nom de serveur distant à l’appel à la méthode CreateObject. Après, on utilise l’objet comme n’importe quel autre.

      Set monObjetDistant = CreateObject("ObjetDistantProgID","\\serveurdistant")

    • Class

      Avec l’introduction des classes au langage VBScript, sa puissance à fortement augmentée ; il est comparable aux constructeurs d’objet sous JavaScript.

      Class Personne
      Public Prenom, Nom
      Private sAdresseEmail
      Property Get AdresseEmail
      AdresseEmail = sAdresseEmail
      End Property
      Property Let AdresseEmail(sEmail)
      sAdresseEmail = sEmail
      End Property
      Property Get NomComplet
      NomComplet = Prenom & " " & UCase(Nom)
      End Property
      Sub Definir(Premier, Dernier)
      Prenom = Premier
      Nom = Dernier
      End Sub
      Function BaliseEmail(sLibelle)
      BaliseEmail = "<a href=""mailto:" & sAdresseEmail & """>" & sLibelle & "</a>"
      End Function
      End Class

      Dim Auteur
      Set Auteur = New Personne
      Auteur.Definir "AF", "LAURENT"
      Auteur.AdresseEmail = "aflaurent@societe.com"

      Response.Write Auteur.BaliseEmail(oAuteur.NomComplet)

      Set Auteur = Nothing


      On définit un bloc Class, dans lequel on peut déclarer des variables de portée interne (Private) ou globale (Public). On les accède avec les blocs Property Get (lire) et Property Let (écrire). On imbrique les blocs Function pour définir les méthodes (ce qui diffère du JavaScript où les méthodes sont externes). Il est également possible de définir une propriété ou une méthode par défaut avec le mot-clé Default.

      Pour se servir de ces classes, on déclare une variable (avec Dim), on lui associe une nouvelle instance de la classe (avec SetNew), on accède aux propriétés et aux méthodes de manière standard, et puis on ne néglige pas de détruire l’objet à la fin.

  • JavaScript 5

    • Gestion d’erreurs et d’exceptions

      Dans l’exemple de l’utilisation de JavaScript en ASP, on utilise les commandes throw, try, catch, et finally. Ces instructions (sauf throw) permet de découper le code dans trois blocs : un bloc à exécuter en supposant qu’il n’y a jamais d’erreur, un bloc qui traite toutes les erreurs attendues (et même inattendues si souhaité), et un bloc à exécuter qu’il y avait eu des erreurs ou non. L’instruction throw permet de générer volontairement une erreur, où l’erreur est un objet dont le développeur aura écrit le constructeur.


      try {
      /* On exécute un script ici sans tester pour les erreurs. Si une erreur est survenue ou
      générée volontairement, l’exécution du bloc "try" s’arrête immédiatement, et le bloc
      "catch" prend le contrôle et récupére l’erreur */
      }
      catch (t) {
      /* "t" est l’erreur récupéré. On n’a qu’un bloc "catch" par bloc "try", donc il faut
      tester le type d’erreur, normalement en utilisant l’opérateur "instanceof". On peut
      même choisir de ne pas traiter l’erreur: pour faire cela, il suffit l’instruction
      "throw t". Un bloc try...catch extérieur est donc réquis pour empêcher l’affichage
      de l’erreur dans l’environnement hôte. */
      }
      finally {
      /* Ce bloc est exécute dans tout cas (sauf si vous déchargez le script...) */
      }

      Notez que si vous abandonner le script dans un bloc catch, par exemple avec Response.Redirect, le bloc finally ne pourra pas être exécuté.
       
    • DCOM

      L’utilisation des objets distants (sur un autre serveur) fonctionne identiquement sous JScript ; la syntaxe est la suivante:

      var monObjetDistant = new ActiveXObject("ObjetDistantProgID","\\serveurdistant");

    • Prochaines évolutions

      Dans l’immédiat, JScript sera homogénéisé avec le norme ECMAScript 262/3. Ce qui veut dire des nouvelles fonctions ( notamment pour améliorer les tableaux et la manipulation des objets ) et des fonctions renommés ( escape() et unescape() devient encodeURI() et decodeURI() ). Les expressions régulières seront encore plus puissantes.

      Plus loin (d’ici un an), ECMAScript 262/4 proposeront un typage plus fort et davantage d’orientation objet.

Les Failles et Points Sensibles



Formatage du code ASP

Vous n’êtes pas obligé de déclarer les variables en VBScript, mais cette pratique est recommandée. Vos erreurs deviendront plus facile à repérer et vous allez pouvoir intégrer facilement des scripts externes. Utilisez la directive Option Explicit avant toute instruction dans un script : vous serez obligé de déclarer toute variable, ce qui vous donne deux avantages. Le premier, c’est que les variables inconnues seront immédiatement visible, et le deuxième, c’est le script sera plus rapide car le moteur VBScript ne serait pas obligé de faire de démarches lentes et compliquées pour savoir à quelle variable vous faites référence.

Respectez la casse, même s’il n’est pas obligatoire. Les règles de nommage de variables sont aussi à respecter, surtout parce que les variables peuvent changer de type. Voici les conseils, pris du document Méthodes de Développement
:

Préfix Type Exemple
b bln Boolean bEstConnu
dt dat Date et/ou Heure (pas caractère) dtEnregistrement
f flt Numérique point flottant fEchelle
n num Numérique entier nPersonneID
s str Chaîne de caractères sPrenom
v var Type variant vChampLu
a arr Array (tableau) aLignesBdd()
o obj Objet oNewMail
c col Collection cCellules

L’utilisation des objets

Ne négligez jamais de détruire les objets utilisés. Pour vous rappeler comment faire cette action en tout langage courant, voici les instructions nécessaires :

  • en VBScript :Set monObjet = Nothing
  • en JScript :monObjet = null;
  • en PerlScript :undef $monObjet ;


Certains objets, comme les RecordSet et les Connection devront être d’abord mis dans un état " fermé ", normalement avec une méthode Close(). N’oubliez pas que vous créez parfois des objets sans le savoir. Par exemple, l’instruction :

Set annuaire = oAdoCnx.Execute("SELECT * FROM annuaire")
…créera un objet RecordSet. Vous devez donc le fermer et détruire après que vous n’en avez plus besoin.

Choix de types de variables en VBScript

Certaines subtilités du langage VBScript doivent être comprises afin de garantir la fiabilité du code. Il faut bien comprendre les types de données (en effet, les sous-types de Variant) qui vous sont proposés en VBScript. Regardons cette table:


Sous-type Description
Empty Variable non-renseignée : considérée comme 0 (zéro) et une chaîne vide.
Null Variable déclarée volontairement d’être vide. Très utile.
Boolean Soit True ou False. En VBScript, True égale -1, et False égale 0.
Byte Un entier entre 0 et 255.
Integer Un entier entre –32 768 et 32 767.
Currency Entre –922 337 203 685 477,5808 et 922 337 203 685 477,5807 .
Long Un entier entre –2 147 483 648 et 2 147 483 647.
Single Nombre à point flottant, de –3,402823E38 à –1,401298E-45 (valeurs négatives) et de 1,401298E-45 à 3,402823E38 (valeurs positives)
Double Nombre à point flottant (maximum précision)
Date (Time) Une date entre l’an 100 et l’an 9999 (précis jusqu’à la milliseconde)
String Une chaîne de caractères (limité à deux milliards de caractères)
Object Un objet
Error Une erreur

Un piège grave, trop souvent oublié en VBScript dans le contexte des scripts ASP qui appuient sur les bases de données, c’est l’utilisation du type Int où on aura du choisir le type Lng, notamment avec la fonction CInt (où il vaut mieux utiliser la fonction CLng). Comme un Int ne peut jamais avoir une valeur supérieure à 32768, on survient souvent des problèmes où un script ne fonctionne plus car une valeur en provenance d’une base de données (disons un identifiant numérique) est supérieure à cette limite.

Dans le contexte des requêtes et des réponses HTTP, on manipule toujours les chaînes de caractères. Tout ce que vous récupérez d’un formulaire est une chaîne de caractères : si vous réussissez dans certains circonstances à utiliser un chiffre lu d’un formulaire comme un nombre, c’est parce que – dans certains circonstances – VBScript simplifiera les conversions ; néanmoins, cette simplification ne fonctionne pas partout, donc vous devez toujours faire des conversions explicites en utilisant les fonctions de conversion de VBScript.

Si vous utilisez les sous-procédures en VBScript pour modifier la valeur de variables passées comme des paramètres, utilisez les mots-clés ByRef (pour avoir une référence à la variable ou à l’objet) ou ByVal (pour avoir une copie de la variable ou de l’objet).

Finalement, notez que les fonctions de conversion en VBScript prend toujours compte des paramètres régionaux, donc si un tiers du système (soit le navigateur, le serveur web, ou la base de données) diffère d’un autre, ces conversions risque de ne pas fonctionner correctement.

Gestion d’erreurs en VBScript

Vous démarrer la gestion d’erreurs en VBScript avec l’instruction : On Error Resume Next

…ce qui veut dire : " ne pas arrêter s’il y a une erreur ". Vous êtes obligé de vérifier après chaque commande problématique s’il a échoué ou réussie. Mais une fois activé, vous ne pouvez pas le désactiver. Donc s’il y une erreur inattendue plus loin dans le script, vous n’allez pas le repérer facilement. Faites donc très attention.