Aller au contenu

%PROC

Nom de la procédure en cours

Renvoie le nom de la procédure dans laquelle le code s'exécute, pour les traces et les messages d'erreur.

Syntaxe

%PROC
Résultat
Une valeur caractère : le nom de la procédure, en majuscules. Dans la partie principale du programme, c'est le nom du programme.

À quoi ça sert

Un message de trace ou d'erreur est bien plus utile quand il dit d'où il vient. Écrire le nom de la procédure en dur dans chaque message est fragile : on renomme la procédure, on oublie le texte. %PROC le fournit tout seul, et on peut copier le même code d'une procédure à l'autre.

Exemple 1 : Tracer d'où vient l'appel

**free
// %PROC : nom de la procedure en cours d'execution.
ctl-opt dftactgrp(*no) actgrp(*new);

snd-msg 'Programme principal : [' + %proc() + ']';
creerCommande(1250.50);
annulerCommande(42);

*inlr = *on;

dcl-proc trace;
  dcl-pi *n;
    texte varchar(60) const;
  end-pi;
  snd-msg 'trace dans [' + %proc() + '] : ' + texte;
end-proc;

dcl-proc creerCommande;
  dcl-pi *n;
    montant packed(9:2) const;
  end-pi;
  snd-msg '[' + %proc() + '] montant ' + %char(montant);
  trace('appel depuis ' + %proc());
end-proc;

dcl-proc annulerCommande;
  dcl-pi *n;
    numero int(10) const;
  end-pi;
  snd-msg '[' + %proc() + '] commande ' + %char(numero);
  trace('appel depuis ' + %proc());
end-proc;

Résultat réel, compilé et exécuté sur IBM i 7.5 :

Programme principal : [G1PROC1]
[CREERCOMMANDE] montant 1250.50
trace dans [TRACE] : appel depuis CREERCOMMANDE
[ANNULERCOMMANDE] commande 42
trace dans [TRACE] : appel depuis ANNULERCOMMANDE

La partie principale affiche le nom du programme (G1PROC1). Chaque procédure affiche le sien, en majuscules même si on l'a écrit creerCommande.

Attention à la procédure trace : quand elle est appelée par creerCommande, son propre %PROC reste TRACE. Pour connaître l'appelant, on lui transmet %PROC en paramètre, comme le fait l'exemple.

Le piège

%PROC donne toujours le nom de la procédure courante, pas celui de l'appelant. Une procédure de trace commune afficherait TRACE à chaque ligne : il faut lui passer le nom en paramètre. Le résultat est en majuscules, quelle que soit la casse utilisée dans dcl-proc.