| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 06 mai 2021 - 11:40 |
Bonjour à tous, on me demande d'envoyer par SOAP via un web service un message XML. Dans un premier temps, j'ai crée le fichier XML qui est ok, cela pour vérifier déjà le bon format du fichier et des données à l'intérieur. Ensuite on m'a donné ces paramètres (ci dessous) pour l'envoi, mais j'avoues ne pas maitriser le SOAP et Webservices. ils me disent qu'il ne faut pas envoyer le fichier XML en lui même mais dans le message avec l'url voici ce que l'on m'a donné : Voici les accès : L’URL à attaquer est : https://SRVxxx-//societe/Codeunit/WS_IN_Vente User ID : xxx Mot de passe : xxxx Egalement joins un fichier WSDL Le web service est : S012_Creation_Commande
Comment faut il faire avec tout ces paramètres ? il faut utiliser SOAPExecute ? SOAPExecuteXML ? ou dois je paramétrer tout ce que l'on m'envoie ? Merci d'avance pour votre aide |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 06 mai 2021 - 16:23 |
pour compléter ma demande, du coup j'ai "importer un web service" et j'ai du coup dans le projet la description , mais je ne sais comment envoyer le tout, par quel process ? quelqu'un peux m'aider ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 06 mai 2021 - 21:42 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 07 mai 2021 - 17:13 |
J'ai avancé un peu, avec les paramètres donnés, j'ai "importé" le web service avec l'url ou bien le fichier wsdl, à priori c'est bon. ce WS est assez complexe, j'avais écrit l'équivalent dans une chaine, ici : DocXML Ensuite que dois je lancer ? ci joint une image avec un SoapExecute (image jointe surligné en jaune) après cette instruction, je n'ai pas de message d'erreur mais il ne se passe rien ... je ne sais, si je procède de la bonne manière. quelqu'un peux m'aider ?
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 913 messages Popularité : +227 (347 votes) |
|
Posté le 08 mai 2021 - 13:33 |
Bonjour, Il faut considérer le WS comme une collection de procédure. Tout est expliqué dans la doc
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 10 mai 2021 - 08:35 |
bonjour, merci pour ta réponse mais je ne vois pas comment je dois l'appeler ? avec executesoap ? executesoapxml ou autrement ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 913 messages Popularité : +227 (347 votes) |
|
Posté le 10 mai 2021 - 09:49 |
De la même manière qu'une procédure. Une fois de plus, tout est expliqué dans la doc
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 10 mai 2021 - 11:12 |
j'ai bien sur regarder la doc, je ne maitrise pas trop les WS, je ne comprends pas la différence entre executesoap et executesoapxml, tu peux m'éclairer s'il te plait ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 403 messages Popularité : +13 (13 votes) |
|
Posté le 10 mai 2021 - 16:28 |
Bonjour,
Les fonctions executesoap() et executesoapxml() sont des fonctions "bas-niveau", que l'on vous déconseille d'utiliser surtout si vous êtes novices avec les webservices. Comme l'a indiqué Voroltinquo, si vous avez importé le webservice dans votre projet il se comporte maintenant comme une collection de procédure. Cela veut donc dire que vous pouvez écrire un code dans ce genre:
maCommande est un S012_Creation_Commande monResultat est un S012_Creation_Commande_Result
maCommande.Numéro = 183432089 maCommande.Client = "Jean Dupont"
monResultat = WS_IN_Vente.S012_Creation_Commande(maCommande)
SI monResultat.success = Vrai ALORS Info("Commande créée!") FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 10 mai 2021 - 17:05 |
Merci beaucoup pour ta réponse, j'ai donc codé ça en mettant une trace avant et après cette ligne : monResultat = WS_IN_Vente.S012_Creation_Commande(maCommande) avec la complétion du retour j'ai donc "tracé" la variable de retour, héla chaine vide en résultat je n'ai aucun message d'erreur, rien ne plante mais j'ai une chaine vide en retour. est ce que je demande au fournisseur du WS le pourquoi ? ou est ce moi ? Sachant que lorsqu'il ma donné tous les éléments pour importer le WS, il m'a donné un code utilisateur et un mot de passe pour accéder au WS. le fait d'importer le WS suffit ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 403 messages Popularité : +13 (13 votes) |
|
Posté le 10 mai 2021 - 18:08 |
Si vous tentez de tracer directement la variable (avec un Trace(monResultat) ) et que la variable est une structure, il y a peu de chance que la trace affiche quelque chose de correct. Si "S012_Creation_Commande_Result" est une structure (comme ça l'est souvent avec SOAP) il est possible d'avoir une trace un peu plus parlante en la transformant en JSON : Trace(VariantVersJSON(monResultat)).
Sinon l'idéal est encore de mettre un point d'arrêt (ou l'instruction équivalente : STOP) pour arrêter l'exécution et voir directement dans l'IDE ce que contient monResultat.
Enfin il peut être bon de vérifier qu'il n'y a pas eu d'erreur de plus bas niveau, typiquement la trame HTTP ou autre avec un code générique du genre
// Reprise du code précédent monResultat = WS_IN_Vente.S012_Creation_Commande(maCommande)
// Vérification d'erreur SI ErreurDétectée ALORS Trace("Erreur Détectée", ErreurInfo(errComplet)) FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 10 mai 2021 - 18:18 |
merci je vais tester ça... Cependant je me pose toujours la question par rapport au code que tu m'as donné, ou dois-je rentrer l'url le code utilisateur et mot de passe ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 10 mai 2021 - 18:29 |
J'ai un message d'erreur de certificat, alors que le fournisseur me garanti qu'il est bien installé, voici la trace dans un fichier log (erreurdetectee): code:-----------------------------
TexteXML est une S012_Creation_Commande ReponseXML est une S012_Creation_Commande_Result
fEcritLigne(FichierLog,"[" + DateVersChaîne(DateSys()) + " " + HeureVersChaîne(HeureSys()) + "] " + "Avant envoi ") ReponseXML = WS_IN_Vente.S012_Creation_Commande(TexteXML) SI ErreurDétectée ALORS fEcritLigne(FichierLog,"[" + DateVersChaîne(DateSys()) + " " + HeureVersChaîne(HeureSys()) + "] " + "Erreur : " + ErreurInfo(errComplet)) SINON fEcritLigne(FichierLog,"[" + DateVersChaîne(DateSys()) + " " + HeureVersChaîne(HeureSys()) + "] " + "Retour1: " + ReponseXML.wSReturnError.Header.Success) fEcritLigne(FichierLog,"[" + DateVersChaîne(DateSys()) + " " + HeureVersChaîne(HeureSys()) + "] " + "Retour2: " + VariantVersJSON(ReponseXML.wSReturnError.Header.Success)) FIN
trace:------------------------------ 10/05/2021 18:23:32:51] Erreur : Appel WL : Traitement de 'Procédure globale ExportBC' (COL_ProcéduresGlobales.ExportBC), ligne 345
Que s'est-il passé ? Alerte de sécurité : le nom sur le certificat de sécurité est incorrect ou ne correspond pas au site demandé.
Code erreur : 100139 Niveau : erreur non fatale
Code d'erreur système : 12038
Module : 'wd260com64.dll (01F260089p - 26.0.264.0) Informations supplémentaires : EIT_PILEWL : Procédure globale ExportBC (COL_ProcéduresGlobales.ExportBC), ligne 345 Initialisation de SynchroPrimusVersTablettes (), ligne 52 EIT_DATEHEURE : 10/05/2021 18:23:32 EIT_TYPE_WDFILE : <7> EIT_IDCODE : <458752> |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 480 messages Popularité : +20 (20 votes) |
|
Posté le 10 mai 2021 - 22:20 |
LC a écrit :
merci je vais tester ça... Cependant je me pose toujours la question par rapport au code que tu m'as donné, ou dois-je rentrer l'url le code utilisateur et mot de passe ? La doc, toujours la doc ...
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 10 mai 2021 - 23:10 |
Effectivement la doc et toujours la doc .. j'ai effectivement trouvé tout ce qui est identification. Merci encore à tous de m'avoir aidé. j'ai encore un petit problème : mon web service possède des méthodes je dirais (entête de commande) et des lignes détail (lignes de commandes) dans l'image jointe il faut donc que je créé plusieurs fois la méthode "line" j'ai bien affecté les valeurs "header", j'ai fais une boucle pour lire toutes les lignes détail mais en affectant les balises "lines" et ses enfants, et bien c'est la dernière ligne qui est renseignée, comment écrire l'affectation des balises dans une boucle ?
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 913 messages Popularité : +227 (347 votes) |
|
Posté le 11 mai 2021 - 05:51 |
BOUCLER tant qu'il reste des donner à lire -lire les données nécessaires à la ligne -créer la ligne
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 11 mai 2021 - 08:42 |
Merci, oui une boucle ça c'est bon je sais faire, mais comment j'affecte les variables de mon WS si j'exécute le code ci dessous, seule la dernière ligne de ma requête est prise en compte dans mon WS ce qui me parait normal vu l'affectation, comment dois je remplir mon WS en "ajout" pour avoir plusieurs "line" POUR TOUT MaRequete WS.Heaser.line.Line_LinesNo = MaVariable FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 403 messages Popularité : +13 (13 votes) |
|
Posté le 11 mai 2021 - 09:11 |
Bonjour,
"Normalement", Line devrait être un tableau auquel vous ajoutez des données avec un Ajoute()
POUR TOUT MaRequete tmpLine est une Line tmpLine.Line_No = 1 tmpLine.Line_Qty = MaRequete.Quantite Ajoute(maCommande.Line, tmpLine) FIN
Cependant ici il y a l'air d'avoir un souci, le membre "Line" n'a pas l'air d'être un tableau chez vous (il me semble que l'icône devrait être différente), et le nom de la variable est au singulier plutôt qu'être au pluriel "Lines", ce qu'on voit généralement quand on décrit un tableau. Il faudrait peut-être se rapprocher du fournisseur du webservice pour qu'il vérifie avec vous. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 11 mai 2021 - 10:17 |
Merci beaucoup encore pour votre aide, j'ai donc demandé au fournisseur du WS et il m'a répondu : "Line est une variable « unbounded » c’est à dire que vous pouvez la répéter autant de fois que vous voulez. Il suffit de répéter le bloc Line pour créer plusieurs lignes"
je vais donc faire comme vous me l'avez indiqué, je pense que ça ira. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 11 mai 2021 - 10:34 |
Heu... encore besoin d'aide, je déclare comment la ligne de ton code : tmpLine est une Line line est inconnue... et je ne peux pas écrire ça : tmpline est une S012_Creation_Commande.wSCommandeIN.Header.Line |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 11 mai 2021 - 12:11 |
Sur les 2 images jointes, la structure du Webservice je ne sais pas comment déclarer un tableau de "line" c'est un bon de commande, je dois faire plusieurs lignes de la balise "line"
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 913 messages Popularité : +227 (347 votes) |
|
Posté le 11 mai 2021 - 12:56 |
Bonjour, Line est un membre de Header, lui même un membre de wSCommandeIN. ce n'est pas Line qu'il faut déclarer mais la commande
MaCommande est wSwSCommandeIN
POUR TOUT... MaCommande.Header.Line.Line_LineNo++ ... FIN
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 11 mai 2021 - 13:38 |
Bonjour, oui mais j'ai aussi une entête que je dois remplir "qu'une" seule fois, je procède ainsi : TexteXML est une S012_Creation_Commande ReponseXML est une S012_Creation_Commande_Result TexteXML.wSCommandeIN.Header.Header_TypeOrdre = "X' TexteXML.wSCommandeIN.Header.Header_DocType = "Y" TexteXML.wSCommandeIN.Header.Line.Line_LineNo = "Z" TexteXML.wSCommandeIN.Header.Line.Line_Type = "A" ReponseXML = WS_IN_Vente.S012_Creation_Commande(TexteXML) les 2 lignes concernant le "line" ne conviennent pas du coup donc comment j'adapte le code que tu m'a donné ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 11 mai 2021 - 15:09 |
cette déclaration : MaCommande est wSCommandeIN ne passe pas à la compilation : wSCommandeIN inconnu |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 11 mai 2021 - 18:06 |
wSCommandeIN est aussi un membre, je ne vois pas comment je dois déclarer ma commande .. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 12 mai 2021 - 11:11 |
quelqu'un pourrait m'aider ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +0 (16 votes) |
|
Posté le 12 mai 2021 - 17:21 |
Bonjour à tous, bon, j'ai trouvé, malgré les apparence "line" ne doit pas être déclaré comme un tableau mais peut être indicé line[x] bon ... faut deviner si ça peux servir à d'autres personnes... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 messages |
|
Posté le 22 octobre 2021 - 13:47 |
Bonjour
je suis débutant en développement. J'ai créé un web service soap afin de consommer une application. Dans mon webservice j'ai créé deux procédures login et inscription . lors de la génération ; à la troisième étape il ne trouve pas les fichiers accessibles . voici mes programmes de test login et inscription . Vous trouveriez la capture image en pièce jointe SVP AIDER MOI
Cordialement GFT -----------------------------------------------------------------------------------------------
PROCÉDURE login(snomutilisateur est une chaîne, sMotDePasse est une chaîne )
SI HLitRecherchePremier(Utilisateur,IDUtilisation,sNomUtilisateur) ALORS
SI Utilisateur.MotDePasse=sMotDePasse ALORS RENVOYER Vrai SINON RENVOYER Faux
FIN SINON RENVOYER Faux
FIN
-------------------------------------------------------------------------------------------------------
PROCÉDURE Inscription(snomutilisateur est une chaîne, sMotDePasse est une chaîne , sAdresseEmail est une chaîne , stelephone est une chaîne )
Utilisateur.Nomutilisation=snomutilisateur Utilisateur.MotDePasse=sMotDePasse Utilisateur.AdresseEmail=sAdresseEmail Utilisateur.Telephone=stelephone SI HAjoute(Utilisateur) ALORS RENVOYER Vrai
SINON RENVOYER Faux
>FIN |
| |
| |
| | | |
|
| | |