PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV (versiones precedentes) → Champs optionnels dans une structure
Champs optionnels dans une structure
Iniciado por Juju, 14,ene. 2019 10:16 - 4 respuestas
Miembro registrado
87 mensajes
Popularité : +4 (4 votes)
Publicado el 14,enero 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
Publicado el 14,enero 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 *"
Miembro registrado
87 mensajes
Popularité : +4 (4 votes)
Publicado el 14,enero 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.
Mensaje modificado, 14,enero 2019 - 14:29
Miembro registrado
96 mensajes
Popularité : +18 (20 votes)
Publicado el 14,enero 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
Miembro registrado
87 mensajes
Popularité : +4 (4 votes)
Publicado el 15,enero 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 :)