(tratto dal sito: http://www.liviogiordano.it - scritto da Livio Giordano)

Integrazione tra Flash e Asp

Sissignori, sembrerà strano ma a questo mondo tutto è possibile! Vedremo come creare un applicazione Flash basata su un database (per questo esempio prenderemo in considerazione un DB Access) ed uno script ASP che realizzerà la comunicazione tra il database e il filmato Flash.


I requisiti necessari per l'esecuzione dell'esempio sono i seguenti:

Innanzitutto cerchiamo di capire come avviene lo scambio di informazioni.
Per inviare variabili da un filmato ad un file ASP occorre utilizzare il seguente Action-script:

Load Variables ("fileASP.asp", 0, vars=POST)

In questo modo le variabili vengono inviate allo script ASP col metodo POST e possono essere recuperate dallo script ASP usando uno dei due modi:
  1. Request.Form("flash_var_1")
  2. Request("flash_var_1")
Questo perchè il filmato ha inviato le variabili nella form collection. Se avessimo usato il metodo GET avremmo dovuto recuperarle usando:

Request.QueryString("flash_var_1")

Perchè le variabili sono state inviate concatenandole nella querystring. Assodato questo passeremo alla creazione passo passo di una rubrica che immesso un cognome di ricerca visualizza tutti i soggetti aventi tale cognome. Per la realizzazione del filmato useremo la versione 4 di Macromedia Flash.
Alla fine dell'esercizio avremo creato i seguenti file:
 
rubrica.mdb Database rubrica (Access 2000)
rubrica.fla Rubrica .fla file
rubrica.swf Flash 4 movie
rubrica.asp ASP back end
rubrica.html Flash front end - access via http://

Step 1: Creazione del Database rubrica.mdb

Iniziamo con la creazione del Database Access 2000 di un'ipotetica rubrica:
-creiamo un database vuoto di nome rubrica.mdb
-apriamo una nuova tabella in visualizzazione struttura con i seguenti campi:

-Salviamo la tabella come "Telefoni" e riempiamola con i seguenti campi:

 
ID Nome Cognome Telefono
1 Mario Rossi 085/12345
2 Giovanni Verdi 0734/128954
3 Pasquale Bianchi 021/9876543

-Salviamo e chiudiamo tutto

step 2: Creazione del Filmato

Carichiamo Flash 4 e creiamo un nuovo documento, impostando il colore di sfondo che più ci aggrada. Aggiungiamo un keyframe e le seguenti azioni nel primo frame:

Set Variable: "Cognome" = ""
Set Variable: "success" = ""
Stop


Abbiamo quindi definito delle variabili di input, ora aggiungiamo una descrizione in cima alla pagina, del genere:
Immetti il cognome della persona da cercare oppure digita "tutto" per visualizzare l'intera rubrica.
Creiamo una casella di testo e andiamo sulle sue proprietà: cambiando TextFieldin Cognome.
Aggiungiamo un pulsante di ricerca, possiamo usarne uno creato da noi oppure utilizzarne uno di quelli disponibili nelle librerie comuni, trasciniamone uno sullo stage e andiamo sulla sua proprietà istanza e selezioniamo la tabella azioni: incolliamo il seguente script nella finestra:

On (Release)
Go to and Play (Risultato, 1)
End On


Facciamo click col tasto destro del mouse sul secondo keyframe e inseriamo un fotogramma chiave vuoto scegliendo Insert Blank Keyframe, di nuovo tasto destro ed andiamo sulle proprietà del fotogramma, selezionamo la tabella frame ed incolliamo nella finestra le seguenti linee di codice:

Load Variables ("rubrica.asp", 0, vars=POST)

Questo commando carica le variabili da rubrica.asp. Lo 0 indica il livello in cui vengono caricate tale variabili (0 è il primo livello secondo l'ordinamento-Z).
A questo punto inseriamo un fotogramma chiave (keyframe) nel fotogramma 3 ed usiamo i frame dal 3 al 6 per la nostra animazione di caricamento, un banale esempio è inserire:

"loading." Nel fotogramma3
"loading.." Nel fotogramma4
"loading..." Nel fotogramma5
"loading...." Nel fotogramma6


Ma qualunque escamotage è ben accetto.
Torniamo al Keyframe 3 ed apriamo la sua tabella azioni incollando il seguente nella finestra:

If (success ne "")
   If (success eq "False")
      Go to and Stop (8)
   Else
      Go to and Stop (7)
   End If
End If


Nel Frame 6, aggiungiamo un azione come la seguente

Go to and Play (3)

In modo da eseguire un loop dell'animazione fino alla ricezione dei dati.
Nel frame 7 inseriamo un keyframe vuoto ed aggiungiamo un ulteriore casella di testo abbastanza grande da contenere i risultai della ricerca, cambiamo TextFieldin "risultato" e rendiamo la casella non selezionabile ciccando sul checkbox "Disable Editing".
Inseriamo un altro keyframe vuoto nell'ottavo frame e scriviamo un breve messaggio di errore del genere:
"La sua meticolosa ricerca termina qui. Il soggetto da lei richiesto non è presente nel nostro Database..ne pensi un'altra e poi ritorni".
Provvedete anche ad inserire un back button (createlo o usatene uno già pronto) che rimandi sulla prima scena.
Questo è tutto per quanto riguarda il movie.

step 3: Codice ASP

La seguente è il listato di rubrica.asp. Ho eseguito una connessione DSN-Less con il database, potremmo comunque effettuare un altro tipo di connessione specificando la posizione del database Access all'interno del server.

 
<%@Language="VBScript"%>
<%

' Dichiaro le variabili
Dim RS, Conn, SQL
Dim results
'creo un oggetto connection e un oggetto recordset
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
' Faccio appunto una connessione DSN-Less al DB
Conn.Open "DRIVER={Microsoft Access Driver_ (*.mdb)};DBQ= " & Server.MapPath("rubrica.mdb")

If UCase(Request("Cognome")) = "Tutti" Then
SQL = "SELECT * FROM Emails"
Else
SQL = "SELECT * FROM Emails WHERE Cognome LIKE_
'" & Request("Cognome") & & End If


RS.Open SQL, Conn, 2, 3
' 2 and 3 specificano le modalità di apertura del
' recordset equivalenti a
' adOpenDynamic e adLockOptimistic. .

If RS.EOF Then
Response.Write "success=False"
Else
Response.Write"success=True&results="
Do While Not RS.EOF
results = results & RS("Cognome") _
& ", " & RS("Nome") & vbCr
results = results & RS("Telefono") & vbCrLf
RS.MoveNext
Loop
� Praticamente eseguo un loop sui record
' contenuti nel recordset RS
End If
RS.Close
Set RS = Nothing
Conn.Close
Set Conn = Nothing
Response.Write Server.URLEncode(results)
%>

Finalmente possiamo pubblicare il nostro .fla file e godere dei frutti del nostro lavoro. Sia chiaro che per vedere le pagine ASP funzionanti non dobbiamo aprire il browser e navigare su c://inetpub/wwwroot/esercizio/rubrica.html, ma dobbiamo accedere attraverso il protocollo http.

Modifica per Flash 5

Lo stesso fla file realizzato con Flash4 può essere chiaramente utilizzato per Flash 5, il quale riconosce e converte il codice del 4. Potete anche provare a realizzare il .fla di sopra direttamente in Flash 5, dovete solo stare attenti alla diversa sintassi degli action-script, ma se usate la finestra azioni nella modalità normale basterà trascinare le azioni dal riquadro di sinistra sul riquadro di destra e Flash scriverà il codice al vostro posto.
Per render più interessante questo esempio avremmo potuto sfruttare una delle nuove caratteristiche di Flash5: la capacità di leggere codice HTML nei suoi text-boxes.
Allo scopo avremmo potuto aggiungere un campo e-mail a rubrica.mdb,quindi richiamare anche quest'ultimo sul movie flash includendo un link che richiama l'e-mail client. Lascio a voi aggiungere il campo e-mail a rubrica.mdb e di seguito illustro il codice di rubrica.asp che ho modificato per la versione 5 di Flash.

<%@Language="VBScript"%>
<%
'================
' rubrica.asp per Flash 5
'================

' Di nuovo gli oggetti Connection,Recordset e la stringa SQL
Dim RS, Conn, SQL
Dim results
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
' Tanto per cambiare una DSN-less connection al DB
Conn.Open "DRIVER={Microsoft Access Driver " _
& "(*.mdb)};DBQ=" & Server.MapPath("rubrica.mdb")
If UCase(Request("Cognome")) = "Tutti" Then
SQL = "SELECT * FROM Emails"
Else
SQL = "SELECT * FROM Emails WHERE Cognome LIKE '" _
& Request("Cognome") & "'"
End If
RS.Open SQL, Conn, 2, 3
' 2 3 bla bla comunque puoi sempre
' guardare la documentazione di ADO per i vari
' cursor e lock types.

If RS.EOF Then
Response.Write "success=False"
Else
Response.Write"success=True&results="
Do While Not RS.EOF
results = results & RS("Cognome") & ", " & RS("Nome") & vbCr
results = results & ' & RS("Telefono") & ' & vbCrLf

'=======================================
' Qui sotto signori c'è la modifica
' eseguita per invocare il client di posta
'=======================================

results = results & "<A HREF=" & Chr(34) & "mailto:" & _
RS("Email") & Chr(34) & "><u>" & RS("Email") &_
"</u></A>" & vbCrLf

'=========================================
' L'operatore underscore_ permette di concatenare una stringa
' nel ritorno a capo
'=========================================

RS.MoveNext
Loop
End If
RS.Close
Set RS = Nothing
Conn.Close
Set Conn = Nothing

Ora che siamo riusciti a fare questo da qui possiamo passare ad applicazioni più complesse, es. possiamo modificare il database in un catalogo prodotti e creare un motore di ricerca su quest'ultimo. Potremmo provare ad estendere la ricerca su più campi, ad esempio per effettuare nell'esercizio la ricerca per nome e cognome avremmo dovuto modificare la stringa SQL nel seguente modo:

SQL='SELECT * FROM Telefoni WHERE Cognome LIKE_ '%"&Request_('Cognome')&"%' AND Nome LIKE '%"&Request('Nome') &"%''

Da notare che stavolta ho anche aggiunto il simbolo percentuale nella stringa; che ora assume il seguente significato: Seleziona tutti i campi dalla tabella Telefoni nella quale il campo Cognome è pari a tutti i valori ( + il contenuto della variabile cognome+ tutti i valori) e il campo Nome...ecc. ecc..
Concludo ricordando che se qualcosa dovesse andare storto controllate:
a) Di accedere al file html via PWS o IIS, cioè attraverso il protocollo http e di avere ASP e ADO (Active Data Object appunto) installati.
b) Se effettuate cambiamenti dopo le anteprime di aver pulito i file temporanei di internet.
c) Che l'alimentazione sia sempre presente.

That's all, spero di esservi stato d'aiuto