Prefacio
La clase que veras a continuación te puede servir para hacer la conexión a un Script PHP que realice consultas a una base de datos y este devuelva la información como un Documento XML. La clase se puede adaptar a cualquier proyecto en ActionScript 3.0, pero para ello tienes que hacer las modificaciones necesarias al momento de cargar las etiquetas del XML. Pero por el momento no te preocupes por eso, primero conoce el código y luego nos encargaremos para que entiendas como adaptar el código a cualquier proyecto.
Adicionalmente como regla general, toda clase en ActionScript 3.0 tiene que estar dentro de un paquete y un paquete no es más que una estructura de carpetas donde estan ubicadas las clases a utilizar, asi que hemos ubicado la clase dentro del paquete com.gestiondatos.
Nombraremos la clase como DatosLoader.as y haremos que se comporte de forma asincrónica. Incluiremos la metaetiqueta Bindable, este metadata es utilizado cuando necesitamos que la clase reciba datos de una fuente externa y así su propiedad destino modifique su valor acorde a la fuente de datos que se recibe -la fuente de datos puede ser una base de datos-.
Empezamos con la importación de las bibliotecas que utilizaremos, entre las principales tendremos URLLoader, URLRequest, URLVariables, URLRequestMethod y Event.
package com.gestiondatos {
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
[Bindable]
public class DatosLoader {
public function DatosLoader() {
}
}
}
De aquí en adelante todo lo que desarrollaremos estará ubicado dentro de la clase DatosLoader.
Dentro de la clase DatosLoader crearemos tres variables que serán utilizadas para procesar el contenido. La primera variable llamada xmlLoader será utilizada para cargar el contenido que se le indique, luego estaremos utilizando la variable xmlDatos para cargar el XML y la variable xmlListDatos será utilizada para almacenar el Documento XML.
[Bindable]
public class DatosLoader {
private var xmlLoader:URLLoader;
private var xmlDatos:XML;
private var xmlListDatos:XMLList;
public function DatosLoader() {
}
}
Dentro de la función constructor instanciamos la clase URLLoader y asignamos un detector de eventos. Los argumentos que estaremos pasando en el detector de eventos será el evento COMPLETE que determinará cuando haya terminado de cargar el xmlLoader, y el segundo argumento es la función completeHandler.
public function DatosLoader() {
xmlLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, completeHandler);
}
Por debajo de la llave de cierre de la función constructor creamos la función completeHandler que recibirá un argumento tipo Event; dentro asignamos el XML a xmlDatos utilizando XML(e.target.data) y por medio de ECMA Script asignaremos a la variable xmlListDatos el valor de los hijos de channel, con esto estaremos asignado todas las etiquetas item del Documento XML. Necesitamos detectar cuando la clase haya finalizado la carga del Documento XML y para ello al final de la función completeHandler despachamos el evento Event.COMPLETE con el método dispatchEvent.
private function completeHandler(e:Event):void {
xmlDatos = XML(e.target.data);
xmlListDatos = xmlDatos.channel;
dispatchEvent(new Event(Event.COMPLETE));
}
Si te surge alguna duda con respecto a la etiqueta channel y el XML, puedes encontrar más información aquí.
Necesitamos crear la función encargada de interactuar con los archivos PHP, esta función la llamaremos gestion e ira por debajo de la función completeHandler, este método tendrá dos parámetros como argumentos, uno será la dirección donde estará ubicado el archivo PHP y el segundo parámetro lo utilizaremos cuando necesitemos enviar variables a los archivos PHP para que realice las consultas a la base de datos. Veamos el código de la función:
public function gestion(refArchivo:String, urlVrs:URLVariables = null):void {
var req:URLRequest = new URLRequest(refArchivo);
req.method = URLRequestMethod.POST;
if (urlVrs != null) {
req.data = urlVrs;
}
xmlLoader.load(req);
}
Debido a que la variable xmlListDatos tendrá almacenado el Documento XML, este tendrá que estar disponible para ser compartido para toda la aplicación, así que lo haremos utilizando una función que envié con el método return la variable xmlListDatos, la función será obtenerDatosXML del tipo XMLList y estará ubicada por debajo de la función gestion.
public function obtenerDatosXML():XMLList {
return xmlListDatos;
}
Con esto hemos terminado la clase… pero ¿Cómo implementar la clase?, es facil… digamos que haz construido algún archivo ActionScript llamado conectaClase.as, entonces en el importaremos la clase que acabamos de crear, declaramos una variable llamada directorio que es utilizada para almacenar la ubicación de los archivos PHP -incluyendo la dirección IP o el nombre del sitio donde tienes guardado el proyecto-, y por último instanciamos un objeto llamado consultaLoader del tipo DatosLoader. Tal como sigue:
// ActionScript file import com.gestiondatos.DatosLoader; private var directorio:String = "http://localhost:8088/GestionDatos/src/ScriptPHP/"; private var consultaLoader:DatosLoader = new DatosLoader();
En este caso utilizaremos el objeto dentro de una función init, y como tu sabes esta función tiene que ser llamada con un creationComplete dentro de la etiqueta de apertura del archivo MXML que utilizará la función init y esto nos lleva a importar la clase FlexEvent; el archivo conectaClase.as quedaria de la siguiente forma:
// ActionScript file
import com.gestiondatos.DatosLoader;
import mx.events.FlexEvent;
private var directorio:String = "http://localhost:8088/GestionDatos/src/ScriptPHP/";
private var consultaLoader:DatosLoader = new DatosLoader();
private function init(e:FlexEvent):void {
consultaLoader.gestion(directorio + "buscaVariable.php");
}
Son varios puntos relevantes que podemos tocar con el código anterior, pero enfoquemonos en los detalles… Si te fijas al exportar la clase DatosLoader.as declaramos el paquete donde esta almacenado, adicionalmente cuando llamamos al método gestion le pasamos el argumento del nombre del directorio concatenandole el nombre del archivo PHP que utilizaremos para hacer la consulta a la base de datos -en este caso no pasamos ninguna variable de consulta… lo puedes ver en la publicación de Inserción y Edición de datos-.
Esta clase es sencillamente adaptable a cualquier proyecto en Flex Builder 3 y ActionScript 3.0, lo unico que tienes que hacer es asignar a la interfaz de usuario el resultado devuelto por el XML generado por PHP, si crees que se te dificulta puedes revisar este procedimiento en las publicaciones de Inserción y Edición de Datos de la Categoria MXML.
Mientras, te dejamos el código completo de la clase DatosLoader.as:
package com.gestiondatos {
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
[Bindable]
public class DatosLoader {
private var xmlLoader:URLLoader;
private var xmlDatos:XML;
private var xmlListDatos:XMLList;
public function DatosLoader() {
xmlLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, completeHandler);
}
private function completeHandler(e:Event):void {
xmlDatos = XML(e.target.data);
xmlListDatos = xmlDatos.channel;
dispatchEvent(new Event(Event.COMPLETE));
}
public function gestion(refArchivo:String, urlVrs:URLVariables = null):void {
var req:URLRequest = new URLRequest(refArchivo);
req.method = URLRequestMethod.POST;
if (urlVrs != null) {
req.data = urlVrs;
}
xmlLoader.load(req);
}
public function obtenerDatosXML():XMLList {
return xmlListDatos;
}
}
}
Hola, espero te haya gustado y te sea util la información que hayas encontrado, esperamos que sigas aprendiendo y te invito a que revises todo el blog. Mientras agilizare el proceso de edición de información dentro del blog para que puedas encontrar diversos temas referentes a Flex Builder 3 y ActionScript 3.0.
Apoya al proyecto rias4u ingresando aquí!!! =D
package com.gestiondatos {
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
[Bindable]
public class DatosLoader {
Escrito por rias4u