Fino ad ora abbiamo utilizzato degli XML statici, ovvero dei file di testo memorizzati su disco. Adesso vedremo come poter realizzare uno script che crea un documento XML in modo dinamico prendendo i dati da un Data Base.
Come abbiamo spiegato in apertura di questa guida, Flash per poter caricare dei dati da un Data Base deve per forza appoggiarsi ad uno script lato server che interroga il Data Base e crea il documento XML con i dati estrapolati dal Data Base stesso.
In questo senso siamo liberi di utilizzare qualunque tecnologia lato server poiché il risultato sarà il medesimo documento XML indipendentemente dalla tecnologia utilizzata. Possiamo usare le tecnologie più diffuse ASP con Access o SQL server, oppure PHP con MySQL, ma anche ASP con MySQL e PHP con Access anche se potrebbero sembrare delle accoppiate poco comuni. A voi la scelta! Ci
tengo a precisare che in entrambi i casi gli script saranno molto simili ed effettueranno le stesse operazioni e il risultato sarà sempre è comunque il documento XML in output che verrà letto da Flash.
E' importante quindi che sviluppiate una certa padronanza di un linguaggio lato server e di un data base ad esso associato.
Come abbiamo detto prima le associazioni più diffuse sono ASP con Access (o SQL server) e PHP con MySQL.
Non rientra tra gli obiettivi di questa guida fornire informazioni sulle diverse tecnologie elencando i pro ed i contro dell'una o dell'altra, ma voglio solo indicare una strada da seguire facendo qualche esempio pratico per dare un'idea al lettore di quello che dovrà fare e approfondire per conto suo.
Ripartendo dallo schema proposto in apertura approfondiamo le fasi dello script lato server:
- onnessione al Data Base
- Query SQL per la raccolta dei dati
- creazione del documento XML attraverso un ciclo sul record set
Qualunque sia il linguaggio di programmazione e il Data
Base utilizzati queste fasi saranno identiche.
Riportiamo un esempio di codice utilizzando ASP e Access per dare un'idea
concreta di come può essere il codice dello script.
Tabella Data Base Access (db.mdb)
script ASP (crea_xml_db.asp)
<%
Const adOpenKeyset = 1
Const adLockReadOnly = 1
' Stringa di Connessione al Data Base con la password che viene specificata
' Modificate se necessario il percorso del Data Base sostituendo a "/guidaflash" il nome della vostra cartella che conterrà
il DB
StrConnessione = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/guidaflash") &
"db.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open StrConnessione
' Selezioni dalla tabella voli i dati ordinati in modo crescente in base alla ora di partenza
SQL = "SELECT * FROM voli order by hpartenza asc"
' Creo il RECORD SET che contiene tutti i dati selezionati dal Data base
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open SQL, Conn, adOpenKeyset,adLockReadOnly
' Eseguo un ciclo su tutti i dati del Recod set e creo il documento XML in output con i vari TAG
Do while not rs.eof
Response.Write "<volo id=""" & rs("idvolo") & """/><partenza
h=""" & rs("hpartenza") &""">" & rs("partenza") &
"</partenza><arrivo h=""" & rs("harrivo") &""">"&
rs("arrivo") &"</arrivo>"
rs.movenext
Loop
rs.close
set rs=nothing
Conn.Close
set Conn=nothing
%>
Non credo ci sia bisogno di ulteriori commenti sul codice ASP utilizzato.
Il risultato in Output è un documento XML "bad formed" identico a quello contenuto nel file orari_bf.xml utilizzato nell'esempio 7. Se volete vedere il risultato on line andate su questo indirizzo http://www.enricolai.com/guidaflash/crea_xml_db.asp e guardate il "view source HTML" dal browser per vedere l'intero documento XML con i suoi TAG.
Richiamare un documento XML "bad formed" dinamico con Flash
Vediamo adesso come possiamo richiamare con Flash il documento XML dinamico appena creato tramite lo script dell'esempio precedente.
L'operazione è molto semplice e per far questo ci basiamo sul codice Action Script utilizzato nell'esempio 7 (es7.fla). L'unica modifica che dobbiamo apportare è quella di sostituire la riga di codice filexml = "orari_bf.xml"; con quest'altra
filexml = "http://www.enricolai.com/guidaflash/crea_xml_db.asp";
affinché la chiamata venga fatta allo script che restituisce in output il documento XML.
Se mandate in esecuzione il filmato (es8.fla) e siete connessi ad internet potete andare nel debugger e osservare che i dati sono stati caricati correttamente all'interno degli array.
Bisogna però fare delle considerazioni sul caricamento di XML dinamici dal web. Infatti se il caricamento avviene da un filmato stand-alone allora ogni volta che parte la chiamata all'URL il documento XML viene aggiornato e caricato in tempo reale. Se però il nostro filmato risiede sul server (ovviamente nello stesso sottodominio dell'XML) e viene quindi caricato sul browser la chiamata dell'XML viene fatta una sola volta, ovvero dopo il caricamento del filmato. Se noi effettuiamo un refresh della pagina il documento XML non viene aggiornato. Quindi se ci sono state delle modifiche sul data base perché qualcuno ha inserito dei nuovi dati non riusciremo ad avere il nuovo documento XML aggiornato a meno che non chiudiamo il browser e lo riapriamo.
Questo problema come avrete capito è legato al browser che accorgendosi che il documento XML è già stato caricato, non effettua nuovamente il caricamento.
Per evitare questo problema bisogna ricorrere ad un piccolo trucco per ingannare il browser facendo in modo che la chiamata venga vista come una chiamata dinamica, in questo modo:
filexml = "http://www.enricolai.com/guidaflash/crea_xml_db.asp?rnd="+random(99999);
In questo modo ogni volta che viene effettuata la chiamata allo script abbiamo un URL di questo tipo (potete osservarlo sempre dal debugger del filmato Flash) http://www.enricolai.com/guidaflash/crea_xml_db.asp?rnd=40267 e questo costringe il browser ad inviare nuovamente la chiamata allo script poiché il parametro "rnd" che gli stiamo passando sarà sempre diverso (in quanto è un numero casuale compreso tra 0 e 99999, la probabilità che esca lo stesso numero è bassissima).