Les overrides au niveau d'appel ont la particularité de combiner plusieurs overrides pour le même fichier, afin que chacun des attributs différents touchés par l'override s'applique. Analysons les fragments de programme suivants, qui émettent la commande OvrPrtF (Override with Printer File) :
ProgramA :
OvPrtF File(Report) OutQ(Sales01) *
OvrScope(*CallLvl)
Call
Pgm(ProgramB)
ProgramB :
OvPrtF File(Report) Copies(3) +
OvrScope(*CallLvl)
Call Pgm(PrintPgm)
Quand le programme PrintPgm ouvre et spoule le fichier d’imprimante Report, les overrides provenant des deux programmes sont combinés, avec les résultats suivants : le fichier spoulé est placé dans le file d’attente de sortie Sales01 et trois copies sont prêtes à imprimer.
Voyons maintenant le fragment de programme suivant :
ProgramC :
OvPrtF File(Report) OutQ(Sales01) +
OvrScope(*CallLvl)
OvPrtF File(Report) Copies(3) +
OvrScope(*CallLvl)
Call Pgm(PrintPgm)
A votre avis, que se passe-t-il ? Si vous croyez que ce programme est fonctionnellement équivalent aux deux précédents, vous vous trompez. A l’intérieur d’un niveau d’appel unique, seul l’override le plus récent est en vigueur. Autrement dit, l’override le plus récent remplace l’override précédent en vigueur. Dans le cas de ProgramC, l’override Copies(3) est en vigueur, mais l’override OutQ(Sales01) ne l’est pas. Cette particularité procure un moyen commode de remplacer un override dans un niveau d’appel unique, sans qu’il soit nécessaire de supprimer d’abord l’override précédent. Il est également amusant de montrer aux programmeurs ProgramA et ProgramB, d’expliquer que tout s’est passé parfaitement, puis de leur demander de vous aider à trouver pourquoi les choses se sont gâtées juste après avoir modifié l’application pour qu’elle ressemble à ProgramC ! Quand ils s’aperçoivent en définitive que seul l’override le plus récent dans un programme est en vigueur, montrez leurs votre dernière modification –
ProgramA :
OvPrtF File(Report) OutQ(Sales01) *
OvrScope(*CallLvl)
TfrCtl Pgm(ProgramB)
ProgramB :
OvPrtF File(Report) Copies(3) +
OvrScope(*CallLvl)
Call Pgm(PrintPgm)
et regardez-les s’affoler à nouveau ! Ce dernier changement est identique à la première itération de ProgramA et ProgramB, à cela près que, au lieu d’émettre un appel (Call) au ProgramB depuis le ProgramA, on utilise la commande TfrCtl pour invoquer ProgramB. Souvenez-vous que TfrCrl ne démarre pas un nouveau niveau d’appel. ProgramB remplacera simplement ProgramA dans la pile d’appel et s’exécutera donc au même niveau d’appel que ProgramA. Du fait que le niveau d’appel ne change pas, les overrides ne sont pas combinés.
Vous devrez peut-être faire remarquer aux programmeurs que cela leur a complètement échappé quand ils ont déterminé que seul l’override le plus récent dans un programme est en vigueur. La règle est la suivante : seul l’override le plus récent dans un niveau d’appel est en vigueur.
Téléchargez cette ressource
Guide inmac wstore pour l’équipement IT de l’entreprise
Découvrez les dernières tendances et solutions IT autour des univers de Poste de travail, Affichage et Collaboration, Impression et Infrastructure, et notre nouveau dossier thématique sur l’éco-conception et les bonnes pratiques à adopter pour réduire votre impact environnemental.