30 janvier 2013
publié par 
L'importation d'un webservice dans un projet WINDEV, WEBDEV ou WINDEV Mobile permet son utilisation, sa consommation, par un appel direct des fonctions en WLangage :

 

Ainsi il n'est pas nécessaire de construire un source XML complet correspondant à la requête attendue par le webservice. Cela reste vrai, même lorsque les spécifications du webservice imposent pour certaines de ses fonctions l'ajout d'un paramètre d'entête spécifique. En effet, la fonction SOAPAjouteEntête s'applique à l'utilisation d'un webservice importé, avec en plus un nouvelle syntaxe en version 18 qui utilise directement les types inclus dans le webservice. Voici un exemple de requête attendue par un webservice pour une fonction "FonctionDémo" nécessitant un entête une identification par un paramètre " UserCredentials" (grâce au WLangage et l'importation d'un webservice, on ne voit généralement jamais un tel code !) :

 

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header><ns1:UserCredentials xmlns:ns1="http://ws.adresse/"><ns1:username>MonLogin</ns1:username><ns1:password>MonMotDePasse</ns1:password></ns1:UserCredentials></SOAP-ENV:Header><SOAP-ENV:Body><ns1:FonctionDémo xmlns:ns1="http://ws.adresse/"><ns1:Param1>Valeur</ns1:Param1><ns1:Param2>Valeur2</ns1:Param2></ns1:FonctionDémo></SOAP-ENV:Body></SOAP-ENV:Envelope>

 

Voici l'appel de cette fonction depuis le WLangage, une fois que le webservice est importé à partir de son WSDL :

 

wsResponse est un getFonctionDémoResponse

Utilisateur est un UserCredentials
Utilisateur.username = "MonLogin"
Utilisateur.password = "MonMotDePasse"

SOAPAjouteEntête(WSServiceImporté,Utilisateur)

wsParam est un getFonctionDémo
wsParam.Param1 = "Valeur1"
wsParam.Param2 = "Valeur2"
wsResponse = WSServiceImporté.FonctionDémo(wsParam)

 

Astuces :
  • si plusieurs fonctions du webservice utilisent l'entête, un seul appel de la fonction SOAPAjouteEntête est nécessaire.
  • en cas de besoin spécifique, il est toujours possible de voir le code de la requête complète, grâce à la fonction SOAPPrépare
VoirSource est un Buffer = SOAPPrépare(FonctionDémo,wsParam)
VersPressePapier(VoirSource)
Info(VoirSource)
Mise à jour 18/4/2019 : SOAPPrépare reste opérationnelle, mais à partir de la version 24 la fonction SOAPVersHTTP doit être privilégier. Elle permet d'obtenir une variable de type httpRequete déjà initialisée avec tous les paramètres d'appel du webservice. La personnalisation est bien plus simple.



< Retour