|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Tableau en sortie d'un WebService |
Débuté par LordK1, 03 mar. 2014 11:26 - 30 réponses |
| |
| | | |
|
| |
Membre enregistré 29 messages Popularité : +1 (1 vote) |
|
Posté le 03 mars 2014 - 11:26 |
Bonjour à tous,
Nous avons récemment voulu mettre en place un webservice.
Rien de compliqué à la base, et tout fonctionne bien pour des choses assez basiques comme le renvoi du résultat unique d'une requête., et ce même dans une classe.
Là où ça se complique, c'est lorsque je souhaite faire renvoyer un tableau de résultats, comme une liste du personnel. Lors des tests par l'interface html, je n'ai absolument rien dans le fichier xml de retour.
J'ai d'abord cru que le fait que mon tableau soit un tableau de structures posait problème, mais j'obtiens le même résultat quel que soit le type de contenu du tableau.
J'ai parcouru maints sujets, ici ou sur d'autres fora, testé pas mal de solutions, mais rien de concluant pour le moment.
Je vous livre mon code :
Déclaration globale de ma collection de procédures :
gclAgent_reponse est un Agent_atlas gtabLeau_agents est un tableau de Agent_atlas
Une procédure qui fonctionne :
Procedure Agent_Atlas_par_matricule(matricule_atlas est un entier)
HExécuteRequête(REQ_agent_par_matricule,hRequêteDéfaut,matricule_atlas)
HLitPremier(REQ_agent_par_matricule)
gclAgent_reponse.m_nAgent_nom=REQ_agent_par_matricule.nom gclAgent_reponse.m_nAgent_matricule=REQ_agent_par_matricule.matricule gclAgent_reponse.m_dAgent_date_naissance=REQ_agent_par_matricule.date_naissance gclAgent_reponse.m_sAgent_prenom=REQ_agent_par_matricule.prenom gclAgent_reponse.m_sAgent_sexe=REQ_agent_par_matricule.sexe
RENVOYER gclAgent_reponse
La procédure qui ne renvoit rien :
Procedure Tous_les_agents() SupprimeTout(gtabLeau_agents)
HExécuteRequête(REQ_tous_les_agents,hRequêteDéfaut) HLitPremier(REQ_tous_les_agents)
TANTQUE PAS HEnDehors(REQ_tous_les_agents)
gclAgent_reponse.m_nAgent_nom=REQ_tous_les_agents.nom gclAgent_reponse.m_nAgent_matricule=REQ_tous_les_agents.matricule gclAgent_reponse.m_dAgent_date_naissance=REQ_tous_les_agents.date_naissance gclAgent_reponse.m_sAgent_prenom=REQ_tous_les_agents.prenom gclAgent_reponse.m_sAgent_sexe=REQ_tous_les_agents.sexe
TableauAjoute(gtabLeau_agents,gclAgent_reponse)
HLitSuivant(REQ_tous_les_agents)
FIN
RENVOYER gtabLeau_agents
En gros, renvoyer une structure concernant un agent fonctionne, mais renvoyer un tableau de ces structures non. De même, renvoyer un tableau renvoyant une ligne par agent, sans passer par une structure, ne donne rien.
Je suis preneur de toute l'aide que vous pourrez m'apporter. |
| |
| |
| | | |
|
| | |
| |
Posté le 03 mars 2014 - 14:57 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 29 messages Popularité : +1 (1 vote) |
|
Posté le 03 mars 2014 - 16:03 |
Bonjour, et merci pour la réponse.
Non, je n'ai pas testé cette fonction, puisque PCSoft annonce une gestion des structures et variables complexes dans les webservices sans avoir à l'utiliser depuis la version 18 de ses logiciels, si je ne m'abuse.
J'ai d'ailleurs continué mes tests depuis et constaté que je pouvais sans aucun soucis renvoyer un tableau classique de chaines ou d'entier, mais que plus rien n'est renvoyé si je passe à un tableau de classes ou à plusieurs dimensions.
En derniers recours, je tenterai d'utiliser la fonction serialise, mais si une autre solution existe, j'aimerais fortement la connaître. |
| |
| |
| | | |
|
| | |
| |
Posté le 03 mars 2014 - 16:35 |
Bonjour, voici mon code vAgcode est un Variant IF SansEspace(agcode)="" THEN vAgcode=Null ELSE vAgcode=agcode
END
bOuvrebase est un booléen=Vrai tabMontableau est un tableau de STCOL_REQ_FACTUREENLIGNES
IF bOuvrebase=Vrai THEN
REQ_FACTUREENLIGNES.pagence=vAgcode REQ_FACTUREENLIGNES.Pdatedebut=datedeb REQ_FACTUREENLIGNES.Pdatefin=datefin SI PAS HExécuteRequête(REQ_FACTUREENLIGNES) ALORS SI ErreurDétectée ALORS ExceptionDéclenche(3,"Problème à l'initialisation de la requête "+HErreurInfo(hErrComplet))
FIN FIN
FichierVersTableau(tabMontableau,REQ_FACTUREENLIGNES)
HAnnuleDéclaration(REQ_FACTUREENLIGNES)
RENVOYER tabMontableau
Ca marche bien |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 6 messages |
|
Posté le 04 mars 2014 - 08:14 |
Bonjour,
sauf erreur jusqu'à présent il n'est pas possible pour un webservice de retourner un tableau de structure. Par contre il est possible de retourner une structure qui contient un ou plusieurs tableau de structure. J'ai ainsi adpater mes webservices :
ReponseListe est une structure listeagents est un tableau de Agent_atlas fin ..... gRetour est un reponseListe
Remplissage de ton tableau de structure gtableau_agents puis :
gretour:listeagent = gtableau_agent renvoyer(gretour)
Pour l'utilisateur du webservice, il doit avoir la variable gretour et peut ainsi lire et exploiter le tableau de structure
Bon développement
Pascal BERNE |
| |
| |
| | | |
|
| | |
| |
Posté le 04 mars 2014 - 09:33 |
Dans son message précédent, Pascal BERNE a écrit :
Bonjour,
sauf erreur jusqu'à présent il n'est pas possible pour un webservice de retourner un tableau de structure. Par contre il est possible de retourner une structure qui contient un ou plusieurs tableau de structure. J'ai ainsi adpater mes webservices :
ReponseListe est une structure listeagents est un tableau de Agent_atlas fin .... gRetour est un reponseListe
Remplissage de ton tableau de structure gtableau_agents puis :
gretour:listeagent = gtableau_agent renvoyer(gretour)
Pour l'utilisateur du webservice, il doit avoir la variable gretour et peut ainsi lire et exploiter le tableau de structure
Bon développement
Pascal BERNE
J'ai plusieurs webservices qui renvoient des tableaux de structures et ceci sans problèmes. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 29 messages Popularité : +1 (1 vote) |
|
Posté le 04 mars 2014 - 10:37 |
Ah, là c'est une piste que je n'avais pas exploré. Depuis hier je tentais le sérialisation, qui ne donnait rien de plus, mais là j'ai du mieux avec une classe contenant mon tableau de classes.
Je récupère toujours pas mes données, mais je récupère au moins quelque chose. Reste plus qu'à trouver d'où vient cette erreur, mais je préfère ça.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Client</faultcode> <faultstring>L'opération u n'a pas été trouvée.</faultstring> <detail> Que s'est-il passé ? L'opération u n'a pas été trouvée. Code erreur : 620004 Niveau : erreur fatale (EL_FATAL) Dump de l'erreur du module 'wd190awws.dll' (19.0.5.0). Identifiant des informations détaillées (.err) : 620004 </detail> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 29 messages Popularité : +1 (1 vote) |
|
Posté le 04 mars 2014 - 11:12 |
Philippe Lienart a écrit :
J'ai plusieurs webservices qui renvoient des tableaux de structures et ceci sans problèmes.
Pourriez vous nous donner un exemple de code, ou nous dire ce qui, dans le mien, fait qu'aucune valeur n'est renvoyée ?
La structure contenant un tableau ne renvoi pour le moment qu'une erreur chez moi. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 29 messages Popularité : +1 (1 vote) |
|
Posté le 06 mars 2014 - 08:46 |
Bon, j'ai donc modifié mon code de diverses manières, afin de lui faire renvoyer une instance de classe, contenant un tableau d'une autre classe.
Ma déclaration de variables globales :
gclAgent_reponse est un Agent_atlas gclListe_agents est une liste_atlas gtabLeau_agents est un tableau de Agent_atlas
Mon code de procédure :
Procedure Tous_les_agents()
HExécuteRequête(REQ_tous_les_agents,hRequêteDéfaut) HLitPremier(REQ_tous_les_agents)
TANTQUE PAS HEnDehors(REQ_tous_les_agents)
gclAgent_reponse.m_nAgent_nom=REQ_tous_les_agents.nom gclAgent_reponse.m_nAgent_matricule=REQ_tous_les_agents.matricule gclAgent_reponse.m_dAgent_date_naissance=REQ_tous_les_agents.date_naissance gclAgent_reponse.m_sAgent_prenom=REQ_tous_les_agents.prenom gclAgent_reponse.m_sAgent_sexe=REQ_tous_les_agents.sexe
TableauAjoute(gtabLeau_agents, gclAgent_reponse)
HLitSuivant(REQ_tous_les_agents)
FIN gclListe_agents.tab_result = gtabLeau_agents gclListe_agents.m_nUm_result=gtabLeau_agents..Occurrence RENVOYER gclListe_agents
Et voici le code résultant d'un test :
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body/> </SOAP-ENV:Envelope>
Si je ne renvoie qu'un entier contenant gtabLeau_agents..Occurrence, je retrouve bien le nombre de listes de mon tableau. En revanche, dés que je renvoie mon instance de classe, je n'ai plus que le code ci-dessus. Ce qui est étrange étant donné que j'arrive à renvoyer une instance de ma classe agents.
Plusieurs jours que je tourne en rond à tester tout ce qui me passe par la tête sans résultat... Je désespère. |
| |
| |
| | | |
|
| | |
| |
Posté le 06 mars 2014 - 09:24 |
bONJOUR? Remplaces la classe par un tableau de structure voir. L'exemple que j'ai mis en ligne marche sans soucis. J'ai l'impression que c'est la différence entre toi et moi. |
| |
| |
| | | |
|
| | |
| |
Posté le 06 mars 2014 - 10:42 |
LordK1 a pensé très fort :
Philippe Lienart a écrit : J'ai plusieurs webservices qui renvoient des tableaux de structures et ceci sans problèmes.
Pourriez vous nous donner un exemple de code, ou nous dire ce qui, dans le mien, fait qu'aucune valeur n'est renvoyée ? La structure contenant un tableau ne renvoi pour le moment qu'une erreur chez moi.
Voici un exemple de code :
bufXML est un Buffer i est un entier
ListeCategories est un tableau <agrandissement=1> de RefCategorie
i = 0 POUR TOUT dr_categories AVEC "IDCompetition = " + NumériqueVersChaîne(IDConcours) i++ ListeCategories[i]:Categorie = dr_categories.Category ListeCategories[i]:Description = dr_categories.Description FIN
Sérialise(ListeCategories,bufXML,psdXML) RENVOYER bufXML |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 29 messages Popularité : +1 (1 vote) |
|
Posté le 06 mars 2014 - 12:12 |
Bonjour et merci pour votre aide.
J'avais déjà essayé cette solution, qui me renvoyait une suite de caractères dans le buffer, mais je ne suis jamais parvenu à le déserialiser. Dés lancement de la déserialisation, windev me retourne une laconique erreur "Format de sérialisation incorrect".
Sérialisation :
Procedure Tous_les_agents()
HExécuteRequête(REQ_tous_les_agents,hRequêteDéfaut) HLitPremier(REQ_tous_les_agents) bufXml est un Buffer i est un entier = 1
TANTQUE PAS HEnDehors(REQ_tous_les_agents)
gtabLeau_agents[i]:m_nAgent_nom=REQ_tous_les_agents.nom gtabLeau_agents[i]:m_nAgent_matricule=REQ_tous_les_agents.matricule gtabLeau_agents[i]:m_dAgent_date_naissance=REQ_tous_les_agents.date_naissance gtabLeau_agents[i]:m_sAgent_prenom=REQ_tous_les_agents.prenom gtabLeau_agents[i]:m_sAgent_sexe=REQ_tous_les_agents.sexe
HLitSuivant(REQ_tous_les_agents) i++
FIN Sérialise(gtabLeau_agents, bufXml,psdXML) RENVOYER bufXml
Désérialisation :
bufXml est un Buffer tabLeau_agents est un tableau <agrandissement=1> de Agent_atlas
bufXml = Tous_les_agents()
Désérialise(tabLeau_agents,bufXml,psdXML)
j est une entier = tabLeau_agents..Occurrence
POUR i = 1 A j TableAjoute(TABLE_effectifs,tabLeau_agents[i]:m_nAgent_nom) FIN
Je dois très certainement oublier un truc, mais je ne vois pas quoi. En tout cas, grace à votre aide, j'ai l'impression de réellement avancer. Au bout de plusieurs jours de frustration, ça fait un bien fou. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 29 messages Popularité : +1 (1 vote) |
|
Posté le 06 mars 2014 - 15:20 |
Merci à tous les intervenants pour leur aide. Le problème a été résolu par une lecture esprit reposé de l'aide, qui précise bien que pour un retour de tableau de structures, ces structures doivent être renseignées dans l'application de retour.
Un import de mes classes dans le projet utilisateur de mon webservice, et magie, la désérialisation fonctionne à merveille.
Rigueur, rigueur, rigueur |
| |
| |
| | | |
|
| | |
| |
Posté le 26 mars 2014 - 16:31 |
Salut LordK1, Je suis buté au même blem. je dois moi aussi renvoyé une structure et dans une autre méthode, un table de structure. STP, pourrais-tu m'indiquer comment : - tu as fait pour renvoyer une structure (démarche côté création du ws et côté consommation) - tu as également fait pour renvoyer et récupérer un tableau de structures? En tout cas, je galère depuis des jours. Merci d'avance |
| |
| |
| | | |
|
| | |
| |
Posté le 26 mars 2014 - 17:40 |
Bonjour, Voici comment j'ai procédé pour renvoyer des structures et autre tableaux de structure dans un WebService: 1. Dans le code de la collection de procédure, j'ai défini toutes les structures utiles. Les tableaux sont systématiquement inclus dans une structure. Par exemple: STVerifEncoursSku est une Structure sSku est une chaîne nQuantiteCommandee est un entier FIN
STTabVerifEncoursSku est une Structure tabListeVerif est un tableau dynamique de STVerifEncoursSku FIN
STTabVerifEncoursSkuReponse est une Structure sMessageGeneral est une chaîne tabListeReponse est un tableau dynamique de STVerifEncoursSkuReponse FIN
STVerifEncoursSkuReponse est une Structure sSku est une chaîne nQuantiteCommandable est un entier sNotification est une chaîne sAcceptOrDeny est une chaîne FIN
2. Ensuite dans les procédures du WebService, j'utilise directement ces structures: PROCEDURE VerifEncoursSku(ParamSku est un STTabVerifEncoursSku)
Question est un STVerifEncoursSku listeReponse est un STTabVerifEncoursSkuReponse
Reponse est un STVerifEncoursSkuReponse
POUR TOUT Question DE ParamSku:tabListeVerif Reponse:nQuantiteCommandable = RecupEncours(Question:sSku) Reponse:sAcceptOrDeny = "" Reponse:sSku = Question:sSku Reponse:sNotification = ""
TableauAjoute(listeReponse:tabListeReponse,Reponse)
FIN listeReponse:sMessageGeneral = ""
RENVOYER listeReponse
Bref je ne renvoie jamais directement un tableau, je passe toujours par une structure intermédiaire. J'ai testé ce Webservice depuis une application Windev (en 18) et depuis un site en PHP, et ça fonctionne parfaitement. Pour la partie Windev il suffit d'importer le Webservice, de déclarer 2 variables, une de type STTabVerifEncoursSku à passer en paramètre, et une autre de type STTabVerifEncoursSkuReponse pour récupérer le résultat, puis d'appeler la méthode comme une procédure classique.
Frédéric.
"Christian Djo" a écrit dans le message de groupe de discussion : 201437247dc4859da2779e18842cf60427ec@news.pcsoft.fr...
Salut LordK1, Je suis buté au même blem. je dois moi aussi renvoyé une structure et dans une autre méthode, un table de structure. STP, pourrais-tu m'indiquer comment : - tu as fait pour renvoyer une structure (démarche côté création du ws et côté consommation) - tu as également fait pour renvoyer et récupérer un tableau de structures? En tout cas, je galère depuis des jours. Merci d'avance |
| |
| |
| | | |
|
| | |
| |
Posté le 02 octobre 2015 - 16:12 |
Bonjour Frédéric,
Je réveille un ancien sujet car je n'arrive pas à me sortir de l'importation d'un tableau renvoyé par un Webservice
Dans ton dernier mail tu indiques :
"Pour la partie Windev il suffit d'importer le Webservice, de déclarer 2 variables, une de type STTabVerifEncoursSku à passer en paramètre, et une autre de type STTabVerifEncoursSkuReponse pour récupérer le résultat, puis d'appeler la méthode comme une procédure classique."
Pourrais-tu donner un exemple de code ?
Merci d'avance
Sam |
| |
| |
| | | |
|
| | |
| |
Posté le 02 octobre 2015 - 16:36 |
Bonjour, Comme je l'avais écrit, c'est tout simple. Voici un exemple, avec un autre WebService (qui me sert sur un portail mobile à afficher une liste d'application): // Je passe sur la déclarations des diverses variables utilisées dans le code, et d'une partie de l'initialisation Appli est un ST_Application gApplications = RecupApplications(gInfoEtb.stEtablissement.sCode)
// Création des groupes POUR TOUT Groupe DE gApplications.tabListeGroupe nNumAppli = 0 nIndice++ ONG_Groupe[nIndice + 1]..Libellé = Groupe.sNom ONG_Groupe[nIndice + 1]..Visible = Vrai // Ensuite je dois ajouter les applications dans la zone répétée POUR TOUT Appli DE Groupe.tabListeApplication nNumAppli++ ZoneRépétéeAjouteLigne("ZR_TabListeApplication" + nIndice,Appli.sDescription,Appli.sCode,Appli.sNom,Appli.sFenetrePrincipale,Appli.sIcone) FIN FIN
Et la description des types de données dans le WebService: ST_Rapport est une Structure bOK est un booléen nNiveau est un entier sMessage est une chaîne FIN
ST_Application est une Structure sCode est une chaîne sNom est une chaîne sDescription est une chaîne sIcone est une chaîne sFenetrePrincipale est une chaîne FIN
ST_Groupe est une Structure sCode est une chaîne sNom est une chaîne tabListeApplication est un tableau de ST_Application FIN
ST_RetourRecupApplications est une Structure stRapport est un ST_Rapport tabListeGroupe est un tableau de ST_Groupe FIN
Je n'ai rien fait de bien sorcier ici... J'ai déclaré des structures dans le Webservice, et à l'import de celui-ci dans un projet les structures sont directement utilisables, y compris les tableaux.
C'est fait avec les versions 20 de Windev et Windev Mobile, mais je pense que ça fonctionne aussi avec la version 19.
Frédéric. "Sam" a écrit dans le message de groupe de discussion : 2015066322d7a5dc146197e7e52edc0f374a@news.pcsoft.fr...
Bonjour Frédéric,
Je réveille un ancien sujet car je n'arrive pas à me sortir de l'importation d'un tableau renvoyé par un Webservice
Dans ton dernier mail tu indiques :
"Pour la partie Windev il suffit d'importer le Webservice, de déclarer 2 variables, une de type STTabVerifEncoursSku à passer en paramètre, et une autre de type STTabVerifEncoursSkuReponse pour récupérer le résultat, puis d'appeler la méthode comme une procédure classique."
Pourrais-tu donner un exemple de code ?
Merci d'avance
Sam |
| |
| |
| | | |
|
| | |
| |
Posté le 02 octobre 2015 - 17:36 |
Merci Frédéric,
Donc tu ne crée plus les 2 variables dont tu parlais coté client ? |
| |
| |
| | | |
|
| | |
| |
Posté le 02 octobre 2015 - 17:54 |
Si, c'est en première ligne du code: Appli est un ST_Application Mais effectivement j'en ai oublié une dans mon copier/coller: Groupe est un ST_Groupe
Mais le principe est là: Dans le projet WebService, tu déclares des structures qui seront utilisées pour déclarer soit les paramètres des méthodes, soit leur retour. Dans le projet "client", dans lequel tu importes le WebService, tu déclares tes variables en utilisant ces structures, et tu peux appeler les méthodes du WebServices comme si elles étaient déclarées dans une collection de procédure. Bref une fois le WebService importé, c'est complètement transparent.
Par contre j'ai toujours "encapsulé" mes tableaux dans des structures, pour éviter les éventuelles problèmes, et surtout car je trouve ça plus propre.
Si vraiment tu n'y arrives pas, le mieux serait de nous montrer ton code, en nous expliquant ce qui ne fonctionne pas.
Frédéric. "Sam" a écrit dans le message de groupe de discussion : 2015ae9bcf7f54efdf6087fd151e08149ac9@news.pcsoft.fr...
Merci Frédéric,
Donc tu ne crée plus les 2 variables dont tu parlais coté client ? |
| |
| |
| | | |
|
| | |
| |
Posté le 03 octobre 2015 - 09:06 |
Bonjour Frédéric,
J’ai un peu avancé mais je suis encore bloqué coté client.
Voici mon code
COTE WS
ST_informationsProduit est une Structure designationCourte est une chaîne designationLongue est une chaîne grilleTailles est chaîne imageProduit est Buffer FIN
tab_infosProduitReponse est un tableau de ST_informationsProduit
st_infosProduitTemp est un ST_informationsProduit
PROCEDURE DE RECHERCHE
PROCEDURE AfficheInfosProduit(ReferenceProduit est chaîne)
HLitRecherche(Produits,ReferenceProduit,ReferenceProduit,hIdentique)
SI HTrouve(Produits) ALORS st_infosProduitTemp.designationCourte = Produits.DesignationcourteProduit st_infosProduitTemp.designationLongue = Produits.DesignationlongueProduit st_infosProduitTemp.grilleTailles = Produits.Tailles TableauAjoute(tab_infosProduitReponse,st_infosProduitTemp) RENVOYER tab_infosProduitReponse SINON RENVOYER Faux FIN
COTE CLIENT
// ici je déclare le tableau contenant la structure du WS Tab_ReponseProduit est un tableau de ST_informationsProduit
Après, je ne sais plus trop comment récupérer le résultat
Si je fais Tab_ReponseProduit = MonWebservices.AfficheInfosProduit(SAI_RechercheReference) Je récupère l’erreur suivante « Types incompatibles durant une affectation. »
Merci d’avance
Sam |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : +2 (2 votes) |
|
Posté le 03 octobre 2015 - 09:26 |
Bonjour Frédéric,
J’ai un peu avancé mais je suis encore bloqué coté client.
Voici mon code
COTE WS
ST_informationsProduit est une Structure designationCourte est une chaîne designationLongue est une chaîne grilleTailles est chaîne imageProduit est Buffer FIN
tab_infosProduitReponse est un tableau de ST_informationsProduit
st_infosProduitTemp est un ST_informationsProduit
PROCEDURE DE RECHERCHE
PROCEDURE AfficheInfosProduit(ReferenceProduit est chaîne)
HLitRecherche(Produits,ReferenceProduit,ReferenceProduit,hIdentique)
SI HTrouve(Produits) ALORS st_infosProduitTemp.designationCourte = Produits.DesignationcourteProduit st_infosProduitTemp.designationLongue = Produits.DesignationlongueProduit st_infosProduitTemp.grilleTailles = Produits.Tailles TableauAjoute(tab_infosProduitReponse,st_infosProduitTemp) RENVOYER tab_infosProduitReponse SINON RENVOYER Faux FIN
COTE CLIENT
// ici je déclare le tableau contenant la structure du WS Tab_ReponseProduit est un tableau de ST_informationsProduit
Après, je ne sais plus trop comment récupérer le résultat
Si je fais
Tab_ReponseProduit = MonWebservices.AfficheInfosProduit(SAI_RechercheReference) Je récupère l’erreur suivante
« Types incompatibles durant une affectation. »
Merci d’avance
Sam |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 135 messages Popularité : +8 (8 votes) |
|
Posté le 04 octobre 2015 - 07:31 |
Bonjour Sam,
Ta procédure retourne soit un booleen soit ton tableau. Ca peut expliquer ton problème. A la place, je retournerai systématiquement une structure qui contient ton tableau + un code d'erreur par exemple. De cette manière dans la partie 'client' tu récupères toujours une structure de ce type.
Exemple rapide : MonTableau est une structure tab_infosProduitReponse est un tableau de ST_informationsProduit CodeErreur est un entier FIN
Tu pourrais te contenter de retourner seulement le tableau vide en cas d'erreur mais la partie client n'aurai aucune info (ma requete retourne rien ou c'est une erreur ???)
-- Dominique DAUSSY http://www.serviceinfo76.com |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : +2 (2 votes) |
|
Posté le 04 octobre 2015 - 08:43 |
Bonjour Dominique,
Merci pour ta réponse.
Je me suis en effet rendu compte entre temps que le RENVOYER Faux n'avait pas de sens.
Mon code est donc devenu
HLitRecherche(Produits,ReferenceProduit,ReferenceProduit,hIdentique)
SI HTrouve(Produits) ALORS
st_infosProduitTemp.designationCourte = Produits.DesignationcourteProduit st_infosProduitTemp.designationLongue = Produits.DesignationlongueProduit st_infosProduitTemp.grilleTailles = Produits.Tailles
FIN
TableauAjoute(tab_infosProduitReponse,st_infosProduitTemp)
Malgré cela, j'ai toujours le message d'erreur « Types incompatibles durant une affectation. »
Cordialement
Sam |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 298 messages Popularité : +20 (72 votes) |
|
Posté le 04 octobre 2015 - 21:09 |
Attention,
En retour de Webservice, si le retour est un tableau seul, pour je ne sait quelle raison rien n'est renvoyer
J'ai donc l'habitude en renvoi de WS de toujours renvoyer une structure unique. qui contient au moins une variable
par exemple
STMesDonnes est une structure madonnee1 est une chaîne madonnee2 est une chaîne madonnee3 est une chaîne madonnee4 est une chaîne FIN
STMonretour est une structure Validation est un boleen TabMesDonnees est un tableau de STMesDonnes FIN
-- Bertin CARRIERE Consultant & Formateur bertin.carriere@gmail.com http://www.zen-project.be http://www.linkedin.com/in/bertincarriere Belgique +32(0)2/318.02.67 France +33(0)3/66.722.542 Espagne +34.5/12.702.266
Membre de http://www.be-dev.be |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : +2 (2 votes) |
|
Posté le 05 octobre 2015 - 11:55 |
Bonjour et merci pour ces retours
Je récupère bien dans le client le tableau renvoyé par le WS mais je n'arrive pas à récupérer les infos de ce tableau
Sam |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 298 messages Popularité : +20 (72 votes) |
|
Posté le 05 octobre 2015 - 13:27 |
| |
| |
| | | |
|
| | |
| |
Posté le 05 octobre 2015 - 14:29 |
Tu peux nous montrer ton code ? Car dans celui que j'ai posté il y a bien un parcours du tableau récupéré via mon WebService...
Frédéric.
"SAM" a écrit dans le message de groupe de discussion : 2015da4e013bb6f8802a6a0cda4be2f89a30@news.pcsoft.fr...
Bonjour et merci pour ces retours
Je récupère bien dans le client le tableau renvoyé par le WS mais je n'arrive pas à récupérer les infos de ce tableau
Sam |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : +2 (2 votes) |
|
Posté le 05 octobre 2015 - 16:27 |
C'est bon, j'ai réussi à m"en sortir.
Bizarrement, le type "response" du ws n'apparaissait pas sur le client.
Je m'explique.
Si coté WS on a une procédure qui s'appelle PROC_A et qu'on fait un RENVOYER TabResultat.
On est sensé (si j'ai bien tout compris) récupérer coté client un type qui se nomme PROC_Aresponse dans lequel on trouve PROC_Aresult. C'est précisément dans PROC_Aresult qu'on récupère le résultat du WS.
Et bien, ce type response n'apparaissait pas coté client.
Après plusieurs tests de passage des structures en déclarations globales et autres coté WS, le type response est apparu coté client après import du WS.
Je ne sais pas si c'est clair... en tout cas je récupère bien mon tableau de résultat coté client.
Merci en tout cas pour l'aide à ceux qui ont répondu à ma problématique
Bon devs
Sam |
| |
| |
| | | |
|
| | |
| |
Posté le 05 octobre 2015 - 17:01 |
Non, rien ne dit qu'on récupère un PROC_AResponse. Si le type de TabResultat s'appelle ST_TOTO, on va récupérer une une variable de type ST_TOTO. Dans l'exemple que j'ai donné, je suis à l'origine des noms des structures utilisés dans les échanges. J'ai pris cette règle de nommage pour des raisons de lisibilité du code.
Il est clair que les définitions des structures sont déclarées dans l'init du projet du WbeService, pour être utilisables dans les projets clients.
Frédéric.
"SAM" a écrit dans le message de groupe de discussion : 2015df71c305c4686010824fd017ec970398@news.pcsoft.fr...
C'est bon, j'ai réussi à m"en sortir.
Bizarrement, le type "response" du ws n'apparaissait pas sur le client.
Je m'explique.
Si coté WS on a une procédure qui s'appelle PROC_A et qu'on fait un RENVOYER TabResultat.
On est sensé (si j'ai bien tout compris) récupérer coté client un type qui se nomme PROC_Aresponse dans lequel on trouve PROC_Aresult. C'est précisément dans PROC_Aresult qu'on récupère le résultat du WS.
Et bien, ce type response n'apparaissait pas coté client.
Après plusieurs tests de passage des structures en déclarations globales et autres coté WS, le type response est apparu coté client après import du WS.
Je ne sais pas si c'est clair... en tout cas je récupère bien mon tableau de résultat coté client.
Merci en tout cas pour l'aide à ceux qui ont répondu à ma problématique
Bon devs
Sam |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : +2 (2 votes) |
|
Posté le 05 octobre 2015 - 17:25 |
Alors je ne comprends pas pourquoi je récupère coté client ces infos (copie écran ci-après) que je n'ai pas créé dans le projet ... En tout ca je peux bien les utiliser. Si quelqu'un a une réponse ...
|
| |
| |
| | | |
|
| | |
| |
Posté le 21 juin 2017 - 18:21 |
Magnifique. Vous m'avez sauvé. Merci beaucoup |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|