PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → SOAP et SAGE X3
SOAP et SAGE X3
Débuté par Bertrand, 09 juin 2015 10:33 - 9 réponses
Membre enregistré
2 messages
Posté le 09 juin 2015 - 10:33
Bonjour à tous,

Est-ce que quelqu'un peut me donner des informations sur l'utilisation d'un Web Service SOAP avec le logiciel SAGE X3. L'importation du web service se passe bien par contre je n'arrive qu'à récupérer le début de la réponse

Je vous joins la déclaration du service.

D'avance merci




Posté le 10 février 2016 - 21:14
Le sujet date un peu mais n'hésitez pas à me contacter si votre problème subsiste.

Cordialement.
Portable 06 10 66 32 84
Posté le 15 février 2018 - 11:58
Une piste qui fonctionne bien dans mon code.
Remplacer les variable %% par vos données.

Procedure Article(sAbsolu est une chaîne)

wsResponse est une chaîne
contaxt est un CAdxCallContext
contaxt.codeUser = "%USer%"
contaxt.password = "%Mot de passe%"
contaxt.poolAlias = "%Alias%"
contaxt.codeLang = "FRA"
contaxt.requestConfig = "adxwss.trace.on=off&adxwss.trace.size16384&adonix.trace.on=off&adonix.trace.level=3&adonix.trace.size=8&adxwss.optreturn=XML&prefix.id=TSVC.47"

SOAPAjouteEntête(CAdxWebServiceXmlCCService,contaxt)

Param est un ArrayOfCAdxParamKeyValue
Param.CAdxParamKeyValue.key = "ITMREF"
Param.CAdxParamKeyValue.value = sAbsolu

byBuffer est un Buffer = SOAPPrepare(query, contaxt,"ZART",Param,10)
SI PAS SOAPExécuteXML("http://%AdresseServeur%:28880/adxwsvc/services/CAdxWebServiceXmlCC", byBuffer) ALORS

Info ("Pas d'accé au WebService")
RENVOYER ""

FIN
wsResponse = SOAPDonneRésultat(SOAPRésultatXML)
wsResponse = ExtraitChaîne(wsResponse,2,"<resultXml xsi:type=""xsd:string"">")
wsResponse = XMLVersTexte(ExtraitChaîne(wsResponse,1,"</resultXml>"))

RENVOYER wsResponse
Posté le 19 février 2019 - 10:22
Bonjour,

j'ai repris ce code avec Windev 24 et X3 version U9.
J'accède bien au webService, mais je récupère dans wsResponse, le message suivant :

<html>
<head><title>Redirecting...</title></head>
<body><a href="/auth/login/page">click here to continue</a></body>
</html>

L'authentification semble avoir changé. j'ai donc remplacé le code suivant :

contaxt est un CAdxCallContext
contaxt.codeUser = "%USer%"
contaxt.password = "%Mot de passe%"
contaxt.poolAlias = "%Alias%"
contaxt.codeLang = "FRA"
contaxt.requestConfig = "adxwss.trace.on=off&adxwss.trace.size16384&adonix.trace.on=off&adonix.trace.level=3&adonix.trace.size=8&adxwss.optreturn=XML&prefix.id=TSVC.47"

par

CAdxWebServiceXmlCCService.Utilisateur = "%User%"
CAdxWebServiceXmlCCService.MotDePasse = "%Mot de passe%"
CAdxWebServiceXmlCCService.Authentification = auBasic

contaxt est un CAdxCallContext
contaxt.poolAlias = "%Alias%"
contaxt.codeLang = "FRA"
contaxt.requestConfig = "adxwss.trace.on=off&adxwss.trace.size16384&adonix.trace.on=off&adonix.trace.level=3&adonix.trace.size=8&adxwss.optreturn=XML&prefix.id=TSVC.47"



Toutes mes valeurs en parametre fonctionnent très bien depuis une autre application tiers, mais pas dans Windev.

