Hola a todos
YA HE RESUELTO el problema, y todo era debido a la caché del servidor
de aplicaciones, y que siempre retornaba el mismo XML porque se hacía
la misma llamada. Intentaré explicar paso a paso qué he hecho para
ilustrarlo detenidamente.
Una vez insertado el registro con éxito, invocaremos a un generador de
números aleatorios, para ellos se ha creado una variable y una función
para tal efecto:
[Bindable]
private var iRandom:int;
private function generateRandom():void
{
iRandom=Math.random()*32000;
}
Para que las llamadas siempres sean distintas, y, por tanto, la caché
no devuelva el mismo XML, se añade un parámetro extra a la llamada al
php de forma aleatoria, o, lo que es lo mismo, que invoque a nuestra
variable con el valor aleatorio:
<mx:HTTPService fault="handleUsersFault(event);"
id="srvGetUsers" resultFormat="e4x"
url="
http://localhost/miruta/srv_get_users.php"
useProxy="false">
<mx:request xmlns="">
<id_client>{pIdClient}</id_client>
<nRandom>{iRandom}</nRandom>
</mx:request>
</mx:HTTPService>
Para que todo esto funcione, hay que generar un número aleatorio antes
de invocar al servicio HTTPService. De esta manera, retomamos la
función anterior y antecedemos la primera línea que genera el número
aleatorio:
private function handleCreateUserResult
(event:ResultEvent):void
{
var xmlResult:XML;
xmlResult=XML(event.result);
var tResult:String=xmlResult.result.text();
// If user was not created
if(tResult!="OK")
Alert.show("Se ha producido un error: " + tResult,
"Creación de usuario");
else
{
generateRandom(); // AQUI ESTA LA CLAVE PARA QUE
FUNCIONE
deactivateForm(); // Función que desactiva el
formulario y activa el DataGrid (propiedad enabled)
Alert.show("El usuario '"+txtNick.text+"' se creó
con éxito", "Creación de usuario");
srvGetUsers.send(); // Llama al servicio que
obtiene la lista de usuarios y que está enlazado al datagrid
dgUsers.dataProvider="{srvGetUsers.lastResult.user}",
dgUsers.validateDisplayList();
dgUsers.validateNow();
}
}
Espero que este ejemplo sea ilustrativo y pueda servir a otros Flexers
que tengan este problema. Me gustaría dar las gracias a Fabián Brussa,
que contribuyó en otro debate similar con esta pista (http://
groups.google.com/group/madeinflex/browse_thread/thread/
be43e604f6a94ae0/607a2e6c592f5d0a?lnk=gst&q=refrescar
+DataGrid#607a2e6c592f5d0a)
Rafael Hernampérez
Rafael Hernampérez