Comunidad de diseño web y desarrollo en internet online

manipular objeto recibo por medio de una llamada a BD

Citar            
MensajeEscrito el 12 Jul 2010 06:00 am
Hola amigos!!

Como puedo manipular un bojeto el cuelo lo recibo desde una llamada.

la cosa esta asi, estoy sacandole jugo a una de las novedades del flash builder 4: webservice por medio d zend 4, al hacer el webservice en vez d yo crear mi propia clase d php decidi crear una clase de ejemplo, como ya todos sabran crea diferentes funciones dentro de la clase d php, entre ellas obtener todos items d una tabla hace la llamada sin pasar ningun parametro.
Pues yo modifique dicha funcion para q recibiera un parametro y ademas q haga comparaciones y me devuelva los datos (en este caso) del usuario como: id, usuario, clave, mail.

Para probar que funciona hice un pequeño buscador y funciona.

Pero lo que realmente quiero lograr es q cuando haga la llamada y me devuelva el objeto poder recuperar el campo usuario del objeto.

Les dejo la llamada a q pone automaticamente flex:

Código Flex :

getAllUsuariosResult.token = usuariosService.getAllUsuarios(texto.text);


Como siempre y d antemano muchas gracias.

(Espero no haberme liado un poco jeje)

Por px87

Claber

141 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Jul 2010 11:14 am
Para devolver un objeto desde PHP puedes pasar un array con índices o una instancia de una clase que tienes que mapear usando $_explicitType, puedes ver un ejemplo en http://www.flash-db.com/Tutorials/helloAS3/ ... aunque no está basado en el autogenerador de FlashBuilder

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Jul 2010 07:47 pm
Muchas gracias Jorge:

Bien, creo me lie un poco sino es que bastante, una disculpa.

En palabras mucho más resumidas que mi letania anterior jeje lo q necesito es:

Por medio d esta linea se pasa un argumento a la funcion php para q devuelva uno o varios objetos d la BD que coincidan con el argumento q se paso en la tabla USUARIOS (en mi caso).

Código Flex :

getAllUsuariosResult.token = usuariosService.getAllUsuarios(texto.text);


Pues lo q yo necesito es obtener el campo USUARIO del objeto devuelto e imprimirlo (por hacer una prueba) por medio AS en flex 4.

tambien aprovechando el momento q hace la funcion asynctoken y más presisamente q hace un objeto asynctoken.

Saludos y gracias.

Por px87

Claber

141 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Jul 2010 08:29 pm
Mira que tipo de objeto te devuelve el PHP, seguramente será algo como:

result.USUARIO

Si tienes dudas, postea el método de PHP.
No se exactamente cual es la función asynctoken porque trabajo de una forma un poco manual, no con el wizard, pero ten en cuenta que es una operación asincrónica (haces un llamado y esperas el resultado en un callback)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Jul 2010 09:07 pm
Hola Jorge, muchas gracias por tu respuesta.

Aqui esta el codigo de la funcion q genera flex:

Código PHP :

   public function getAllUsuarios($q) {


       $sql = "SELECT * FROM $this->tablename WHERE usuario LIKE '%$q%' OR mail LIKE '%$q%'";
      
      $stmt = mysqli_prepare($this->connection, $sql);      
      $this->throwExceptionOnError();
      
      mysqli_stmt_execute($stmt);
      $this->throwExceptionOnError();
      
      $rows = array();
      
      mysqli_stmt_bind_result($stmt, $row->id, $row->usuario, $row->clave, $row->mail);
      
       while (mysqli_stmt_fetch($stmt)) {
         $rows[] = $row;
         $row = new stdClass();
         mysqli_stmt_bind_result($stmt, $row->id, $row->usuario, $row->clave, $row->mail);
       }
      
      mysqli_stmt_free_result($stmt);
       mysqli_close($this->connection);
   
       return $rows;
   }


