IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Problème insert, delete, update avec Remote Object [FB4]


Sujet :

Flex

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Problème insert, delete, update avec Remote Object
    bonjour,

    je dois développer un back-office en flex afin d'administrer une base de donnée MySQL (je précise que je travaille sous windows avec wamp).

    Pour cela j'utilise la création de service automatique de Flash Builder via Remote Object.
    La mise en place du service se passe bien et les opérations de test sont ok.
    J'utilise Flash Builder pour générer les appels aux services et les formulaires.

    Le problème que je rencontre c'est que lorsque je test l'application les opérations d'insert, delete, update sur la base de donnée ne sont pas effectuées (aucune erreure n'est signalée). Je peux lire les infos de la base (select) mais pas effectuer d'autres opérations.
    En testant l'appli je me rends compte que le problème vient du fait que pour les opérations insert, delete, update, la classe de service AS3 ne fait pas appel à la classe PHP qui lui correspond alors que tout se passe bien pour les opérations de select.

    Je suis donc à la recherche d'infos me permettant de résoudre ce problème.

    Merci.

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour et bienvenue,

    que t'a généré Flash builder ? Un backend avec Zend Framework ? As tu vérifié que ton serveur AMF mappe bien tes services et que tes retours en as3 se font bien sur l'event result et pas fault ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse rapide.

    - que t'a généré Flash builder ?

    il m'a généré toute la couche de service PHP (introspection avec Zend Framework) et AS3 ainsi que les classes ValueObject AS3.
    J'ai aussi fait généré les appels aux services et les formulaires par Flash Builder.


    - As tu vérifié que ton serveur AMF mappe bien tes services ?


    Toutes les opérations de test (insert, delete, update, select) effectuées avec Flash Builder fonctionne parfaitement. Donc j'en déduis qu'il n'y a pas de souci côté PHP et AMF.

    - tes retours en as3 se font bien sur l'event result et pas fault ?

    Pour ce qui est des retour AS3 c'est flash builder qui a généré les appels aux services donc aparemment pas de pb de ce côté là. Surtout que les opérations de select marchent parfaitement.


    Le pb est vraiment lié au fait que pour les opérations insert, delete, update, la classe de service AS3 générée par Flash Builder ne lance pas la classe de service PHP qui gère les opérations sur la base. Ce qui est surprenant c'est que le processus fonctionne parfaitement sur les opérations de select qui sont gérés par la même classe AS3.

    Aprés avoir analysé la classe de service AS3 (qui est la classe génée par defaut sans aucune modif) je ne vois pas du tout pourquoi sur les méthodes (create, delete, update) le service côté serveur n'est pas invoqué. J'imagine qu'il doit y avoir un paramêtre à configuré ...

    Je précise que je n'ai aucune erreur relevée lors de la validation des formulaires de l'appli de test.


    Voici qq échantillons de code généré :

    - la méthode de la classe de service AS3 censé apeller la méthode de la classe service PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function createTest(item:Object) : mx.data.ItemReference
    {
        var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createTest");
        var _internal_token:mx.data.ItemReference = _internal_operation.send(item) as mx.data.ItemReference;
     
        return _internal_token;
    }
    - L'appel au service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    protected function button_clickHandler(event:MouseEvent):void
    {
    	var test2:Test = new Test();
    	test2.id = parseInt(idTextInput.text);
    	test2.name = nameTextInput.text;
    	test2.age = parseInt(ageTextInput.text);
     
    	createTestResult.token = testService.createTest(test2);
    }
    (code généré par défaut par Flash Builder)

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    J'avoue que j'utilise jamais Flash builder pour générer mes services donc je suis pas trop habitué à ces notations et encore moins aux opérations.

    Cependant, quelque chose me surprend : tu ne mets pas d'ecouteur sur _internal_token afin d'écouter la réponse du serveur ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Dans ce cas c'est la méthode createTest(item:Object) de la classe de service AS3 qui renvoie la réponse du serveur (return _internal_token).

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    et ce return est exploité où ensuite ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Le return est exploité ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    protected function button_clickHandler(event:MouseEvent):void
    {
       var test2:Test = new Test();
       test2.id = parseInt(idTextInput.text);
       test2.name = nameTextInput.text;
       test2.age = parseInt(ageTextInput.text);
    				
       createTestResult.token = testService.createTest(test2);
    }
    et cette méthode est invoquée sur l'évènement click sur le btn du formulaire de création

  8. #8
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    et ce createTestResult est de quel type et où est il crée stp ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Il est créé ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <fx:Declarations>
       <valueObjects:Test id="test"/>
       <testservice:TestService id="testService"  fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
       <s:CallResponder id="createTestResult"/>
    </fx:Declarations>
    c'est un objet CallResponder.

  10. #10
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Essaies de tester les événements comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    createTestResult.addEventListener(FaultEvent.FAULT, eventFault);
    createTestResult.addEventListener(ResultEvent.RESULT, eventResult);
    createTestResult.token = testService.createTest(test2);
     
    protected function eventFault(event:FaultEvent):void {
      Alert.show("marche pas");
    }
     
    protected function eventResult(event:ResultEvent):void {
      Alert.show("marche");
    }

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Donc j'ai testé...
    rien ne se passe.

    mais bon l'évènement Fault est déja écouté ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <fx:Declarations>
        <valueObjects:Test id="test"/>
        <testservice:TestService id="testService"  fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
        <s:CallResponder id="createTestResult"/>
    </fx:Declarations>

  12. #12
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    On dirait que la destination de ton remote object n'a pas été définie.

    Personnellement, j'applique la méthode décrite sur le site de zend, au moins je comprends tout ce que je fais ensuite.

    As tu testé de faire cette méthode via un fichier xml décrivant tes services ?

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    En fait ici la configuration du Remote Object est entièrement gérée par la classe de service AS3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    _serviceControl.convertResultHandler = com.adobe.serializers.utility.TypeUtility.convertResultHandler;
    _serviceControl.source = "TestService";
    _serviceControl.endpoint = "gateway.php";
    destination = "TestService";
    ...
    Ce qui est étonnant dans tout ça c'est que l'opération select sur une table marche.
    J'arrive à alimenter une DataGrid avec le contenu d'une table.
    Donc la passerelle entre Flex et PHP est opérationnelle.
    Par contre impossible d'effectuer une autre opération.

    J'en viens à me demander si il n'y a pas une histoire de restriction ou de droit concernant les opérations insert, delete, update ... ce qui me paraît vraiment improbable.

  14. #14
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Envois tu bien via ton remote object autant de paramètres qu'il y en a dans tes services PHP ?

    Sinon, tu peux regarder les logs apache ou définir une fonction de log dans tes services afin d'historiser un peu ce que fait ton service et trouver ainsi les éventuel problèmes

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Donc j'ai trouvé un moyen de débugger ces problèmes.

    Je donne la méthode que j'ai utilisé pour ceux qui rencontrerait les même pb que moi.

    - J'ai supprimé les méthodes create, update et delete de la classe de service PHP.
    - Ensuite j'ai éxécuté le programme afin de relancer l'introspection de la classe de service PHP par le zend framework ce qui a pour effet de mettre à jour la classe de service AS3 (suppression des méthodes create, update, delete).
    - Puis j'ai remis les méthodes create, update, delete dans la classe de service PHP
    - Enfin j'ai rééxécuté le programme afin de relancer une nouvelle introspection et donc de remettre à jour la classe de service AS3 (recréation des méthodes create, update, delete).


    Ce que ça donne niveau code c'est le type des paramètres et le type des retours des méthodes de create, update, delete de la classe de service AS3 qui ont changé:

    avant manip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function createTest(item:valueObjects.Test) : mx.data.ItemReference
    {
        var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createTest");
        var _internal_token:mx.data.ItemReference = _internal_operation.send(item) as mx.data.ItemReference;
     
        return _internal_token;
    }
    après manip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function createTest(item:Object) : mx.rpc.AsyncToken
    {
         var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createTest");
         var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(item) ;
     
         return _internal_token;
    }
    Cette méthode pour obtenir des services fonctionnelles sur toutes les opérations (insert, update, delete) n'est pas très logique mais bon ça marche.

    Si quelqu'un a une explication ou une méthode plus propre je suis preneur.

  16. #16
    Candidat au Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 1
    Points : 4
    Points
    4
    Par défaut Merci!
    Citation Envoyé par gui-yem Voir le message
    Donc j'ai trouvé un moyen de débugger ces problèmes.

    Je donne la méthode que j'ai utilisé pour ceux qui rencontrerait les même pb que moi.

    - J'ai supprimé les méthodes create, update et delete de la classe de service PHP.
    - Ensuite j'ai éxécuté le programme afin de relancer l'introspection de la classe de service PHP par le zend framework ce qui a pour effet de mettre à jour la classe de service AS3 (suppression des méthodes create, update, delete).
    - Puis j'ai remis les méthodes create, update, delete dans la classe de service PHP
    - Enfin j'ai rééxécuté le programme afin de relancer une nouvelle introspection et donc de remettre à jour la classe de service AS3 (recréation des méthodes create, update, delete).


    Ce que ça donne niveau code c'est le type des paramètres et le type des retours des méthodes de create, update, delete de la classe de service AS3 qui ont changé:

    avant manip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function createTest(item:valueObjects.Test) : mx.data.ItemReference
    {
        var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createTest");
        var _internal_token:mx.data.ItemReference = _internal_operation.send(item) as mx.data.ItemReference;
     
        return _internal_token;
    }
    après manip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function createTest(item:Object) : mx.rpc.AsyncToken
    {
         var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createTest");
         var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(item) ;
     
         return _internal_token;
    }
    Cette méthode pour obtenir des services fonctionnelles sur toutes les opérations (insert, update, delete) n'est pas très logique mais bon ça marche.

    Si quelqu'un a une explication ou une méthode plus propre je suis preneur.


    Salut gui-yem!
    Grace à votre réponse j'ai pu résoudre mon problème qui m'a pris presque une semaine.
    J'utilise Flash builder 4 pour developper un intranet.
    J'avoue que toutes les fonctions générées pour un service fonctionnent correctement.
    J'ai résolu mon problème comme ça:
    1* j'ai commenté les ligne de code des fonction create, delete et update au niveau du service concerné
    2* ensuite j'ai exécuté le programme flash
    3* j'ai décommenté les lignes que j'avais commenté a l'étape 1
    4* j'ai reexécuté le programme et l'insertion marche très bien

    J'espère que ça va aider quelqu'un qui utilise la méthode que j ai suivi!

    Merci

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    amateur motivé
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : amateur motivé
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut merci
    Eh bien les gars, je ne saurais trop vour remercier de nous avoir fait partager vos recherches et surtout vos solutions !
    Ça fait pratiquement une semaine que je m'arrache les cheveux sur ce problème, et mes nerfs étaient sur le point de lâcher tous en même temps.

    Je me suis inscrit au forum juste pour vous remercier:
    Merci, merci, et encore merci !

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

Discussions similaires

  1. Comment appeler insert/delete/update avec ksoap ?
    Par nala182 dans le forum Android
    Réponses: 6
    Dernier message: 23/07/2012, 15h09
  2. [ODBC] Faire une requête INSERT, DELETE, UPDATE
    Par avogadro dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/09/2006, 11h35
  3. Réponses: 5
    Dernier message: 10/07/2006, 12h05
  4. pb requête delete/update avec opérateur like, connexion ADO
    Par jerome666 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/02/2006, 16h47
  5. événement sur INSERT, DELETE, UPDATE
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/12/2004, 15h40

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