PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 23 → [WM23] Android - Webservice ..Occurence sous structure
[WM23] Android - Webservice ..Occurence sous structure
Débuté par Claude, 11 aoû. 2018 15:51 - 3 réponses
Posté le 11 août 2018 - 15:51
Bonjour,
Je dois dans l'un de mes projets parcourir le résultat des requêtes à un webservice, pour traiter et stoker les données (sérialisation en local du résultat).
Avec une réponse du WS ne contenant qu'une structure simple et en utilisant WSReponse.RequX..occurence pour le parcours je ne rencontre pas de problème.
Mais celle que je dois maintenant traiter 'informationEcluseWS', contient dans sa définition une structure incluant une autre sous-structure 'infosSasWS'.

Extrait du WSDL :

<xs:complexType name="informationEcluseWS">
<xs:sequence minOccurs="0">
<xs:element name="horodatage" type="xs:dateTime"/>
<xs:element name="numeroEcluse" type="xs:int"/>
<xs:element name="nomEcluseFR" type="xs:string"/>
...
<xs:element name="marque1" type="xs:decimal"/>
<xs:element name="marque2" type="xs:decimal"/>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element maxOccurs="unbounded" minOccurs="0" name="sas" type="tns:infosSasWS"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
<xs:complexType name="infosSasWS">
<xs:sequence minOccurs="0">
<xs:element name="idSas" type="xs:int"/>
<xs:element name="nomSasFR" type="xs:string"/>
<xs:element name="nomSasDE" type="xs:string"/>
<xs:element name="nomSasEN" type="xs:string"/>
<xs:element name="nomSasNL" type="xs:string"/>
<xs:element name="dureeCycle" type="xs:int"/>
<xs:element name="largeurSas" type="xs:decimal"/>
<xs:element name="longueurSas" type="xs:decimal"/>
<xs:element name="idSIGFED" type="xs:string"/>
</xs:sequence>
</xs:complexType>


Donc dans un premier temps, je boucle sur le premier niveau des occurences de 'informationEcluse',
WS_getInformationsEclusesEtSas est un getInformationsEclusesEtSasRequest
WS_getInformationsEclusesEtSas.utilisateur.identifiant = xxxxxx
WS_getInformationsEclusesEtSas.utilisateur.motDePasse = yyyyyy
WS_getInformationsEclusesEtSasResponse est un getInformationsEclusesEtSasResponse

WS_getInformationsEclusesEtSasResponse = getInformationsEclusesEtSas(WS_getInformationsEclusesEtSas)

nNbOccurenceWSECL = WS_getInformationsEclusesEtSasResponse.informationEcluse..Occurrence
Trace("WS = getInformationsEclusesEtSas : "+nNbOccurenceWSECL +" Occurrence")
SI nNbOccurenceWSECL > 0 ALORS
TableauSupprimeTout(TABSTInformationsEclusesEtSas)
nIndiceTableau est un entier
nIndiceOccurence est un entier
POUR nIndiceOccurence = 1 _À_ nNbOccurenceWSECL
nIndiceTableau = TableauAjoute(TABSTInformationsEclusesEtSas)
SI nIndiceTableau<>-1 ALORS
TABSTInformationsEclusesEtSas[nIndiceTableau].WSDateHeureActualisation = gdhDH_Dernière_Actu_InformationsEclusesEtSas
// ...

nNbSousOccurenceSas = WS_getInformationsEclusesEtSasResponse.informationEcluse[nIndiceOccurence].sas..Occurrence // <= l'erreur se produit ici
Trace("Nb SousOccurrence SAS = "+nNbSousOccurenceSas)
POUR nIndiceOccurenceSAS = 1 _À_ nNbSousOccurenceSas
nIndiceTableausas est un entier = TableauAjoute(TABSTInformationsEclusesEtSas[nIndiceTableau].sas)
SI nIndiceTableausas<> -1 ALORS
TABSTInformationsEclusesEtSas[nIndiceTableau].sas[nIndiceTableausas].IdSas = WS_getInformationsEclusesEtSasResponse.informationEcluse[nIndiceOccurence].sas[nIndiceOccurenceSAS].idSas
// ...
FIN
FIN

