Para que funcionen correctamente, deben ubicarse en una aplicación virtual en el servidor y el archivo global.asa proporcionado debe ubicarse en el directorio raíz de la aplicación. La forma más sencilla es colocar el archivo global.asa en el directorio raíz del sitio web predeterminado (C:/InetPub/WWWRoot de forma predeterminada).
Es una buena idea cambiar el nombre de los archivos global.asa existentes para poder restaurarlos más tarde.
1. Visualización del contenido de la colección de aplicaciones
El objeto ASPCounter es miembro de la colección StaticObjects (definida a través del elemento <OBJECT>), pero el resto (instanciado por Server.CreateObject) es miembro de la colección Contents.
Puede ver los valores colocados en estas colecciones usando la página web de ejemplo global.asa, que vimos anteriormente:
<!-- Declarar instancia del componente ASPCounter con
alcance a nivel de aplicación //-->
<OBJECT ID=”ASPCounter” RUNAT=”Servidor” SCOPE=”Aplicación”
PROGID="MSWC.Contadores">
</OBJETO>
...
...
<IDIOMA DE SCRIPT=”VBScript” RUNAT=”Servidor”>
Subaplicación_onStart()
'Crear una instancia de una conexión ADO con alcance a nivel de aplicación
Establecer aplicación("ADOConnection") = Server.CreateObject("ADODB.Connection")
Dim varArray(3) 'Crea una matriz variante y rellénala
varArray(0) = "Esto es un"
varArray(1) = "Matriz variante"
varArray(2) = "almacenado en"
varArray(3) = "Objeto de aplicación"
Aplicación("Variant_Array") = varArray 'Guárdelo en la aplicación
Aplicación(“Start_Time”) = CStr(Now) 'Almacena la fecha/hora como una cadena
Aplicación(“Visit_Count”) = 0 'Establece la variable del contador en cero
Subtítulo final
...
...
</SCRIPT>
(1) Código para recorrer la colección de Contenidos
Para recorrer la colección de Contenidos, puede utilizar una estructura Para Cada...Siguiente. Cada elemento de la colección puede ser una variable de tipo Variant simple, una matriz de Variant o una referencia a un objeto. Debido a que cada tipo de valor debe manejarse de manera diferente, se debe verificar cada uno para determinar su tipo.
Puede utilizar la función VarType en VBScript para realizar este trabajo. Utilice las funciones IsObject e IsArray en su lugar:
Para cada objItem en Application.Contents
Si IsObject (Application.Contents (objItem)) Entonces
Response.Write "Referencia de objeto: '" & objItem & "'
"
ElseIf IsArray (Application.Contents (objItem)) Entonces
Response.Write "Array: '" & objItem & "' los contenidos son:
"
VarArray = Aplicación.Contenido(objItem)
'Nota: lo siguiente sólo funciona con una matriz unidimensional
Para intLoop = 0 a UBound(varArray)
Respuesta.Escribir "Índice(" & intLoop & ") = " & _
VarArray(intLoop) & “
"
Próximo
Demás
Respuesta.Escribir "Variable: '" & objItem & "' = " _
& Aplicación.Contenido(objItem) & “
"
Terminar si
A continuación
observe cómo el programa recupera esta matriz del objeto Aplicación. Asígnelo a una variable local (Variante) y use la siguiente declaración:
varArray = Application.Contents(objItem)
Use la función UBound para averiguar el tamaño de la matriz (número de elementos). Este valor se puede usar como condición de terminación. para el recorrido:
For intLoop = 0 UBound(varArray)
Este ejemplo es una matriz unidimensional y solo mostrará el contenido de dicha matriz. Edite el código según sea necesario para manejar matrices multidimensionales, por ejemplo:
For intLoop = 0 To UBound(varArray)
IntNumberOfDimensions = UBound(varArray, 1)
Para intDimension = 0 a intNumberOfDimensions
Respuesta.Escribir "Índice(" & intLoop & ") = " _
& varArray(intLoop, intDimensión)
Próximo
Respuesta.Escribe ""
Siguiente
(2) Código para recorrer la colección StaticObjects
La colección StaticObjects contiene todas las referencias a objetos declaradas utilizando el elemento <OBJECT> en global.asa. Debido a que cada entrada es una variable de objeto, la matriz se puede iterar con un código más simple. Mostraremos el nombre del objeto (como se definió originalmente en la propiedad ID):
Para cada objItem en Application.StaticObjects
Si IsObject (Application.StaticObjects (objItem)) Entonces
Respuesta.Escribir "<OBJECT> elemento: ID='" & objItem & "'
"
Terminar si
Siguiente
2. Operaciones en colecciones
1) Agregar valores a la
colección de Contenidos El método para agregar valores a la colección de Contenidos es el mismo que el utilizado en el código de script de la página web global.asa. Permite agregar un nuevo valor Variante al objeto Aplicación, con un nombre y valor sugeridos (que se pueden editar según sea necesario), hacer clic en el botón, recargar la página, agregar el valor a la colección Aplicación.Contenidos y Mostrar en la lista. .
Agregue el código para la nueva entrada Contenido
para colocar todos los botones y otros controles HTML en un formulario en la página web de muestra. ACCIÓN establece la ruta de la página web actual y la recarga cuando se envía el formulario. El atributo METHOD es "POST", por lo que el valor del control aparece en la colección Request.Form. Estas dos técnicas se han utilizado en capítulos anteriores:
<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
Los botones de este formulario son controles HTML INPUT normales y tienen el mismo título. (tres espacios) pero con un nombre diferente. Por ejemplo, el código para crear el primer botón (agregar el valor al objeto Aplicación) es:
<INPUT TYPE="SUBMIT" NAME="cmdAdd" VALUE="">
Al recargar la página web, verifique la colección Request.Form , Determine en qué botón ENVIAR se hizo clic y trátelo en consecuencia. Si es un botón que agrega un valor al objeto Aplicación (el botón se llama cmdAdd en el elemento HTML <INPUT>), use el siguiente segmento de programa:
If Len(Request.Form("cmdAdd")) Then
strVarName = Solicitud.Form("txtVarName")
strVarValue = Solicitud.Form("txtVarValue")
Bloqueo de aplicación
Aplicación("strVarName") = strVarValue
Aplicación.Desbloquear
End If
Observe cómo la aplicación utiliza los métodos Application.Lock y Application.Unlock para garantizar que estos valores no se confundan cuando dos usuarios acceden a ellos simultáneamente. Generalmente, esto no es posible si solo establece un valor específico. Pero es aconsejable utilizar siempre los métodos de bloqueo y desbloqueo.
2) Eliminar valores de la colección de Contenidos
Cree esta lista al ejecutar la página web ASP atravesando la colección de Contenidos (como hicimos antes). Sin embargo, solo recopilamos los nombres de cada elemento y los colocamos en el elemento <OPTION> dentro del elemento de lista <SELECT>:
…
<SELECCIONAR NOMBRE=”lstRemove” TAMAÑO=”1”>
<%
Para cada objItem en Application.Contents
Respuesta.Escriba “<OPCIÓN>” & objItem & “</OPCIÓN>”
Próximo
&>
</SELECCIONAR>
…
Después de ejecutar el código ASP, el resultado que se ve en el navegador es:
<SELECT NAME="lstRemove" Size="1">
<OPCIÓN>ADOConexión</OPCIÓN>
<OPCIÓN>Variante_Array</OPCIÓN>
<OPCIÓN>Hora_inicio</OPCIÓN>
<OPCIÓN>Visita_Conteo</OPCIÓN>
<OPCIÓN>Mi_Nuevo_Valor</OPCIÓN>
</SELECT>
(1) Eliminar un valor único
Cuando hace clic en el botón para eliminar un valor único, el formulario se envía a la misma página web nuevamente, pero esta vez se configurará un botón ENVIAR para cmdRemoveThis y luego Eliminar Se llamará al método de la colección Application.Contents:
Si Len(Request.Form("cmdRemoveThis")) Entonces.
strToRemove = Solicitud.Form("lstRemove")
Respuesta.Escribir "strToRemove = " & strToRemove
Bloqueo de aplicación
Aplicación.Contenido.Remove(strToRemove)
Aplicación.Desbloquear
End If
Tenga en cuenta que este es un método de la colección de Contenidos, no el objeto Aplicación. La sintaxis es Aplicación.Contenido.Remove, no Aplicación.Remove.
El resultado de eliminar el valor Start_Time de la colección Contenido.
(2) Eliminar todos los valores
Si hace clic en el último de los tres botones de tipo ENVIAR, el código de la página web detectará que el botón en el que se hizo clic es cmdRemoveAll y ejecutará el método RemoveAll de la colección Application.Contents:
If Len(. Solicitar. Formulario ("cmdRemoveAll")) Luego
Bloqueo de aplicación
Aplicación.Contenido.RemoveAll
Aplicación.Desbloquear
End If
le recuerda nuevamente que este es un método de recopilación de Contenidos, no de Aplicación. La sintaxis es Application.Contents.RemoveAll, no Application.RemoveAll.