> Tech > Manipuler les indicateurs comme des tableaux

Manipuler les indicateurs comme des tableaux

Tech - Par Renaud ROSSET - Publié le 24 juin 2010

J'ai été en désaccord avec un collègue au sujet de la manipulation d'indicateurs en tant que tableaux, comme dans le code suivant :

C MOVEA '00000000' *IN(60)
Bien que les guides de style mettent en garde contre cette technique, certains l'utilisent

Manipuler les indicateurs comme des tableaux

néanmoins, même dans
des programmes RPG IV modernes. J’ai dû récemment changer
un programme d’affichage pour utiliser un autre indicateur
pour conditionner un champ sur l’affichage ; chaque indicateur
semblait avoir été utilisé, jusqu’à  ce que j’aie
examiné toutes les lignes MoveA et trouvé un indicateur au
milieu d’un groupe qui avait été activé mais jamais utilisé.
Il est encore pire de souscrire à  un indicateur à  l’aide
d’une variable telle que *IN(Ind). Mon collègue était
convaincu qu’il devrait employer la souscription de tableaux
d’indicateurs pour résoudre ce problème particulier : il avait
environ 20 champs de valeurs différentes sur un écran pour
un système multidevise. Il fallait valider chaque champ quant
au nombre de positions décimales et à  l’unité minimum autorisée
(certaines devises n’ont pas de décimales représentées
par des centimes ou des pences, et d’autres ont des valeurs
tellement petites que même une unité est trop petite).
Sa solution consistait à  utiliser une sous-routine chargée
de valider la valeur. Pour chaque champ d’écran consécutif, la
valeur était placée dans un champ de travail et dans un jeu
d’index représentant le premier des deux indicateurs possibles
pour les messages d’erreur sur le fichier écran. Les
snippets de code suivants montrent ce qu’il avait fait :

c Eval w#ValAmount =
CostFld1
c Eval Ind = 64
c Exsr ValAmount
 
:
:
 
c ValAmount Begsr

Le coding de validation :

c If . . . .
c Eval *in(ind) = *on
c Endif  
c If . . .
c Eval *in(ind+1) = *on
c Endif  
c Endsr  

De mon côté, j’ai employé un appel prototypé adressé à 
une procédure. Voici quelques snippets tirés de la solution
qu’il avait utilisée :


La définition de procédure dans les cartes D du programme
:

d ValAmount pr  
d w#valamount   15 02 Value
d w#inde   n
d w#inma   n

L’appel de procédure dans les cartes C :

c callp
                        ValAmount(Costfld1: *in64: *in65)

La procédure à  la fin de la source :

p ValAmount b  
d ValAmount pi  
d w#valamount   15 02 Value
d w#inde   n
d w#inma   n


Le coding de validation :

c Select  
c When . . . .
c Eval w#inde = *on
c When . . . .
c Eval w#inma = *on
c Endsl  
c Return  
c e  

Vous conviendrez sûrement que la ligne CallP est bien
plus claire et qu’elle montre quels indicateurs sont utilisés.

Téléchargez cette ressource

Sécuriser Microsoft 365 avec une approche Zero-Trust

Sécuriser Microsoft 365 avec une approche Zero-Trust

Découvrez comment renforcer la cyber-résilience de Microsoft 365 grâce à une approche Zero-Trust, une administration granulaire et une automatisation avancée. La technologie Virtual Tenant de CoreView permet de sécuriser et simplifier la gestion des environnements complexes, tout en complétant vos stratégies IAM, y compris dans les secteurs réglementés.

Les plus consultés sur iTPro.fr

A lire aussi sur le site

À la une de la chaîne Tech