E4x en Actionscript3
Nov/090
Investigando, encontré un muy buen post de lo que se puede realizar con E4X en AS3, altamente recomendado.
Conector a AMFPHP Simple
Feb/092
Tengo prácticamente tirado el blog, así que pondré a disposición una pequeña clase que desarrollé el otro día
Si no nos gusta utilizar RemoteObjects para cada módulo, ni tampoco queremos usar un Framework más denso, hay una opción, que es utilizar la clase Servicios y definir los Handlers en las funciones que estimemos convenientes, el código es el siguiente:
/** Andrés Villagrán Placencia andres@villagranquiroz.cl http://www.villagranquiroz.cl **/ package com.villagranquiroz.utils { import flash.net.NetConnection; import flash.net.Responder; import mx.utils.ObjectUtil; public class Servicios { private var gateway:String; private var conexion:NetConnection; public function Servicios(amfGateway:String) { gateway = amfGateway; conexion = new NetConnection(); conexion.connect(gateway); } public function send(nombre:String, result:Function, ... args):void { var responder:Responder = new Responder(result, onFault); //No necontré una forma más facil de hacer esto, si alguien sabe como pasar params* me avisa <img src='http://andres.villagranquiroz.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> switch(args.length) { case 0: conexion.call(nombre, responder); break; case 1: conexion.call(nombre, responder, args[0]); break; case 2: conexion.call(nombre, responder, args[0], args[1]); break; case 3: conexion.call(nombre, responder, args[0], args[1], args[2]); break; case 4: conexion.call(nombre, responder, args[0], args[1], args[2], args[3]); break; case 5: conexion.call(nombre, responder, args[0], args[1], args[2], args[3], args[4]); break; case 6: conexion.call(nombre, responder, args[0], args[1], args[2], args[3], args[4], args[5]); break; } } private function onFault(fault:Object):void { trace("Error: " + ObjectUtil.toString(fault)); } } }
Como se utiliza?
private var servicios:Servicios; // Esta sería la funcion que instancia a los servicios private function init():void { servicios = new Servicios("http://www.villagranquiroz.cl/url/amfphp/gateway.php"); } private function llamada():void { // Con esto realizamos una llamada y asignamos la función que recibirá la respuesta servicios.send("Prueba.NombreFuncionAMFPHP", NombreFuncionAMFPHPHandler); // Si la función remota necesita parametros, se ponen despues de el nombre de la función } private function NombreFuncionAMFPHPHandler(event:ResultEvent):void { Alert.show("Respuesta: " + ObjectUtil.toString(event.result)); }
Espero que les sirva, también pueden crear una clase que contenga todos los Handlers, así no repiten funciones en los módulos. Recuerden que el ejemplo anterior no está completo, faltan los imports y una que otro código.
Flex Camp Chile en Mouse.cl
Nov/080
Está es una gran noticia, hemos sido comentados por mouse.cl
Esperamos que más medios de comunicación se interesen en este evento.
Gana un Mac Book AIR
Oct/081
Adobe está regalando un Mac Book AIR con Adobe CS4 preinstalado, como también Flex Builder 3 en su página en facebook: http://www.facebook.com/pages/Adobe-Flex/6130149579
Que tengan suerte!
Adobe Student Rep - Chile
Oct/080
El 1 de Octubre del presente año fui nombrado Adobe Student Rep primero en Chile y Segundo en Latinoamérica, el cual me faculta para organizar eventos Adobe, capacitar y apoyar a estudiantes.
Gracias a esto el Flex Camp tendrá mayores beneficios. Actualmente también me encuentro en proceso para ser un Instructor Certificado, más detalles no puedo revelar pero muchas buenas noticias vienen en camino.
Registro Flex Camp Chile 2008: http://www.villagranquiroz.cl/flexcamp_registro
Ejemplo básico con Flex y AMFPHP
Jun/083
Este es un ejemplo bastante simple de lo que se puede hacer con Flex y AMFPHP, este incluye lo siguiente:
- Envío y recepción de mensajes simples (Típico Hola Mundo)
- Recepción de un arreglo y representación en un DataGrid
- Recepción de un arreglo consultado desde una base de datos (MySQL) con Zend Framework
- Enviar información de un "Formulario" para su inserción a una Tabla (MySQL)
Son bastante simples, no entra en detalle con el manejo de Faults o Excepciones.
Archivos: WebserviceAMFPHP - PruebaBasica-Flex - SQL - PruebaBasica
Notas:
- WebserviceAMFPHP y PruebaBasica son Proyectos que pueden importar a Flex Builder 3
- Deben configurar la ruta de donde se encuentra el WebserviceAMFPHP dentro de config.php en este mismo
- Para no tener problemas, dejar estos proyectos dentro de los htdocs del webserver (recomendado Zend Core) para que la ruta web sea: http://localhost/PruebaBasica y http://localhost/WebserviceAMFPHP
Ojalá les sirva.
Flex AIR + Framework SQLite ( SQLiteConnector )
May/080
Para trabajar fácilmente con algún SQL estoy acostumbrado en PHP a utilizar Zend Framework, específicamente Zend Db, y como el espectacular Flex AIR tiene soporte para SQLite había que utilizarlo, pero buscando en internet no hay un framework para realizar este tipo de operaciones, por lo cual tuve que desarrollar algo que uso en Flex Media Player, y como este es GPL acá dejo una pequeña explicación de como utilizarlo:
La utilización es sencilla, primero deben crear un objeto del tipo SQLiteConnector y suponiendo que ya se creo una base de datos SQLite con la tabla Prueba que tendrá las columnas Nombre y Apellido:
// Debemos crear una instancia de la clase // definiendo en el constructor el archivo var conn:SQLiteConnector = new SQLiteConnector("base_de_datos.sqlite"); // Si deseamos insertar datos conn.DoSQL("INSERT INTO Prueba VALUES('Andrés', 'Villagrán')"); // Si deseamos obtener un valor var nombre:String = conn.FetchOne("SELECT Nombre FROM Prueba"); // Si deseamos obtener un arreglo con los datos var datos:Array = conn.FetchArray("SELECT * FROM Prueba"); // Para mostrar los datos for(var i:int = 0; i < datos.length; i++) { trace("Nombre:", datos[i]["Nombre"], "Apellido:", datos[i]["Apellido"]; }
Espero que les sirva.
Flex Media Player r3
May/080
He subido el código y el instalador de Flex Media Player revisión 3, recordar que no es versión final es solo para prueba, para descargarlo ir a la página del proyecto:
http://code.google.com/p/flexmediaplayer/

Novedades:
- Shuffle!! (Por ahora obligatorio, pronto opcional)
- Cover Display con Reflejos!
Hacer doble click para escuchar, si se pone play sin seleccionar una canción se caerá, necesitas Adobe AIR para ejecutar el instalador.
Nota: Si utilizas Windows Vista debes ejecutarlo como Administrador, en la proxima versión no ocurrirá esto.
Flex Camp Chile
May/080
Actualmente estamos comunicándonos con gente de Adobe ya que estamos Organizando un Flex Camp para Chile (y el primero en Latino América), idealmente el evento se realizará en el 4to trimestre del 2008, por lo cual queda bastante tiempo para organizar algo bien grande y claro está, con una gran asistencia.
Adobe, dependiendo de la asistencia nos enviaría un relator de la empresa y además de regalos para los asistentes, por ahora necesitamos saber la gente que está interesada, la forma de hacerlo es registrándose en nuestro grupo en Google: http://groups.google.com/group/flexhispano cuando se tenga más información del evento se registrará en nuestro grupo.
Como un pequeño adelanto, estamos intentando tener como patrocinador a la Universidad del Bío Bío y obviamente los organizadores somos Villagrán & Quiroz
Ejemplo Flex + AMFPHP + Zend Framework + MySQL
May/080
El siguiente ejemplo permite la creación de servicios web utilizando AMFPHP , Flex y Zend Framework para la conexión a la base de datos MySQL.
Lo primero es configurar services-config.xml a la dirección que se conectará nuestro cliente, por lo tanto debemos modificar lo siguiente:
<endpoint uri="http://andres.villagranquiroz.cl/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
Luego de esto, debemos configurar al compilador que utilice esta configuración:Botón derecho sobre el Proyecto -> Preferencias -> Flex Compiler -> Additional compiler arguments y agregar -services "services-config.xml"
Con esto ya estamos listos para comenzar el desarrollo, solo destaco lo importante, lo demás pueden verlo en el código.Lo primero que se debe hacer es crear el servicio web dentro de (ver detalles en el ejemplo):/amfphp/services/nuestro_servicio/nuestro_servicio.php
Ahora podremos visualizarlo en el Webservice Browser que contiene AMFPHP (también debe ser compilado con services-config.xml), pueden revisar el mio: http://andres.villagranquiroz.cl/browser/index.html e intentar ejecutarlos.
Recomiendo utilizar Zend Framework para la conexión con la base de datos, en el ejemplo existe un archivo de configuración (config.php) para MySQL, para más información de la utilización de Zend_Db pueden ver la documentación del Framework o revisar la introducción que he preparado aquí: http://andres.villagranquiroz.cl/files/2008/03/01-php-java.pdf posiblemente tengan problemas con PDO_MYSQL ya que lo más probable es que no tengan instalado, recomiendo instalar Zend Core que tiene Apache + PHP y extensiones (incluye PDO) + MySQL, pueden encontrarlo en http://www.zend.com
Volviendo a la interfaz en flex:Primero debemos especificar los Métodos a los cuales queremos conectarnos de la siguiente manera:
<mx:RemoteObject id="remObj" showBusyCursor="true" source="EjemploAMFPHP.prueba_mantenedor" destination="amfphp" fault="faultHandler(event)" >
<mx:method name="Ingresar" result="ingresarHandler(event)" />
<mx:method name="Modificar" result="modificarHandler(event)" />
<mx:method name="CargarDatos" result="cargarDatosHandler(event)" />
<mx:method name="Eliminar" result="eliminarHandler(event)" />
</mx:RemoteObject>
Hemos definido los métodos y sus "Manejadores" (Handlers) los cuales tratarán la respuesta que nos da el Servicio Web luego de llamarlo, ejemplo:
private function ingresarHandler(event:ResultEvent):void {
Alert.show(event.result.toString(), "Resultado");
LimpiarFormulario();
}
Para llamar a los Métodos del Objeto Remoto:
remObj.getOperation("CargarDatos").send();
remObj.getOperation("Ingresar").send(nombre.text, apellido.text); // Si necesita parametros
Para ver el código deben importar a Flex Builder los proyectos o simplemente descomprimirlos y revisarlos.