Facilitez-vous la vie avec ces conseils utiles de lecteurs, IBMeurs et nos rédacteurs Techniques.
Du nouveau du côté des trucs et astuces en environnement i : nos experts se sont penchés sur la question pour allier performance et efficacité !
Facilitez-vous la vie avec ces conseils utiles de lecteurs, IBMeurs et nos rédacteurs Techniques.
Du nouveau du côté des trucs et astuces en environnement i : nos experts se sont penchés sur la question pour allier performance et efficacité !
Avez-vous besoin d’extraire le nom d’une procédure courante ? Cette information est souvent nécessaire à l’occasion d’un audit ou d’un traitement d’erreurs. Elle peut être obtenue de deux manières.
Méthode classique. Envoyer un message à l’appelant en utilisant l’API Send Program Message (QMHSNDPM), extraire le message en utilisant l’API Retrieve Program Message (QMHRCVPM), et extraire le nom de la procédure envoyeuse. Cette méthode donne de bons résultats mais n’est pas très performante. En outre, une partie de l’information n’est pas toujours immédiatement disponible.
Meilleure méthode. Appeler l’API Retrieve Call Stack (QWVRCSTK). Cette méthode donne aussi de bons résultats mais les utilisateurs ont tendance à imbriquer l’appel vers QWVRCSTK directement dans la procédure (ou dans un copybook), avec pour résultat du code en double.
La solution consiste à avoir une procédure unique appelée GetProcName() dans un module appelé PROCNAME dans un programme de service (aussi appelé PROCNAME). Le PROCNAME *SRVPGM se trouve dans un répertoire de liage d’utilitaires appelé UTILITY, auquel toutes les applications font référence pendant la compilation avec le paramètre BNDDIR pour des commandes, telles que Create Bound RPG Program (CRTBNDRPG) et Create Cobol Module (CRTCBLMOD).
En incluant le copybook PROCNAME_P dans vos programmes, vous accédez à la procédure GetProcName(). Pour connaître le nom de la procédure courante, appelez simplement GetProcName, qui passe qproc (une structure de données aussi définie dans le copybook PROCNAME_P).
Après l’appel adressé à GetProcName, la structure de données qproc contient les noms de la bibliothèque, du programme (ou programme de service), du module, et de la procédure qui a appelé GetProcName(). J’aime utiliser cette approche conjointement à l’opcode DUMP pour identifier le fichier spoolé program dump QPPGMDMP. /free D string S 132A … … procedure code here … begsr *pssr; GetProcName( qproc ); string = %trim( qproc.library ) + ‘/’ + %trim( qproc.program ) + ‘/’ + %trim( qproc.module ) + ‘/’ + %trim( qproc.proc ); dump(a) string; endsr; /end-free
Comme résultat, la ligne supérieure du fichier spoolé QPPGMDMP contient quelque chose du genre MYLIB/ MYSRVPGM/MYMOD1/GetSystemValue – où GetSystem Value() est la procédure qui a appelé GetProcName(). Grâce à cette information, il est beaucoup plus facile de trouver le bon fichier spoolé s’il y en a beaucoup. Faute de spécifier un paramètre pour l’opcode DUMP, la ligne supérieure du fichier spoolé QPPGMDMP contient simplement ILE RPG/400 FORMATTED DUMP.
Pour télécharger le code, aller sur iTPro. Le code de la procédure PROCNAME et du copybook PROCNAME_P est inclus, ainsi que le code d’un programme appelé TESTPROCR qui montre comment appeler PROCNAME. Pour plus d’informations sur le préprocesseur compile, lire l’article « Using a Compile Preprocessor » – Club abonnés.
– Rory Hewitt Software developer
Découvrez les dernières tendances et solutions IT autour des univers de Poste de travail, Affichage et Collaboration, Impression et Infrastructure, et notre dossier Green IT sur les actions engagés par inmac wstore pour réduire son impact environnemental