%OMITTED
Paramètre passé avec *OMIT ?
Indique si l'appelant a passé *OMIT à la place d'un paramètre déclaré avec options(*omit).
Syntaxe
%OMITTED(paramètre)
paramètre- Le nom d'un paramètre de la procédure en cours, déclaré avec
options(*omit). - Résultat
- Un indicateur :
*ONsi l'appelant a passé*OMIT,*OFFsinon.
À quoi ça sert
*OMIT permet à l'appelant de dire « je n'ai pas de valeur pour ce paramètre » tout en gardant les paramètres suivants dans leur position. C'est utile quand le paramètre facultatif n'est pas le dernier de la liste, ce que *nopass ne permet pas.
La procédure teste %OMITTED et applique alors une valeur par défaut.
Exemple 1 : Un taux facultatif au milieu de la liste
**free
// %OMITTED : parametre transmis avec *OMIT ?
ctl-opt dftactgrp(*no) actgrp(*new);
dcl-pr calcul;
base packed(9:2) const;
taux packed(5:2) const options(*omit);
end-pr;
calcul(200 : 10);
calcul(200 : *omit);
*inlr = *on;
dcl-proc calcul;
dcl-pi *n;
base packed(9:2) const;
taux packed(5:2) const options(*omit);
end-pi;
dcl-s remise packed(9:2);
if %omitted(taux);
remise = base * 20 / 100;
snd-msg 'Taux omis, 20 % par defaut : ' + %char(remise);
else;
remise = base * taux / 100;
snd-msg 'Taux recu ' + %char(taux) + ' : ' + %char(remise);
endif;
end-proc;
Résultat réel, compilé et exécuté sur IBM i 7.5 :
Taux recu 10.00 : 20.00
Taux omis, 20 % par defaut : 40.00
Avec le taux 10, la remise de 200 est 20,00. Avec *omit, la procédure applique 20 % par défaut : 40,00.
Exemple 2 : Lire un paramètre omis sans tester
**free
// %OMITTED : lire un parametre omis sans le tester plante.
ctl-opt dftactgrp(*no) actgrp(*new);
dcl-pr calcul;
base packed(9:2) const;
taux packed(5:2) const options(*omit);
end-pr;
calcul(200 : 10);
calcul(200 : *omit);
*inlr = *on;
dcl-proc calcul;
dcl-pi *n;
base packed(9:2) const;
taux packed(5:2) const options(*omit);
end-pi;
dcl-s remise packed(9:2);
remise = base * taux / 100;
snd-msg 'Remise : ' + %char(remise);
end-proc;
Résultat réel, compilé et exécuté sur IBM i 7.5 :
Remise : 20.00
Erreur : MCH3601 - Pointeur non défini pour position mémoire référencée.
Le premier appel fonctionne (20,00). Le second passe *omit et la procédure lit quand même taux : erreur MCH3601, pointeur non défini.
Le piège
Un paramètre omis n'a pas de valeur lisible. Toute lecture de taux quand l'appelant a passé *omit arrête le programme avec MCH3601 (exemple 2). Testez %OMITTED avant, comme dans l'exemple 1.