Bonjour,
Comment gérer les valeurs nulles sur les variables Rpg ile ?
Cordialement,
En carte H ou dans la partie control ctl-opt, on ajoute ALWNULL(*USRCTL).
Au niveau variable, on ajoute le mot-clef NULLIND pour que la variable puisse supporter les valeurs nulles.
Au niveau usage dans le source, on utilise le %BIF %Nullind.
Exemple ci-dessous :
dcl-s dueDate date nullind;
if not %nullind(dueDate) and dueDate > %date();
sendReminder (custId : dueDate);
endif;
Voir la page https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/rzasd/dkwnullind.htm .
Bonjour,
on peut également déclarer une DS correspondant aux zones d’un enregistrement de fichier de la façon suivante :
dcl-ds T34_n likerec(F34:*ALL:*NULL);
Les zones de cette DS sont des indicateurs (booléens) portant le même nom que que les zones du format F34 du fichier en entrée, sortie ou entrée et sortie (ici);
Ensuite on peut associer cette DS à la DS reprenant la description des zones du format F34 toutes zones combinées (entrée ou sortie) ou d’entrée ou de sortie :
dcl-ds T34_o likerec(F34:*ALL) nullind(T34_n) inz;
Il suffira donc pour écrire un enregistrement de positionner les booléens correspondant aux zones de la ds T34_O devant être nulles à *on.
De même, pour connaitre les zones contenant des valeurs nulles dans la DS contenant un enregistrement en lecture, il suffira d’associer une DS d’indicateurs à la DS de données :
dcl-ds T34_i likerec(F34:*ALL) nullind(T34_n) inz;
On pourra donc tester les valeurs nulles de la façon suivante :
if not F34_n.toto;
dsply 'Valeur de Toto : ' + T34_i.toto;
else;
dsply 'Toto n''a pas de valeur';
endif;
Remarque : ça marche aussi en 7.3