SINON
SI gbOS_AffichageDialErreur ALORS Erreur("Erreur d'ajout d'un élément dans le tableau !")
FIN

puis pour chaque item 'informationEcluse' je veux parcourir les items de la sous-structure 'sas' au en utilisant sas..Occurrence.
Sous l'environnement de développement aucun problème, mais après génération de l'APK, l’exécution depuis un smartphone génère systématiquement une erreur fatale avec comme message : Le membre 'sas' est inconnu.

Je n'arrive pas à trouver la solution, avez-vous une idée me permettant de résoudre le problème ?

Merci d'avance
Claude
Posté le 13 août 2018 - 17:36
Bonjour,
je n'ai toujours pas pu résoudre mon problème
Au passage, il manquait deux "FIN" au code que j'avais inséré dans mon dernier POST.

WS_getInformationsEclusesEtSas est un getInformationsEclusesEtSasRequest
WS_getInformationsEclusesEtSas.utilisateur.identifiant = xxxxxx
WS_getInformationsEclusesEtSas.utilisateur.motDePasse = yyyyyy
WS_getInformationsEclusesEtSasResponse est un getInformationsEclusesEtSasResponse

WS_getInformationsEclusesEtSasResponse = getInformationsEclusesEtSas(WS_getInformationsEclusesEtSas)

nNbOccurenceWSECL = WS_getInformationsEclusesEtSasResponse.informationEcluse..Occurrence
Trace("WS = getInformationsEclusesEtSas : "+nNbOccurenceWSECL +" Occurrence")
SI nNbOccurenceWSECL > 0 ALORS
TableauSupprimeTout(TABSTInformationsEclusesEtSas)
nIndiceTableau est un entier
nIndiceOccurence est un entier
POUR nIndiceOccurence = 1 _À_ nNbOccurenceWSECL
nIndiceTableau = TableauAjoute(TABSTInformationsEclusesEtSas)
SI nIndiceTableau<>-1 ALORS
TABSTInformationsEclusesEtSas[nIndiceTableau].WSDateHeureActualisation = gdhDH_Dernière_Actu_InformationsEclusesEtSas
// ...
nNbSousOccurenceSas = WS_getInformationsEclusesEtSasResponse.informationEcluse[nIndiceOccurence].sas..Occurrence // <= l'erreur sous Android se produit ici
Trace("Nb SousOccurrence SAS = "+nNbSousOccurenceSas)
POUR nIndiceOccurenceSAS = 1 _À_ nNbSousOccurenceSas
nIndiceTableausas est un entier = TableauAjoute(TABSTInformationsEclusesEtSas[nIndiceTableau].sas)
SI nIndiceTableausas<> -1 ALORS
TABSTInformationsEclusesEtSas[nIndiceTableau].sas[nIndiceTableausas].IdSas = WS_getInformationsEclusesEtSasResponse.informationEcluse[nIndiceOccurence].sas[nIndiceOccurenceSAS].idSas
// ...
FIN
FIN

SINON
SI gbOS_AffichageDialErreur ALORS Erreur("Erreur d'ajout d'un élément dans le tableau !")
FIN
FIN
FIN


Avez-vous déjà rencontré ce genre de problème ?
Mon approche est-elle la bonne ou bien un bogue Windev mobile 23 ?
Toute aide de votre part est la bienvenue.

Claude
Posté le 31 août 2018 - 12:55
Bonjour à tous,
j'en suis toujours au même point avec l'erreur de traitement de l'occurrence du résultat de la requête au webservice si celui-ci renvoi un tableau de structure incluant un autre tableau de structure. Le problème est uniquement sous Android, sous environnement de dev. ça fonctionne.
J'ai ouvert un ticket au ST de PC-SOFT (avec un Prj Exemple), qui m'a transmis un correctif, mais il ne fonctionne pas ! }:(
J'attends donc une nouvelle réponse de leur part.
De votre coté, avez vous déjà observé ce problème ? Et si oui, comment l'avez-vous résolut ?
Pour le moment mon projet est au point mort, et ça commence à faire long.

Claude
Posté le 03 septembre 2018 - 13:13
Bonjour à tous,
Le problème a été résolu par le ST PC-SOFT avec un nouveau correctif.
Comme quoi il s'agissait bien d'un problème Windev du framework pour Android.

Claude