PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Chaine de caractére vers null
Chaine de caractére vers null
Iniciado por Sylvain PAINCHAUD, 23,oct. 2021 14:24 - 7 respuestas
Miembro registrado
36 mensajes
Popularité : +4 (4 votes)
Publicado el 23,octubre 2021 - 14:24
Bonjour,

Sur mon projet, j'ai une classe toto, dedans j'ai des membres :

id is int
foo is string
bar is string

Je souhaiterai pouvoir faire en sorte que mon foo si il y a quelque chose dedans je puisse le passer a null pour l'envoyer sur une API.

Car mon API n'accepte que les null ou des choses prédéfinit dans certain champs
Or si j'ai mon foo qui à déjà quelque chose je souhaiterai le passé à null or je n'y arrive pas car windev me fait passé mon null en "0"

Auriez vous une astuce.

Cordialement
Miembro registrado
3.846 mensajes
Popularité : +227 (347 votes)
Publicado el 23,octubre 2021 - 14:47
Bonjour,
Il faut passer par des variants à la place des chaînes. Ce n'est pas propre, mais c'est la seule solution.

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
3.846 mensajes
Popularité : +227 (347 votes)
Publicado el 23,octubre 2021 - 14:53
En WL, pour une chaîne ou un numérique, Null signifie "non affecté", on peut aussi passer par un objet temporaire et affecter ou non le membre en question. Mais pas sur que ça passe.

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
36 mensajes
Popularité : +4 (4 votes)
Publicado el 23,octubre 2021 - 16:11
Merci de l'information.
C'est quand même la base de la programmation et eux ils laissent cela comme ça... C'est fou
Miembro registrado
3.846 mensajes
Popularité : +227 (347 votes)
Publicado el 24,octubre 2021 - 08:48
On s'y fait... Il suffit de se rappeler que le WL ne traite pas Null comme une valeur, mais comme une "non valeur".

Je te conseille ces 2 lien concernant le Null :
https://doc.pcsoft.fr/?1511015&1511015
https://doc.pcsoft.fr/?2512064

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
36 mensajes
Popularité : +4 (4 votes)
Publicado el 24,octubre 2021 - 12:01
Super, merci de l'info.
Car le support technique payent ne le savaient même pas... J'avais pas mal de bug à cause de retour Null qui faisaient des "0" ou autre.
Publicado el 24,octubre 2021 - 14:26
Oui je trouve dommage, j'ai récemment eu le même type de problème
La gestion du nul n’est soit trop permissive, soit manque la gestion du nul pour les types simples (gestion de la valeur inexistante et propriété ..nul comme dans les variants) .

Sans devoir changer leurs systèmes, j'aimerais que pcsoft nous offre la possibilité de :
1) une option dans la configuration pour relever une exception en cas de nul sur un type simple
2) Pouvoir faire un variant, mais qui accepterait un type ou plusieurs types en paramètre.

Par exemple un variant qui accepte seulement le nul et l'entier.

Pour éviter les problèmes dans certains cas j'ai commencé à écrire des méthodes de vérification :


Exemple
Renvoie une exception si la valeur est null
Procedure type_verschaine(soit sChaine) : chaîne
SI PAS TypeVar(sChaine) DANS (wlChaîne,wlChaîneAnsi,wlChaîneUnicode) ALORS ExceptionDéclenche(404,"Type invalide")
RENVOYER sChaine


On accepte le null mais renvoie une chaine vide
Procedure type_verschaine_nullable(soit pChaine)
nType est un entier = TypeVar(pChaine) = wlVariant ? pChaine..Type SINON TypeVar(pChaine)
SI PAS nType DANS (wlChaîne,wlChaîneAnsi,wlChaîneUnicode,wlVide) ExceptionDéclenche(404,"Type invalide")
sChaine est une chaîne = nType = wlVide ? "" SINON pChaine
RENVOYER sChaine


Si je dois gérer le nul (avec une rubrique (source,enregistrement,requête) ou un champ nullable) d'un type simple, j'utilise un variant pour récupérer la valeur et je vérifie le type(simple) avec cette fonction (je dois clairement encore l'affiner ;) )

COTypeVariant est une Combinaison
typevariant_chaine
typevariant_null
typevariant_entier2
typevariant_entier4
typevariant_entier8
typevariant_numerique
typevariant_reel4
typevariant_reel8
FIN

Procedure verifieTypeVariant(LOCAL vValeur est un Variant,coTypes est un COTypeVariant) : (booléen,booléen)
nValide est un entier = 0
bEstNull est un booléen
POUR TOUT eOption de coTypes
SELON eOption
CAS typevariant_null: SI vValeur..Type DANS (wlVide) ALORS nValide++;bEstNull=Vrai
CAS typevariant_chaine: SI vValeur..Type DANS (wlChaîne,wlChaîneAnsi,wlChaîneUnicode) ALORS nValide++
CAS typevariant_entier2: SI vValeur..Type DANS (wlEntier,wlEntier_2) ALORS nValide++
CAS typevariant_entier4: SI vValeur..Type DANS (wlEntier,wlEntier_4) ALORS nValide++
CAS typevariant_entier8: SI vValeur..Type DANS (wlEntier,wlEntier_8) ALORS nValide++
CAS typevariant_reel4: SI vValeur..Type DANS (wlRéel,wlRéel_4) ALORS nValide++
CAS typevariant_reel8: SI vValeur..Type DANS (wlRéel,wlRéel_8) ALORS nValide++
CAS typevariant_numerique: SI vValeur..Type DANS (wlNumérique) ALORS nValide++
FIN
FIN
dbgAssertion(nValide>0,"Le type est invalide")
RENVOYER (nValide,bEstNull)
Miembro registrado
36 mensajes
Popularité : +4 (4 votes)
Publicado el 11,noviembre 2021 - 11:57
Merci pour l'info.
C'est sympa.
Après j'ai créer tout fait en POO et il ne me manqué que cela enfin j'ai d'autre bug mais la c'est des bug pcsoft qui sont déjà dessus depuis plus de 6 mois xD