PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Import WSDL buggué
Import WSDL buggué
Débuté par rbruyere, 25 mar. 2024 15:06 - 7 réponses
Membre enregistré
6 messages
Posté le 25 mars 2024 - 15:06
Bonjour,

J'utilise l'API d'un fournisseur. Elle est très bien documentée et j'utilise un WSDL pour avoir accès aux types et aux fonctions. Tout se passe bien jusqu'à l'étape 2 dans laquelle je dois envoyer un ArrayOfIncoiceRequest. Le problème est que le dans la description du webservice importé, je vois que Windev considère que ArrayOfInvoiceRequest ne peut contenir qu'une seule facture (image 1) alors que c'est évidemment faux. Quand je vais voir sur un éditeur de WSDL en ligne, il me dit en effet que l'ArrayOfInvoiceRequest peut contenir de 0 à unbound factures (image 2)










Dans la documentation, il y a un exemple en C# dans lequel il font juste une Liste d'InvoiceRequest qu'ils castent avec ToArray et le mettent dans la structure (image 3) mais cela ne fonctionne pas en Windev (images 4 et 5) avec les méthodes que j'ai essayé.













Auriez vous une idée de comment contourner le problème ? J'ai pensé à modifier la description WSDL pour qu'elle fonctionne avec Windev mais je en sais pas si cela est faisable. Ou alors à tout écrire en XML pour envoyer les requêtes en XML mais ça serait beaucoup de travail si une solution simple existe. Est-ce que je rate quelque chose d'évident ?

Merci pour votre aide et bonne journée !
Membre enregistré
950 messages
Popularité : +53 (63 votes)
Posté le 25 mars 2024 - 15:26
Bonjour,

Montre nous ton code WL stp

Ndrj
Membre enregistré
6 messages
Posté le 25 mars 2024 - 16:52
Voilà mon code, c'est vraiment basique c'est pourquoi j'ai l'impression que ça se passe au niveau de l'import du WSDL. J'ai déjà fait d'autres requêtes et toutes les variables simples fonctionnent sans soucis. C'est donc la dernière ligne (68) qui part en erreur avec les messages que j'ai mis au dessus.



Membre enregistré
950 messages
Popularité : +53 (63 votes)
Posté le 25 mars 2024 - 17:14
Au lieu de faire tabFactureOuverts.Ajoute(NouvFacture), tu peux faire ajoute(Requete2.invoiceListe,NouveFacture) ?

Il faut que tu déclare requete2 est un RequestStep2 avant ta boucle Tantque par contre
Membre enregistré
6 messages
Posté le 26 mars 2024 - 08:33
Je vidais mon tableau plus bas mais en effet c'est plus propre de recréer un nouveau tableau (pas certains que ce soit plus rapide ni plus économe en mémoire en fait)

Mais cela ne résout pas le problème, il me dit toujours que l'élément InvoicesList n'est pas indicé.




Membre enregistré
950 messages
Popularité : +53 (63 votes)
Posté le 26 mars 2024 - 09:09
Bonjour,

Si tu fais
Ajoute(Requete2.invoiceList.InvoiceRequest,NouveFacture)

Ca donne quoi ?
Ndrj
Posté le 26 mars 2024 - 09:35
rbruyere avait énoncé :
Bonjour,

J'utilise l'API d'un fournisseur. Elle est très bien documentée et j'utilise
un WSDL pour avoir accès aux types et aux fonctions. Tout se passe bien
jusqu'à l'étape 2 dans laquelle je dois envoyer un ArrayOfIncoiceRequest. Le
problème est que le dans la description du webservice importé, je vois que
Windev considère que ArrayOfInvoiceRequest ne peut contenir qu'une seule
facture (image 1) alors que c'est évidemment faux. Quand je vais voir sur un
éditeur de WSDL en ligne, il me dit en effet que l'ArrayOfInvoiceRequest peut
contenir de 0 à unbound factures (image 2)










Dans la documentation, il y a un exemple en C# dans lequel il font juste une
Liste d'InvoiceRequest qu'ils castent avec ToArray et le mettent dans la
structure (image 3) mais cela ne fonctionne pas en Windev (images 4 et 5)
avec les méthodes que j'ai essayé.













Auriez vous une idée de comment contourner le problème ? J'ai pensé à
modifier la description WSDL pour qu'elle fonctionne avec Windev mais je en
sais pas si cela est faisable. Ou alors à tout écrire en XML pour envoyer les
requêtes en XML mais ça serait beaucoup de travail si une solution simple
existe. Est-ce que je rate quelque chose d'évident ?

Merci pour votre aide et bonne journée !


bonjour,

est ce que cela fonctionne comme ceci ?

requete2.InvoicesList[1].InvoiceRequest.InvoiceNumber = xxxx
....
...
requete2.InvoicesList[2].InvoiceRequest.InvoiceNumber = xxxx
....
...

--
Cordialement JeAn-PhI
Membre enregistré
6 messages
Posté le 26 mars 2024 - 10:29
Ndrj a écrit :
Bonjour,

Si tu fais
Ajoute(Requete2.invoiceList.InvoiceRequest,NouveFacture)

Ca donne quoi ?
Ndrj


En effet comme cela ça fonctionne ! Merci beaucoup pour l'aide et désolé de vous avoir dérangé pour un problème si bête.

Cordialement, rbruyere