Pour fonctionner correctement, ils doivent être placés dans une application virtuelle sur le serveur et le fichier global.asa fourni doit être placé dans le répertoire racine de l'application. Le moyen le plus simple consiste à placer le fichier global.asa dans le répertoire racine du site Web par défaut (C:/InetPub/WWWRoot par défaut).
C'est une bonne idée de renommer tous les fichiers global.asa existants afin qu'ils puissent être restaurés ultérieurement.
1. Affichage du contenu de la collection Application
L'objet ASPCounter est membre de la collection StaticObjects (définie via l'élément <OBJECT>), mais le reste (instancié par Server.CreateObject) est membre de la collection Contents.
Vous pouvez voir les valeurs placées dans ces collections à l'aide de la page Web d'exemple global.asa, que nous avons vue précédemment :
<!-- Déclarez l'instance du composant ASPCounter avec
portée au niveau de l'application //-->
<OBJECT ID=”ASPCounter” RUNAT=”Serveur” SCOPE=”Application”
PROGID=”MSWC.Compteurs”>
</OBJET>
...
...
<SCRIPT LANGUAGE=”VBScript” RUNAT=”Serveur”>
Sous-Application_onStart()
'Créer une instance d'une connexion ADO avec une portée au niveau de l'application
Définir Application("ADOConnection") = Server.CreateObject("ADODB.Connection")
Dim varArray(3) 'Créez un tableau Variant et remplissez-le
varArray(0) = "C'est un"
varArray(1) = "Tableau de variantes"
varArray(2) = « stocké dans le »
varArray(3) = "Objet application"
Application("Variant_Array") = varArray 'Stockez-le dans l'application thd
Application("Start_Time") = CStr(Now) 'Stocker la date/heure sous forme de chaîne
Application("Visit_Count") = 0 'Mettre la variable du compteur à zéro
Fin du sous-marin
...
...
</SCRIPT>
(1) Code pour parcourir la collection Contents.
Afin de parcourir la collection Contents, vous pouvez utiliser une structure For Each...Next. Chaque élément de la collection peut être une simple variable de type Variant, un tableau de Variant ou une référence à un objet. Étant donné que chaque type de valeur doit être traité différemment, chacun doit être vérifié pour déterminer son type.
Vous pouvez utiliser la fonction VarType dans VBScript pour accomplir ce travail. Utilisez plutôt les fonctions IsObject et IsArray :
pour chaque objItem dans Application.Contents
Si IsObject(Application.Contents(objItem)) Alors
Response.Write "Référence de l'objet : '" & objItem & "'
"
ElseIf IsArray(Application.Contents(objItem)) Then
Response.Write "Array: '" & objItem & "' le contenu est :
"
VarArray = Application.Contents (objItem)
'Remarque : ce qui suit ne fonctionne qu'avec un tableau unidimensionnel
Pour intLoop = 0 Vers UBound (varArray)
Réponse.Écrire " Index(" & intLoop & ") = " & _
VarArray(intLoop) & "
"
Suivant
Autre
Réponse.Écrivez "Variable : '" & objItem & "' = " _
& Application.Contents(objItem) & "
"
Fin si
ensuite
comment le programme récupère ce tableau à partir de l'objet Application. Affectez-le à une variable locale (Variant) et utilisez l'instruction suivante :
varArray = Application.Contents(objItem)
Utilisez la fonction UBound pour connaître la taille du tableau (nombre d'éléments). Cette valeur peut être utilisée comme condition de terminaison. pour le parcours :
For intLoop = 0 UBound(varArray)
Cet exemple est un tableau unidimensionnel et affichera uniquement le contenu d'un tel tableau. Modifiez le code si nécessaire pour gérer les tableaux multidimensionnels, par exemple :
For intLoop = 0 To UBound(varArray)
IntNumberOfDimensions = UBound(varArray, 1)
Pour intDimension = 0 À intNumberOfDimensions
Réponse.Écrire " Index(" & intLoop & ") = " _
& varArray(intLoop, intDimension)
Suivant
Réponse.Écrivez ""
Suivant
(2) Code pour parcourir la collection StaticObjects
La collection StaticObjects contient toutes les références d'objet déclarées à l'aide de l'élément <OBJECT> dans global.asa. Étant donné que chaque entrée est une variable objet, le tableau peut être parcouru avec un code plus simple. Nous afficherons le nom de l'objet (tel que défini à l'origine dans la propriété ID) :
pour chaque objItem dans Application.StaticObjects
Si IsObject(Application.StaticObjects(objItem)) Alors
Response.Write "<OBJECT> élément : ID='" & objItem & "'
"
Fin si
Suivant
2. Opérations sur les collections
1) Ajouter des valeurs à la
collection Contents La méthode d'ajout de valeurs à la collection Contents est la même que celle utilisée dans le code de script de la page Web global.asa. Permet d'ajouter une nouvelle valeur Variant à l'objet Application, avec un nom et une valeur suggérés (qui peuvent être modifiés selon les besoins), de cliquer sur le bouton, de recharger la page, d'ajouter la valeur à la collection Application.Contents et d'afficher dans la liste. .
Ajoutez le code de la nouvelle entrée Contenu
pour placer tous les boutons et autres contrôles HTML sur un formulaire dans l’exemple de page Web. ACTION définit le chemin de la page Web actuelle et la recharge lorsque le formulaire est soumis. L'attribut METHOD est "POST", donc la valeur du contrôle apparaît dans la collection Request.Form. Ces deux techniques ont été utilisées dans les chapitres précédents :
<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
Les boutons de ce formulaire sont des contrôles HTML INPUT ordinaires, qui ont le même titre (trois espaces) mais un nom différent. Par exemple, le code pour créer le premier bouton (ajouter la valeur à l'objet Application) est :
<INPUT TYPE="SUBMIT" NAME="cmdAdd" VALUE="">
Lors du rechargement de la page Web, vérifiez la collection Request.Form , Déterminez sur quel bouton SOUMETTRE a été cliqué et gérez-le en conséquence. S'il s'agit d'un bouton qui ajoute une valeur à l'objet Application (le bouton est nommé cmdAdd dans l'élément HTML <INPUT>), utilisez le segment de programme suivant :
If Len(Request.Form("cmdAdd")) Then
strVarName = Request.Form("txtVarName")
strVarValue = Request.Form("txtVarValue")
Application.Lock
Application("strVarName") = strVarValue
Application.Déverrouiller
End If
Notez comment l'application utilise les méthodes Application.Lock et Application.Unlock pour garantir que ces valeurs ne sont pas confondues par deux utilisateurs qui y accèdent simultanément. Cela n'est généralement pas possible si vous définissez simplement une valeur spécifique. Mais il est sage de toujours utiliser les méthodes Lock et Unlock.
2) Supprimez les valeurs de la collection Contents.
Créez cette liste lors de l'exécution de la page Web ASP en parcourant la collection Contents (comme nous l'avons fait précédemment). Cependant, nous collectons uniquement les noms de chaque élément et les plaçons dans l’élément <OPTION> au sein de l’élément de liste <SELECT> :
…
<SELECT NAME=”lstRemove” SIZE=”1”>
<%
Pour chaque objItem dans Application.Contents
Réponse.Écrivez « <OPTION> » & objItem & « </OPTION> »
Suivant
&>
</SÉLECTIONNER>
…
Une fois le code ASP exécuté, le résultat affiché dans le navigateur est :
<SELECT NAME="lstRemove" SIZE="1">
<OPTION>ADOConnexion</OPTION>
<OPTION>Variant_Array</OPTION>
<OPTION>Heure_Début</OPTION>
<OPTION>Compte_Visites</OPTION>
<OPTION>Ma_Nouvelle_Valeur</OPTION>
</SELECT>
(1) Supprimer une seule valeur
Lorsque vous cliquez sur le bouton pour supprimer une seule valeur, le formulaire est à nouveau soumis à la même page Web, mais cette fois un bouton SOUMETTRE pour cmdRemoveThis sera configuré, puis le bouton Supprimer La méthode de la collection Application.Contents sera appelée :
If Len(Request.Form("cmdRemoveThis")) Then.
strToRemove = Request.Form("lstRemove")
Réponse.Écrivez "strToRemove = " & strToRemove
Application.Lock
Application.Contents.Remove(strToRemove)
Application.Déverrouiller
End If
Notez qu'il s'agit d'une méthode de la collection Contents, et non de l'objet Application. La syntaxe est Application.Contents.Remove, et non Application.Remove.
Résultat de la suppression de la valeur Start_Time de la collection Contents.
(2) Supprimez toutes les valeurs.
Si vous cliquez sur le dernier des trois boutons de type SUBMIT, le code de la page Web détectera que le bouton cliqué est cmdRemoveAll et exécutera la méthode RemoveAll de la collection Application.Contents :
If Len( Formulaire de demande("cmdRemoveAll")) Puis
Application.Lock
Application.Contents.RemoveAll
Application.Déverrouiller
End If
vous rappelle encore une fois qu'il s'agit d'une méthode de la collection Contents, pas d'une application. La syntaxe est Application.Contents.RemoveAll, et non Application.RemoveAll.