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 :

Amfphp remoteObject : gestion des erreurs


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut Amfphp remoteObject : gestion des erreurs
    Bonjour à tous,

    bon alors voila mon problème,
    je suis sous Flex 3, j'utilise le framework AMfPhP pour me connecter à ma base de données MySQL, ca marche niquel. J'utilise tout ca via les RemoteObject.
    Par contre dans l'objet RemoteObject, il y a un paramètre result (en cas de succès de l'action) et un paramètre fault en cas d'echec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <mx:RemoteObject id="myFonction" fault="faultHandler(event)" showBusyCursor="true" 
    			source="vo.MyFonction" destination="amfphp">
            <mx:method name="updateRecord" result="{refreshDomaine(event)}" fault="faultHandler(event)"/>
            <mx:method name="addRecord" result="{refreshDomaine(event)}" fault="faultHandler(event)"/>
            <mx:method name="delRecord" result="{refreshDomaine(event)}" fault="faultHandler(event)"/>
    </mx:RemoteObject>
    Le seul problème c'est que je n'arrive pas à distinguer les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "Erreur : \n" + "code:\n" + e.fault.faultCode + 
    					"\n\nMessage:\n" + e.fault.faultString + 
    					"\n\nDetail:\n" + e.fault.faultDetail
    renvoit toujours la même erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    e.fault.faultCode: "Client.Error.DeliveryInDoubt" 
    e.fault.faultDetail : "Channel disconnected before an acknowledgement was received"
    e.fault.faultString : "Channel disconnected"
    J'ai regardé du coté du php mais j'y connais rien du tout en Php donc j'avance pas ...

    Si quelqu'un peut me donner une piste ou m'éclairer

    merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Salut,
    en fait ce genre d'erreur est assez contraignant car il signifie qu'il y a une erreur dans la chaine client->server->client, et il est difficile de vraiment savoir ou cela se trouve.
    En fait :
    - Soit le problème vient de la configuration (dans le cas présent, dans ton index.php, as-tu les bons noms de services / vo etc ?), un path ou un nom de fichier mauvais, le nom du service par exemple...
    - Soit le problème vient des types de données sérialisés -> les vo Flex et Php ne correspondent pas.
    - Soit tu as un erreur dans le Php (au niveau du sql si tu l'as écrit en dur par exemple).

    Le mieux est de tester chaque partie du code responsable :
    - Les données envoyées au service,
    - le service en lui-même
    - La requête SQL
    - les données traitées avec la requête
    - les données retournées par le service.

    Utilises-tu Zend par hasard ? il y a un debugger Php normalement avec si tu l'as installé, très pratique dans un cas comme celui-ci car le debug garde la main côté server... donc tu sais directement d'où vient ton problème.

    [EDIT] : et je te conseille de pointer les resultHandler sur des fonctions distinctes les unes des autres -> le add peut marcher, et le delete peut planter, tu auras plus de facilité à traiter les résultats / erreurs dans des fonctions result différents.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut
    Salut et merci de répondre aussi vite (c'est hallucinant),
    pour répondre à ta question, non je n'utilise pas Zend ,

    Le mieux est de tester chaque partie du code responsable :
    - Les données envoyées au service,
    - le service en lui-même
    - La requête SQL
    - les données traitées avec la requête
    - les données retournées par le service.
    par contre le fond de mon problème est de distinguer le type d'erreur,
    en l'occurrence je suis sur qu'il s'agit d'une requête sql "rejetée" par mysql
    car duplication de clé primaire mais dans mon code flex je ne vois pas comment traiter cette distinction ou alors avant la création de données, il faut que je vérifie qu'elle n'existe pas dans la base ...,
    je sais pas si j'ai été beaucoup plus clair que la première fois ...

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Au temps pour moi
    Utilises-tu des try / catch dans ton php ?
    Je pense que c'est la seule solution pour retourner une erreur "voulue".
    Sinon si l'erreur n'est pas catchée et traitée, tu récupères une erreur comme celle que tu as.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut
    Utilises-tu des try / catch dans ton php ?
    salut, j'ai essayé mais en fait je sais pas faire ...
    et je trouve pas d'exemple sur le net parcequ'une fois que j'ai "catché" l'erreur, je sais pas quoi en faire ...

    voila ma fonction somme toute assez basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function addRecord($strSQL)
    	  {
    	  	// on se connecte
    	      $link = @mysql_connect("localhost","login", "motDePassse") or die ("Impossible de se connecter : " . mysql_error());
    	      mysql_select_db("mabase_db",$link); 
     
    	      // on envoie la requête
    	      $req = @mysql_query($strSQL) or die('Erreur SQL !'.$strSQL.''.mysql_error());
    		}
    j'ai essayé de catché si $req = FALSE mais je sais pas trop quoi faire de l'erreur récupérée ....

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Si tu as catché l'erreur, tu as fait le plus dur

    tu dois pouvoir mettre ce que tu veux dans le catch. Est-ce que tu arrives à récupérer le message d'erreur de la requête sql ?
    En théorie, dans le catch tu as juste à retourner ce message qui sera récupéré dans ton resultHandler.


    Je pense même que si tu retournes l'exception en elle-même ca devrait passer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try
    {
    <div style="margin-left:40px">// code php + requete sql</div>}
    catch (Exception $e)
    {
    <div style="margin-left:40px">return $e;</div>}
    Et ensuite dans ton resultHandler, c'est la propriété "message" de l'event qui te renvoie ce que tu souhaites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private function resultHandler(evt:FaultEvent):void
    {
    <div style="margin-left:40px">Alert.show(evt.message.toString());</div>}

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

Discussions similaires

  1. [FB] Gestion des erreurs et application francophone
    Par Benjamin GAGNEUX dans le forum Installation
    Réponses: 10
    Dernier message: 20/05/2006, 14h54
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 16h51
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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