Hola solisarg, pues en principio sigo utilizando amfphp, te explico cómo recordaras con la versión 1 de amfphp podías enviar el resource de una consulta mysql directamente a flash desde donde podías acceder a los datos mediante objeto.serverInfo.initialData
Con la versión nueva de amfphp la 2.2 ya no funciona devolver un resource directamente, por lo que te tienes que encargar tu de formatear los datos antes de enviarlos a flash o por lo menos es lo que yo he entendido.
Pues bien yo con la versión 1 la estructura que tenia montada era una clase host que era la encargada de la conexión, las consultas y recuperar los datos devueltos por el servidor
Así por ejemplo en cada formulario tengo algo parecido a lo siguiente:
Código ActionScript :
import Host;
var host:Host = new Host();
host.call("sql.query",QueryEncrypted1,onRecivedData);
function onRecivedData(r:*):void{
var datos:Array = r.serverInfo.initialData;
}
Teniendo como 10 o más llamadas por formulario de este tipo pero con consultas diferentes.
Código ActionScript :
host.call("sql.query",QueryEncrypted2,onRecivedData);
Pues bien mi idea es tocar solo la clase host para que siga devolviendo la misma estructura del objeto r.serverInfo.initialData a los formularios y no tener que estar modificando todas las consultas de todas las pantallas, que podría provocar más tiempo y mas probabilidad de errores.
Así que lo que he hecho es recuperar los datos de una consulta mysql y montar un objeto as3 igual que serverInfo.initialData desde php tal que asi:
Código PHP :
return "{"serverInfo":{"initialData":[["javier","vicente","..."]],"columnNames":["nombre","apellido1","apellido2"],"totalCount":1}}";
Cuál es el problema? que al recibir esa cadena como "STRING" en flash, e intentar convertirla en un objeto da error.
Código ActionScript :
var o:Object = '{"serverInfo":{"initialData":[["javier","vicente","..."]],"columnNames":["nombre","apellido1","apellido2"],"totalCount":1}}';
trace(o.serverInfo.initialData);
//Resultado-> ReferenceError: Error #1069: No se encontró la propiedad serverInfo en String y no hay ningún valor predeterminado. at Sint_fla::MainTimeline/frame1()
Si la misma cadena la creo de la siguiente manera omitiendo las comillas simples de cierre, flash crea el objeto correctamente, es curioso que por esa simple diferencia después no sea posible volver a convertir la cadena en un objeto sin usar un parser y si lo es lo desconozco.
Código ActionScript :
var o:Object = {"serverInfo":{"initialData":[["javier","vicente","..."]],"columnNames":["nombre","apellido1","apellido2"],"totalCount":1}}
trace(o.serverInfo.initialData); //Resultado-> javier,vicente,...
trace(o.serverInfo.initialData[0][0]); //Resultado-> javier
Así que buscando una solución lo único que encontré fue o hacerme una propia función para parsear el objeto o utilizar JSON por lo que para reiventar la rueda decidi utilizar JSON.
Utilizando JSON para convertir la cadena en un objeto no da error, si hay otra solución la desconozco.
Código ActionScript :
var o:Object = JSON.parse('{"serverInfo":{"initialData":[["javier","vicente","..."]],"columnNames":["nombre","apellido1","apellido2"],"totalCount":1}}');
En principio sigo utilizando amf para el envió y recepción de datos , pero para convertir el objeto recuperado en un objeto as3 utilizo JSON
Ya me diréis si he hecho una burrada muy grande
La cuestión es que solo he tenido que actualizar una clase y no 10.000 líneas de código de todos los formularios y de rebote otras clases relacionadas como las encargadas de rellenar los datagrids que están programadas dependiendo de la misma estructura del objeto r.serverInfo.columnNames, r.serverInfo.initialData o r.serverInfo.totalCount
Saludos Solisarg