Y una cosa más, veo q tu eres d los q mas experiencia tienes en este foro, como has conseguido adquirirla? ya q yo tengo apenas 1 mes manejando flex mi unica guia han sidos los videos d video2brian q son un poco superficiales, pero enseñan a fin d cuentas (y la verdad he aprendido mucho), pero quiero convertirme un conocedor total d flex q me recomiendas hacer aparte claro, d la practica.

Muchas gracias y saludos.

gracias y saludos.

Por px87

Claber

141 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Jul 2010 10:48 am
Correcto, te devuelve un array de objetos. Al resultado le tienes que hacer un cast a ArrayCollection y luego cada uno de los objetos tiene la propiedad id, usuario, clave, email. Pon el resultHandler si tienes dudas.
En cuanto a Flex, hay muchos libros que puedes consultar, aunque la clave es que sepas inglés, sino, estarás muy limitado en tu aprendizaje

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Jul 2010 02:52 am
Muchas gracias Jorge, ya intente lo q me dijiste, ahora lo q no consigo es "llenar" el arraycollection, aqui esta lo q hago:

Código Flex :

         protected function button_clickHandler(event:MouseEvent):void
         {
            var objts:ArrayCollection = new ArrayCollection();
            
            getAllUsuariosResult.token = usuariosService.getAllUsuarios(texto.text);
            
            objts = getAllUsuariosResult.lastResult as ArrayCollection;
            
         }


Muchas gracia por tu ayuda.

Saludos.

Por px87

Claber

141 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 14 Jul 2010 01:25 pm
Cuando declaras el RemoteObject, tienes que poner un resultHandler que es la función que recibe el resultado, no lo tienes que poner en el click del botón, básicamente porque es un llamado asincrónico (de allí asynctoken) No estoy trabajando con Flash Builder, y menos con la generación automática, pero no creo que esté tan lejos ... ¿no trae ejemplos la documentación?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Jul 2010 05:04 am
Hola Jorge, muchas gracias por tu tiempo y paciencia, ya intente lo q me dijiste, pero sigo sin resultados, estoy seguro d q lo estoy implementando mal. Estoy por darme por vencido, creo q las ligas mayores d flex con un poco complicadas para un novato, tendre q aplicarme mas en este tema.

Mi ultimo intento, aqui t dejo mi codigo para q veas mis posibles y seguros errores, t anticipo que uso el trace para imprimir la longitud del arraycollection, pero siempre sale '0'.

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"   xmlns:usuariosservice="services.usuariosservice.*">
   <fx:Script>
      <![CDATA[
         import com.adobe.serializers.utility.TypeUtility;
         
         import mx.collections.ArrayCollection;
         import mx.controls.Alert;
         import mx.events.FlexEvent;
         import mx.rpc.events.ResultEvent;
         
         import valueObjects.Usuarios;
         
         private var objts:ArrayCollection = new ArrayCollection();         
         
         protected function rHandler(evento:ResultEvent):void
         {
            
            getAllUsuariosResult.token = usuariosService.getAllUsuarios(texto.text);
            
            objts = getAllUsuariosResult.lastResult as ArrayCollection;

         }
         
         
         private function mifuncion(ev:MouseEvent):void{
            
            trace(objts.length);

         }


      ]]>
   </fx:Script>
   <fx:Declarations>
      <s:CallResponder id="getAllUsuariosResult"/>
      <usuariosservice:UsuariosService id="usuariosService"  result="rHandler(event)" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
      <s:CallResponder id="getUsuariosByIDResult"/>

   </fx:Declarations>
   <s:TextInput x="47" y="72" width="176" id="texto"/>
   <s:Button x="231" y="73" label="Buscar" click="mifuncion(event)" id="button"/>
   <mx:DataGrid x="47" y="138" id="dataGrid" dataProvider="{getAllUsuariosResult.lastResult}" width="368">
      <mx:columns>
         <mx:DataGridColumn dataField="usuario" headerText="Usuario"/>
         <mx:DataGridColumn dataField="mail" headerText="e-mail"/>
      </mx:columns>
   </mx:DataGrid>
   
   </s:Application>


Saludos y muchas gracias.

Por px87

Claber

141 de clabLevel

1 tutorial

Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.