^M AMFPHP | Andrés Villagrán Placencia

AMFPHP

Conector a AMFPHP Simple

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:

  1.  
  2. /** Andrés Villagrán Placencia
  3.   andres@villagranquiroz.cl
  4.   http://www.villagranquiroz.cl
  5. **/
  6. package com.villagranquiroz.utils {
  7. import flash.net.NetConnection;
  8. import flash.net.Responder;
  9.  
  10. import mx.utils.ObjectUtil;
  11.  
  12. public class Servicios
  13. {
  14. private var gateway:String;
  15.  
  16. private var conexion:NetConnection;
  17.  
  18. public function Servicios(amfGateway:String)
  19. {
  20. gateway = amfGateway;
  21. conexion = new NetConnection();
  22. conexion.connect(gateway);
  23.  
  24. }
  25. public function send(nombre:String, result:Function, ... args):void {
  26. var responder:Responder = new Responder(result, onFault);
  27. //No necontré una forma más facil de hacer esto, si alguien sabe como pasar params* me avisa 🙂
  28. switch(args.length) {
  29. case 0: conexion.call(nombre, responder); break;
  30. case 1: conexion.call(nombre, responder, args[0]); break;
  31. case 2: conexion.call(nombre, responder, args[0], args[1]); break;
  32. case 3: conexion.call(nombre, responder, args[0], args[1], args[2]); break;
  33. case 4: conexion.call(nombre, responder, args[0], args[1], args[2], args[3]); break;
  34. case 5: conexion.call(nombre, responder, args[0], args[1], args[2], args[3], args[4]); break;
  35. case 6: conexion.call(nombre, responder, args[0], args[1], args[2], args[3], args[4], args[5]); break;
  36. }
  37.  
  38. }
  39.  
  40. private function onFault(fault:Object):void {
  41. trace("Error: " + ObjectUtil.toString(fault));
  42. }
  43.  
  44. }
  45. }
  46.  

Como se utiliza?

  1.  
  2. private var servicios:Servicios;
  3.  
  4. // Esta sería la funcion que instancia a los servicios
  5. private function init():void {
  6. servicios = new Servicios("http://www.villagranquiroz.cl/url/amfphp/gateway.php");
  7. }
  8.  
  9. private function llamada():void {
  10. // Con esto realizamos una llamada y asignamos la función que recibirá la respuesta
  11. servicios.send("Prueba.NombreFuncionAMFPHP", NombreFuncionAMFPHPHandler);
  12. // Si la función remota necesita parametros, se ponen despues de el nombre de la función
  13. }
  14. private function NombreFuncionAMFPHPHandler(event:ResultEvent):void {
  15. Alert.show("Respuesta: " + ObjectUtil.toString(event.result));
  16. }
  17.  

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.

Tags: , ,

Monday, February 23rd, 2009 AMFPHP, Flex 2 Comments

Ejemplo básico con Flex y AMFPHP

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.

Tags: , , ,

Friday, June 13th, 2008 AMFPHP, Flex, PHP, Programación 5 Comments

Ejemplo Flex + AMFPHP + Zend Framework + MySQL

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.

Ejemplo en Linea - Código Fuente

Tags: , , ,

Thursday, May 15th, 2008 AMFPHP, Flex, PHP No Comments

Flex Hispano / Remote Object AMFPHP + Flex

 

He creado el Grupo FlexHispano en Google, en el cual espero que podamos compartir nuestros conocimientos e ideas y también fomentar esta grandiosa tecnología, la dirección donde pueden visitar el grupo es:

http://groups.google.com/group/flexhispano

Pueden hacer consultas sin la necesidad de estar registrados.

Por ahora me encuentro tabajando en un Ejemplo con AMFPHP, Zend Framework (Especificamente Zend_Db) y MySQL para ejemplificar los objetos remotos en Flex, lo más probable es que esté disponible durante la tarde del día Jueves 15/05/2008     

  

Tags: , , , ,

Thursday, May 15th, 2008 AMFPHP, Flash, FlexHispano 1 Comment