Quelqu'un peut-il me dire ce qui manque où ce qu'il faudrait changer ?
Merci
Posté le 19 février 2019 - 12:58
Bonjour,
Une suggestion :
Intercepter le contenu de la requête Http envoyée, dans le cas :
- De l'application tiers qui fonctionne.
- Du lanceur de test Windev WDTst.exe
Avec un logiciel gratuit du genre socketSniff, SOAPUI.
Comparer les contenus des deux requêtes.
Essayer d'obtenir sous Windev la même requête que sous le logiciel tiers.
Au pire, faire le XML de requête SOAP soit même, sans les fonctions SOAPAjouteEnTete() et SOAPPrepare().
Si rien ne marche revenir à la fonction HTTPRequete() au lieu de SOAPExecuteXML()
Penser au paramétrage de HTTP.IgnoreErreur qui fonctionne même devant une requête SOAP qui est en fait un type particulier de requête HTTP.
Voir https://doc.pcsoft.fr/fr-FR/?3043007&name=HTTPRequete
Bien cordialement.
Posté le 20 février 2019 - 10:46
Bonjour,

merci pour votre réponse

Pour la première partie on l'a déjà fait sans succès :
La requete SOAP générée par SOAPPrepare() fonctionne bien dans SOAPUI, et celle récupérée de SOAP de fonctionne pas dans Windev.

Je suis donc passé par HTTPRequête(), la requête est bien lancée mais elle me retourne le message suivant :
{"$diagnoses":[{"$severity":"error","$message":"Header 'soapAction' is missing."}]}

Cdlt,
Posté le 24 septembre 2021 - 12:57
Exemple de webservice X3 en V12 qui fonctionne :
L'authentification basic ne fonctionnant pas dans notre cas avec les fonction SOAP windev, nous utilisons une requete HTTP :

byBuffer est une chaîne = [
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wss="http://www.adonix.com/WSS" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<soapenv:Header/>
<soapenv:Body>
<wss:read soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<callContext xsi:type="wss:CAdxCallContext">
<codeLang xsi:type="xsd:string">FRA</codeLang>
<poolAlias xsi:type="xsd:string">SEED</poolAlias>
<poolId xsi:type="xsd:string"></poolId>
<requestConfig xsi:type="xsd:string"></requestConfig>
</callContext>
<publicName xsi:type="xsd:string">ZWSGESSOH1</publicName>
<objectKeys xsi:type="wss:ArrayOfCAdxParamKeyValue" soapenc:arrayType="wss:CAdxParamKeyValue[]">
<ArrayOfCAdxParamKeyValue>
<key>SOHNUM</key>
<value>SOWFR0110005</value>
</ArrayOfCAdxParamKeyValue>
</objectKeys>
</wss:read>
</soapenv:Body>
</soapenv:Envelope>
]
cMaRequête est un httpRequête
cMaRequête.URL = "http://srvsagetest.xxxxx.priv:8124/soap-generic/syracuse/collaboration/syracuse/CAdxWebServiceXmlCC"
cMaRequête.Entête["SOAPAction"]="''"
cMaRequête.Entête["Authorization"]="Basic VOTRELOGINMOTDEPASSEENCODE"

cMaRequête.Méthode=httpPost
cMaRequête.Contenu=byBuffer

cMaRéponse est un httpRéponse = HTTPEnvoie(cMaRequête)
SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
SINON
Info(HTTPDonneRésultat())
Info(cMaRéponse.Contenu)
FIN
Posté le 26 novembre 2021 - 10:43
Bonjour,

Merci pour votre exemple utile

petite question pour la partie : Authorization

cMaRequête.Entête["Authorization"]="Basic VOTRELOGINMOTDEPASSEENCODE"

Exemple : Login : TEST / Mot de passe : MDPTEST

Comment remplir

cMaRequête.Entête["Authorization"] = ?

merci à vous
Posté le 24 septembre 2022 - 23:16
Bonsoir
Est ce que je peux savoir comment vous avez importé le webservice dans windev ?
Avec wd25 ça ne marche pas.
Posté le 25 septembre 2022 - 10:13
bonjour svp comment vous faites pour importer le webservice x3 v12 ?