IF … THEN … ELSEIF … ELSE … ENDIF et qualité de l’attribut
- Last UpdatedSep 24, 2024
- 1 minute read
Quand une valeur d'attribut est copiée dans un autre attribut de même type, l'indicateur de qualité est également copié. Ceci est spécialement important pour travailler avec des attributs d'E/S. Par exemple, les deux instructions suivantes renseignent à la fois la valeur et la qualité :
me.Attr2 = me.Attr1;
me.Attr2.Value = me.Attr1.Value;
S'il ne faut copier que la valeur et l'attribut possède une qualité mauvaise, il est possible d'utiliser une variable intermédiaire pour stocker la valeur. Par exemple :
Dim temp as Integer;
temp = me.Attr1;
me.Attr2 = temp;
En cas de comparaison telle que Attr1 <> Attr2, si l'un des attributs possède une qualité mauvaise, alors les instructions dans le bloc de contrôle IF ne sont pas exécutées. Par exemple, supposons que l'attribut Attr1 a une qualité mauvaise :
if me.Attr1<> me.Attr2 then
me.Attr2 = me.Attr1;
endif;
Dans ce script, l'instruction me.Attr2 = me.Attr1 n'est pas exécutée parce que Attr1 a une qualité mauvaise et la comparaison d'une valeur ayant une qualité mauvaise avec une autre valeur de qualité bonne n'est pas définie, et n'est pas possible.
L'approche recommandée est de vérifier d'abord la qualité de Attr1, comme dans l'exemple suivant :
if(IsBad(me.Attr1)) then
LogMessage("Mauvaise qualité de Attr1, sa valeur n'est pas copiée dans Attr2");
else
if me.Attr1<> me.Attr2 then
me.AttrA2 = me.Attr1;
endif;
endif;
Une méthode alternative de vérification de la qualité est d'utiliser l'opérateur "==":
if Me.Attr1 == TRUE then
Ou bien, d'utiliser la propriété « Value » dans l'instruction IF THEN simplifiée :
if Me.Attr1.Value then
Vos scripts s'exécuteront correctement si vous vérifiez la qualité des données en utilisant l'une des méthodes ci-dessus.