PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Problème Récupération Flux XML (WebService SOAP)
Problème Récupération Flux XML (WebService SOAP)
Iniciado por Lionel H., 27,feb. 2019 12:16 - No hay respuesta
Miembro registrado
7 mensajes
Publicado el 27,febrero 2019 - 12:16
Bonjour à tous,
j'ai créé un webService SOAP qui contient 2 Procédures globales qui sont :
- PG_XML_IMPORT (issu des exemples PCsoft)
- PushData(flux est une chaine)

mon fournisseur m'envoi un flux par la procédure <PushData>

mon problème : je récupère ce flux mais je ne peux ni récupérer le contenu par fichier texte, ni récupérer les données.
Quand je le fait à partir d'un programme test dans windev (avec utilisation du fichier WSDL) ça fonctionne.

voici mes 2 procédures, ci-dessous.

Merci à tous de votre aide.
LH

======================
PROCÉDURE PushData(sFluxXML est une chaîne)
s_DOCXML est une chaîne="DOCXML"

sFichierXML est une chaîne = "c:\temp\PushData_"+DateSys()+"_"+HeureSys()+".xml"
sFluxEntrant est une chaîne = sFluxXML
sFluxReponse est une chaîne
bResFlux est un booléen = Faux

fSauveTexte(sFichierXML,sFluxEntrant)
QUAND EXCEPTION DANS
//ouverture du document
bResFlux = XMLDocument(s_DOCXML,sFluxEntrant)
SI bResFlux = Faux ALORS PI_FluxReponse("200")

//positionnement à la racine
XMLRacine(s_DOCXML)

//parcours du document
PG_XML_IMPORT(s_DOCXML)

//fin du document
XMLTermine(s_DOCXML)

PI_FluxReponse("OK")
FAIRE
bResFlux = Faux
PI_FluxReponse("100")
FIN
RENVOYER sFluxReponse


PROCÉDURE INTERNE PI_FluxReponse(sErreurCode)
SI PAS bResFlux ALORS
sFluxReponse=[
<success>false</success>
<errorMessage>%1</errorMessage>
]
sFluxReponse = ChaîneConstruit(sFluxReponse,sErreurCode)

SINON
sFluxReponse=[
<success>true</success>
<errorMessage>%1</errorMessage>
]
sFluxReponse = ChaîneConstruit(sFluxReponse,sErreurCode)
FIN
FIN

====================
PROCÉDURE PRIVÉE PG_XML_IMPORT(sDocXML, nNiveau=0)
nPositionXML est un entier
sElement est une chaîne
bAttribut est un booléen
bBalise est un booléen
sData est une chaîne

// Parcours de tous les éléments
XMLPremier(sDocXML)
TANTQUE PAS XMLEnDehors(sDocXML)
// Récupère les données de l'élément
sData = XMLDonnée(sDocXML)

//Type d'élément
bAttribut = Faux
bBalise = Faux
SELON XMLTypeElement(sDocXML)
CAS XMLAttribut // Attribut affiché entre côtes
sElement = XMLNomElément(sDocXML)
bAttribut = Vrai
CAS XMLBalise // Attribut affiché entre < et >
sElement = XMLNomElément(sDocXML)
bBalise = Vrai
AUTRE CAS // dont CAS XMLErreur
sElement = "Erreur XML"
FIN

// Il y a des données pour cet élément ?
SI ChaîneFormate(sData, ccSansPonctuationNiEspace + ccSansEspace + ccSansAccent) = "" ALORS
// Pas de données
SINON
// OK données
SELON sElement
CAS "groupName"
goXmlImport <- allouer un cXmlImport
goXmlImport.PL_Statut_Changer(StAjouter)
goXmlImport:m_GroupName = sData
CAS "key"
goXmlImport:m_Key = sData
CAS "value"
goXmlImport:m_Value = sData
goXmlImport.PL_Data_Enregistrer(goErreur)
//CAS "customerID"
// bCustomerID = vrai
//si GetGUIDid(sData) = "ACTIF" alors bCustomerID = vrai
AUTRE CAS
FIN
FIN

// Il y a des balises ou des attributs pour cet élément ?
SI XMLFilsExiste(sDocXML, XMLBalise + XMLAttribut) = Vrai ALORS
// Sauve la position actuelle
nPositionXML = XMLSauvePosition(sDocXML)
// Se positionne sur le fils
XMLFils(sDocXML)
// Parcourt le fils
PG_XML_IMPORT(sDocXML, nNiveau+1)
// Se repositionne comme avant le positionnement sur le fils
XMLRetourPosition(sDocXML, nPositionXML, XMLRPDéfaut)
FIN

// Suite du XML
XMLSuivant(sDocXML)
FIN

--
LH