11 settembre 2011

Flash: caricare i dati da una pagina Asp.Net con l'oggetto XML

Autore: Filippo Amadori
Asp.net Windows Form VS Asp.net MVC

Come descritto nell'articolo precedente "Caricare i dati da una pagina Asp.Net tramite l'oggetto URLLoader di Flash", Adobe Flash è in grado di caricare dati esterni per manipolare qualsiasi oggetto presente all'interno di se stesso.

Dato che Action Script non è in grado di leggere i dati direttamente da un database, utilizzeremo Asp.Net per convertire i dati in formato XML e poi trasferirli al motore di Flash.

L'oggetto XML a differenze dell'URLLoader, può caricare una sequenza di dati e gestirla in base al contenuto.
Ora vedremo come poter sfruttare queste potenzialità

Anche in questo caso utilizzeremo un database SQLExpress che chiameremo "database.mdf" con al suo interno una tabella che chiameremo "indirizzi", di seguito un esempio di come strutturare la tabella:

database per adobe flash
 

Creiamo la pagina Asp.Net che restituisce i dati

Per far si che flash riesca a leggere i dati presenti all'interno del database dobbiamo creare una pagina web che restituisca i seguenti dati in formato xml.

risultato xml

Come al solito utilizzeremo gestori generici .ashx, perché più plasmabili.
Di seguito il codice della routine ProcessRequest del file "xml.ashx".

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
		'imposto il contentType per l'xml
		context.Response.ContentType = "text/xml"
		
		'questa riga è modificabile con qualsiasi string
		'di connessione riteniate più utile ai vostri
		'esperimenti
		Dim constring As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\database.mdf;Integrated Security=True;User Instance=True"
		
		'query di selezione per recuperare i dati
		Dim selstring As String = "SELECT * FROM Indirizzi ORDER BY Nome"
		
		'creo gli oggetti per la gestione dei dati
		Dim dt As New Data.DataTable
		Dim con As New Data.SqlClient.SqlConnection(constring)
		Dim da As New Data.SqlClient.SqlDataAdapter(selstring, con)
		da.Fill(dt)

		'creo il testo dil file xml di base
		Dim xml As String = "#data#"
		Dim data As String = ""
		
		'creo i contenuti del file xml
		For Each dr As Data.DataRow In dt.Rows
			data &= String.Format("{1} {2}", dr("email"), dr("nome"), dr("cognome"))
		Next
		
		'restituisco il file xml completo
		context.Response.Write(xml.Replace("#data#",data))
	End Sub
	

File SWF che caricherà i dati

Ora creiamo un file Flash e chiamiamolo "Carica_xml.fla". Al suo interno creiamo un MovieClip di nome "graph", a sua volta contenente, un campo di testo dinamico denominato "testo" ed una altro MovieClip con disegnato un cerchio denominato "cerchio" (viva la fantasia).
Nel fotogramma 1 del MovieClip "graph" inseriamo questa action:

//variabile che sarà riempita esternamente
var link:String;

//associazione di evento al click del mouse
cerchio.addEventListener(MouseEvent.CLICK,onClick);

//funzione che qualifica l'evento CLICK del mouse
function onClick(evt:MouseEvent):void {
	var goto:URLRequest = new URLRequest(link);
	navigateToURL(goto);
}

ora clicchiamo col pulsante desto del mouse sul nome del MovieClip, all'interno della libreria del file Flash. Scegliamo la voce "Proprietà" e facciamo un segno di spunta sul campo "Esporta per ActionScript", poi diamogli come nome di classe "Graph".
di seguito un esempio del risultato.

maschera proprietà flash

Ora possiamo cancellare il MovieClip "graph" dallo stage.

A questo punto andiamo al fotogramma 1 della timeline principale e scriviamo questa action:

//valori di posizionamento iniziali
//del movie clip caricato
var X:Number = 0;
var Y:Number = 0;

//indice di creazione per i movieclip
var n:uint = 0;

//creo gli oggetti per caricare i dati
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("xml.ashx");
loader.load(request);

//appena il file xml è stato caricato eseguo la funzione;
loader.addEventListener(Event.COMPLETE, onComplete);
function onComplete(event:Event) {
	var myXml:XML = new XML(event.target.data);
	for each (var prop:XML in myXml.item) {
		var gr:Graph = new Graph();
		gr.name = "graph" + n;
		gr.x = X;
		gr.y = Y;
		gr.link = prop.@email;
		gr.testo.text = prop;

		MovieClip(root).addChild(gr);

		X +=  273;
		Y +=  163;
		n +=  1;
	}
}

Come possiamo leggere dal codice, il file Flash, carica tante impostazioni dal file xml.ashx, il quale restituisce un file XML per gli elementi presenti all'interno del database.
A caricamento eseguito, crea tanti oggetti Graph quanti sono gli elementi presenti all'interno del database e ne imposta le proprietà di ognuno, in base ai dati raccolti.

Un esempio completo dell'articolo appena scritto lo potete scaricare da qui: Caricare Dati Asp.Net da Flash.



TAG:
CATEGORIE:
 

Post Correlati

Lascia un commento