Para funcionar corretamente, eles devem ser colocados em um aplicativo virtual no servidor, e o arquivo global.asa fornecido deve ser colocado no diretório raiz do aplicativo. A maneira mais simples é colocar o arquivo global.asa no diretório raiz do site padrão (C:/InetPub/WWWRoot por padrão).
É uma boa ideia renomear quaisquer arquivos global.asa existentes para que possam ser restaurados posteriormente.
1. Exibindo o conteúdo da coleção Application
O objeto ASPCounter é membro da coleção StaticObjects (definida por meio do elemento <OBJECT>), mas o restante (instanciado por Server.CreateObject) é membro da coleção Contents.
Você pode ver os valores colocados nessas coleções usando a página da web de exemplo global.asa, que vimos anteriormente:
<!-- Declare instância do componente ASPCounter com
escopo em nível de aplicativo //-->
<ID DO OBJETO=”ASPCounter” RUNAT=”Servidor” ESCOPO=”Aplicativo”
PROGID=”MSWC.Contadores”>
</OBJETO>
...
...
<SCRIPT LANGUAGE=”VBScript” RUNAT=”Servidor”>
Subaplicativo_onStart()
'Cria uma instância de uma conexão ADO com escopo em nível de aplicação
Definir Aplicativo("ADOConnection") = Server.CreateObject("ADODB.Connection")
Dim varArray(3) 'Cria um array Variant e preenche-o
varArray(0) = "Este é um"
varArray(1) = "Matriz variante"
varArray(2) = “armazenado no”
varArray(3) = "Objeto aplicativo"
Application("Variant_Array") = varArray 'Armazena na aplicação
Application(“Start_Time”) = CStr(Now) 'Armazena a data/hora como uma string
Application(“Visit_Count”) = 0 'Define a variável do contador como zero
Finalizar sub
...
...
</SCRIPT>
(1) Código para percorrer a coleção Contents
Para percorrer a coleção Contents, você pode usar uma estrutura For Each...Next. Cada item da coleção pode ser uma variável simples do tipo Variant, uma matriz de Variant ou uma referência a um objeto. Como cada tipo de valor precisa ser tratado de forma diferente, cada um deve ser verificado para determinar seu tipo.
Você pode usar a função VarType em VBScript para realizar este trabalho. Em vez disso, use as funções IsObject e IsArray:
For Each objItem em Application.Contents
Se IsObject(Application.Contents(objItem)) Então
Response.Write "Referência do objeto: '" & objItem & "'
"
ElseIf IsArray(Application.Contents(objItem)) Então
Response.Write "Array: '" & objItem & "' os conteúdos são:
"
VarArray = Application.Contents(objItem)
'Nota: o seguinte só funciona com um array unidimensional
Para intLoop = 0 Para UBound(varArray)
Response.Write “ Índice(“ & intLoop & “) = “ & _
VarArray(intLoop) & “
"
Próximo
Outro
Response.Write "Variável: '" & objItem & "' = " _
& Application.Contents(objItem) & “
"
Terminar se
A seguir
observe como o programa recupera esse array do objeto Application. Atribua-o a uma variável local (Variant) e use a seguinte instrução:
varArray = Application.Contents(objItem)
Use a função UBound para descobrir o tamanho do array (número de elementos). Este valor pode ser usado como condição de término. para a travessia:
For intLoop = 0 UBound(varArray)
Este exemplo é um array unidimensional e exibirá apenas o conteúdo de tal array. Edite o código conforme necessário para lidar com matrizes multidimensionais, por exemplo:
For intLoop = 0 To UBound(varArray)
IntNumberOfDimensions = UBound(varArray, 1)
Para intDimension = 0 Para intNumberOfDimensions
Response.Write “ Índice(“ & intLoop & “) = “ _
& varArray(intLoop, intDimension)
Próximo
Resposta.Escreva ""
Próximo
(2) Código para percorrer a coleção StaticObjects
A coleção StaticObjects contém todas as referências de objetos declaradas usando o elemento <OBJECT> em global.asa. Como cada entrada é uma variável de objeto, o array pode ser iterado com um código mais simples. Iremos gerar o nome do objeto (conforme definido originalmente na propriedade ID):
For Each objItem em Application.StaticObjects
Se IsObject(Application.StaticObjects(objItem)) Então
Response.Write "<OBJETO> elemento: ID='" & objItem & "'
"
Terminar se
Próximo
2. Operações em coleções
1) Adicionar valores à
coleção Contents O método de adição de valores à coleção Contents é o mesmo usado no código de script da página web global.asa. Permite que um novo valor Variant seja adicionado ao objeto Application, com sugestão de nome e valor (que pode ser editado conforme necessário), clique no botão, recarregue a página, adicione o valor à coleção Application.Contents e Mostrar na lista .
Adicione o código da nova entrada Conteúdo
para colocar todos os botões e outros controles HTML em um formulário na página da Web de exemplo. ACTION define o caminho da página da web atual e a recarrega quando o formulário é enviado. O atributo METHOD é "POST", portanto o valor do controle aparece na coleção Request.Form. Essas duas técnicas foram usadas nos capítulos anteriores:
<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
Os botões neste formulário são controles HTML INPUT comuns, têm o mesmo título (três espaços), mas um nome diferente. Por exemplo, o código para criar o primeiro botão (adicionar o valor ao objeto Application) é:
<INPUT TYPE="SUBMIT" NAME="cmdAdd" VALUE="">
Ao recarregar a página web, verifique a coleção Request.Form , Determine qual botão ENVIAR foi clicado e trate-o de acordo. Se for um botão que adiciona um valor ao objeto Aplicativo (o botão é denominado cmdAdd no elemento HTML <INPUT>), use o seguinte segmento de programa:
If Len(Request.Form("cmdAdd")) Then
strNomeVar = Request.Form("txtNomeVar")
strVarValue = Request.Form("txtVarValue")
Aplicativo.Lock
Aplicação("strVarNome") = strVarValue
Aplicativo.Desbloquear
End If
Observe como o aplicativo usa os métodos Application.Lock e Application.Unlock para garantir que esses valores não sejam confundidos por dois usuários que os acessam simultaneamente. Geralmente, isso não é possível se você estiver apenas definindo um valor específico. Mas é aconselhável sempre usar os métodos de bloqueio e desbloqueio.
2) Exclua os valores da coleção Contents
Crie esta lista ao executar a página ASP percorrendo a coleção Contents (como fizemos anteriormente). No entanto, apenas coletamos os nomes de cada item e os colocamos no elemento <OPTION> dentro do elemento da lista <SELECT>:
…
<SELECIONE NOME=”lstRemover” TAMANHO=”1”>
<%
Para cada objItem em Application.Contents
Resposta.Escreva “<OPÇÃO>” & objItem & “</OPÇÃO>”
Próximo
&>
</SELECIONAR>
…
Após a execução do código ASP, o resultado visto no navegador é:
<SELECT NAME="lstRemove" SIZE="1">
<OPÇÃO>ADOConexão</OPÇÃO>
<OPÇÃO>Variant_Array</OPÇÃO>
<OPÇÃO>Start_Time</OPÇÃO>
<OPÇÃO>Contagem_Visitas</OPÇÃO>
<OPÇÃO>Meu_Novo_Valor</OPÇÃO>
</SELECT>
(1) Excluir um único valor
Quando você clica no botão para excluir um único valor, o formulário é enviado para a mesma página novamente, mas desta vez um botão ENVIAR para cmdRemoveThis será configurado e, em seguida, o botão Remover O método da coleção Application.Contents será chamado:
If Len(Request.Form("cmdRemoveThis")) Then.
strToRemove = Request.Form("lstRemover")
Response.Write "strToRemove = " & strToRemove
Aplicativo.Lock
Application.Contents.Remove(strToRemove)
Aplicativo.Desbloquear
End If
Observe que este é um método da coleção Contents, não do objeto Application. A sintaxe é Application.Contents.Remove, não Application.Remove.
O resultado da remoção do valor Start_Time da coleção Contents.
(2) Excluir todos os valores.
Se você clicar no último dos três botões do tipo SUBMIT, o código na página da web detectará que o botão clicado é cmdRemoveAll e executará o método RemoveAll da coleção Application.Contents:
If Len( Formulário("cmdRemoveAll")) Então
Aplicativo.Lock
Application.Contents.RemoveAll
Aplicativo.Desbloquear
End If
lembra novamente que este é um método de coleção de Conteúdo, não de Aplicativo. A sintaxe é Application.Contents.RemoveAll, não Application.RemoveAll.