PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Champs optionnels dans une structure
Champs optionnels dans une structure
Débuté par Juju, 14 jan. 2019 10:16 - 4 réponses
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 14 janvier 2019 - 10:16
Bonjour,

Je déclare une structure d'annonce avec tous les champs que cela implique (Titre, descriptif, prix...) que je convertit ensuite en Json pour l'envoyer en webService.
Cependant certains champs de ma structure sont optionnels... et je ne sais pas comment faire pour le gérer correctement.

stJSONAnnonce est une structure
mobileAdId est un entier // Numéro d'ordre
mobileSellerId est un entier // Identifiant vendeur
category est une chaîne // Catégorie voiture
make est une chaîne // Marque voiture
price est une stPrix // Utilisation de la structure prix
firstRegistration est une chaîne // Date de 1° immatriculation
mileage est un entier // Kilométrage
modelDescription est une chaîne // Titre annonce
damageUnrepaired est un booléen // Véhicule endommagé
model est une chaîne // Modèle voiture
vehicleClass est une chaîne // Classe du véhicule
...
FIN

// affectation des propriétés à l'annonce
// Champs obligatoires...
stAnnonce:mobileAdId=sLp // Numéro d'ordre
stAnnonce:mobileSellerId=gsMobileSellerId // ID vendeur mobile.DE
stAnnonce:category = T_ANNONCE.AN_CATEGORIE // Catégorie véhicule
stAnnonce:vehicleClass = T_ANNONCE.AN_SSCATEGORIE // Classe véhicule
stAnnonce:make = T_ANNONCE.AN_MARQUE // Marque
stAnnonce:damageUnrepaired = T_ANNONCE.AN_ENDOMMAGE // Véhicule endommagé (Oui / Non)
...

// Sérialisation de l'élément
Sérialise(stAnnonce, sChaineJson, psdJSON)
...


Mon problème est que si j'envoie des champs vides, mon webService le refuse... comment puis je faire pour déclarer des éléments dans ma structure que si mes champs ont une valeur ?

merci d'avance
Posté le 14 janvier 2019 - 11:45
Bonjour,
avez-vous pensé à mettre dans les champs que vous devriez laisser vide un caractère vide qui ensuite, côté serveur, considérez vide? Par exemple "* null *"
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 14 janvier 2019 - 14:19
En fait le problème c'est que mon champ est vide au lieu d'avoir une valeur; Le champ null n'étant pas une des valeurs imposées. Ex : vehicleClass peut recevoir "Car", "Motorbike" mais ne peut pas recevoir "" or le membre VehicleClass s'il n'a pas de valeur affectée apparaît comme égal à vide du coup.
Le mieux ce serait qu'il n'apparaisse pas.
Message modifié, 14 janvier 2019 - 14:29
Membre enregistré
96 messages
Popularité : +18 (20 votes)
Posté le 14 janvier 2019 - 17:26
Bonjour,
vous pouvez typer vos champs optionnels en tant que variant.
Ainsi, s'il ne doit pas être utilisé, vous le laissez à null.

Vous n'aurez plus qu'à conditionner sur la valeur null pour utiliser ou non votre champ.

Plus de détail : http://www.ytreza.org/fr/blog/jour-9-des-booleens-a-3-valeurs

--
Johjo aka Jonathan Laurent

Codez mieux ! Codez plus vite !

Mon blog sur WinDev : http://www.ytreza.org
Me contacter sur slack (wx-community) : https://frama.link/BoBD0SY0
Faîtes moi un ping : http://www.ytreza.org/fr/services/ping-sur-forum
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 15 janvier 2019 - 08:42
Effectivement cela fonctionne ça envoie la valeur null ("radio":null ) et c'est pris par le webservice.

// Création de la structure Annonce
stJSONAnnonce est une structure
mobileAdId est un entier // Numéro d'ordre
mobileSellerId est un entier // Identifiant vendeur
category est une chaîne // Catégorie voiture
make est une chaîne // Marque voiture
price est une stPrix // Utilisation de la structure prix
firstRegistration est une chaîne // Date de 1° immatriculation
...
radio est un Variant
FIN

//Création d'une annonce de type structure Annonce

// affectation des propriétés à l'annonce
stAnnonce:mobileAdId=sLp // Numéro d'ordre
stAnnonce:mobileSellerId=gsMobileSellerId // ID vendeur sur mobile.DE
stAnnonce:category = T_ANNONCE.AN_SSCATEGORIE // Sous Catégorie véhicule
stAnnonce:vehicleClass = T_ANNONCE.AN_CATEGORIE // Cétégorie véhicule
stAnnonce:make = T_ANNONCE.AN_MARQUE // Marque
stAnnonce:damageUnrepaired = T_ANNONCE.AN_ENDOMMAGE // Véhicule endommagé (Oui / Non)
stAnnonce:firstRegistration = DateVersChaîne(T_ANNONCE.AN_MISE_CIRCU,"YYYYMM") // Date de 1° mise en circu

SI T_ANNONCE.AN_RADIO <> "" ET T_ANNONCE.AN_RADIO <> "0" ALORS
stAnnonce:radio= "TUNER"
FIN


Merci bien pour l'aide :)