p
u
b
l
i
c
i
t
é
publicité

Discussion: Problème de service [Flex4]

  1. #1
    Membre régulier
    Inscrit en
    août 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : août 2007
    Messages : 208
    Points : 88
    Points
    88

    Par défaut Problème de service

    Bonjour!

    Je bloque sur la récupération de mes données stockées dans mySql.
    j'ai un service php (Zend) pour les insertions (qui fonctionne) et un autre pour sélectionner une ligne d'informations; le service est copié sur l'exemple fourni et largement repris par Adobe http://help.adobe.com/fr_FR/Flex/4.0...e6e8-8000.html
    http://help.adobe.com/fr_FR/Flex/4.0...0d422cf08-7ff2

    Je parviens à réaliser cette sélection dans un datagrid.
    Cependant le but consiste à dire si telle réponse est fournie pour la question 1 alors ...
    Deux optiques apparaissent suite aux recherches :
    1 Regarder du côté du dataProvider du datagrid pour chercher les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <mx:DataGrid includeIn="StateFlo2" creationComplete="datagrid1_creationCompleteHandler(event)" 
    				 dataProvider="{getQuestionsResult.lastResult}" editable="true"> 
    		<mx:columns> 
    			<mx:DataGridColumn headerText="Question1" dataField="q1"/> 
    			<mx:DataGridColumn headerText="Question2" dataField="q2"/> 
    		</mx:columns> 
    	</mx:DataGrid>
    Il faut donc travailler sur getQuestionsResult.lastResult. Mais comment? Quand j'essaie de récupérer son contenu avec un objet ou un arrayCollection je n'y parviens pas!

    2 Insérer un événement sur la distribution du résultat du CallResponder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <s:CallResponder id="getQuestionsResult" result="repQuestions_resultHandler(event)"/>
    puis récupérer son contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected function repQuestions_resultHandler(event:ResultEvent):void {
     
    var essai1:ArrayCollection;
    essai1= new ArrayCollection(ArrayUtil.toArray(getQuestionsResult.lastResult));
    var essai2:Object = getQuestionsResult.lastResult as InternauteService;
    Alert.show(plist[0]['q1']);
    Vous l'aurez compris, je suis à la ramasse :-) les deux procédés se ressemblant...
    Merci d'avoir lu jusqu'ici! Un indice?

  2. #2
    Membre régulier
    Inscrit en
    août 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : août 2007
    Messages : 208
    Points : 88
    Points
    88

    Par défaut

    Bonjour après moult pérégrinations franglaises j'en arrive à :
    comment récupérer monService.lastResult?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    //1 Définition service
    <s:CallResponder id="getQuestionsResult3" result="getQuestionsResult3_resultHandler(event)"/>	
    //2 Appel service et on jeton
    protected function textInput_creationCompleteHandler(event:FlexEvent):void
    {
    getQuestionsResult3.token = internauteService.getQuestions();
    }
    //3 Traitement résultat			
     
    protected function getQuestionsResult3_resultHandler(event:ResultEvent):void
    {			
    //var myQuestionInstance :ClasseQuestion  = event.result as ClasseQuestion;
    var toto:Array=ArrayUtil.toArray(getQuestionsResult3.lastResult);
    var i:Number = new Number();
    if(toto != null){
    for(i=0;i<toto.length;i++)
    {
     
    	Alert.show(toto['q1']);//ou toto['0'] q1 étant un champ de la classe Question que j'ai typée avec "ClasseQuestion" dans la génération du service
    }
    }
    Mais je n'obtiens qu'un résultat vide... ou "Object ClasseQuestion"...

  3. #3
    Membre régulier
    Inscrit en
    août 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : août 2007
    Messages : 208
    Points : 88
    Points
    88

    Par défaut


    monService.lastResult renvoie un objet de type CustomDatatype que j'ai défini lors de l'affectation du service. CustomDatatype est composé de 5 champs (q1,q2,q3,q4,q5 tous entiers) issus de champs d'une table MySql.

    J'essaie d'accéder à l'objet généré par monService.lastResult :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var tenta:CustomDatatype1=new CustomDatatype1();
    				tenta=getQuestions1Result.lastResult;
    				labTest.text=tenta.q1.toString();
    Mais.... nada snifff!

  4. #4
    Membre régulier
    Inscrit en
    août 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : août 2007
    Messages : 208
    Points : 88
    Points
    88

    Par défaut

    J'ai compris ma question yeahhhh!

    En modifiant ce qui sort du service php : on passe d'un tableau associatif ($row) à un integer.
    J'indique dans Flex que la méthode getQuestions est de type int et là c'est l'apothéose, j'obtiens la valeur souhaitée!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var tenta:int=new int();
    	tenta=getQuestionsResult.lastResult;
    	labTest.text="voyons voyons" + tenta;
    Bon de retour du côté php, je remet le tableau associatif.
    Côté Flex : 2 choix soit je déclare getQuestion en "object" soit dans un nouveau type : le fameux ClasseQuestion (qui devrait s'appeler typeQuestion).

    Comment puis-je manipuler l'objet retourné (propriétés?) OU ce nouveau type (ClasseQuestion)?

  5. #5
    Membre régulier
    Inscrit en
    août 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : août 2007
    Messages : 208
    Points : 88
    Points
    88

    Par défaut

    Et la petite solution qui va bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    protected function getQuestionsResult_resultHandler(event:ResultEvent):void
    {
            var tenta:ClasseQuestion=new ClasseQuestion();
    	tenta=getQuestionsResult.lastResult[0];		
    	labTest.text="voyons " + tenta.q1;
     
    }
    En fait Flex génère une classe : ClasseQuestion dans mon cas qui correspond à celle du php service. Il n'y a plus qu'à y accéder avec le get... dans l'écouteur de la diffusion du service Php.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Web service : C# - IIS 6.0 - windows server 2003
    Par identifiant_bidon dans le forum Services Web
    Réponses: 3
    Dernier message: 20/04/2007, 16h33
  2. [Tableaux] Problème de service web et tableau
    Par hxt dans le forum Fonctions
    Réponses: 4
    Dernier message: 04/07/2006, 09h33
  3. problème de services web
    Par bada dans le forum Web Services
    Réponses: 2
    Dernier message: 09/06/2006, 18h26
  4. [Apache]Problème se services Apache
    Par bartmarley dans le forum Apache
    Réponses: 6
    Dernier message: 15/07/2004, 14h13
  5. [Kylix] problème web service kylix
    Par RezzA dans le forum Kylix
    Réponses: 3
    Dernier message: 11/02/2003, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo