Message d'erreur IBM i (AS/400)
CPF9801
Objet &2 non trouvé dans la bibliothèque &3.
Gravité 40 · Fin anormale du programme ou de la fonction
Comment s'en sortir
Le système a cherché un objet et ne l'a pas trouvé là où on lui a dit de chercher. Neuf fois sur dix, l'objet existe bien, mais pas dans la liste de bibliothèques du travail qui s'exécute.
Les causes les plus fréquentes
- La liste de bibliothèques n'est pas la bonne. Le programme marche en interactif mais plante en batch : le travail soumis reçoit la liste de sa description de travail (
INLLIBLde la JOBD), pas la vôtre. - L'objet était dans QTEMP. QTEMP est propre à chaque travail. Un fichier créé dans QTEMP par votre session n'existe pas dans le travail que vous avez soumis avec
SBMJOB. - Mauvais nom ou mauvais type. Un fichier cherché comme programme, une faute de frappe, un nom de plus de 10 caractères tronqué.
- L'objet est dans un ASP indépendant (IASP) que le travail n'a pas rattaché.
Diagnostiquer
/* Où est l'objet, s'il existe quelque part ? */
WRKOBJ OBJ(*ALL/MONOBJ)
/* Quelle liste de bibliothèques voit le travail ? */
DSPLIBL
/* Et celle d'un travail batch : sa description de travail */
DSPJOBD JOBD(MALIB/MAJOBD)
En SQL, la liste de bibliothèques du travail en cours : SELECT * FROM QSYS2.LIBRARY_LIST_INFO.
Corriger
/* Ajouter la bibliothèque qui manque */
ADDLIBLE LIB(MALIB)
/* Ou qualifier l'objet : plus de dépendance à la liste */
CALL PGM(MALIB/MONPGM)
/* Pour un batch : soumettre avec la bonne liste */
SBMJOB CMD(CALL PGM(MONPGM)) JOB(TRAITEMENT) INLLIBL(MALIB QGPL QTEMP)
Pour tester l'existence d'un objet dans un programme CL avant de s'en servir :
CHKOBJ OBJ(MALIB/MONFIC) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(DO)
/* le fichier n'existe pas : le créer, ou prévenir */
ENDDO
Ne corrigez pas en ajoutant la bibliothèque à la liste système (QSYSLIBL) ou à celle de tous les utilisateurs : vous masquez le problème et vous risquez d'ouvrir le mauvais fichier ailleurs. Corrigez la liste du travail concerné (sa JOBD) ou qualifiez l'objet.
Ce que dit IBM
Cause
L'objet &2, dans la bibliothèque &3, type *&5, n'a pas été trouvé : le nom de la bibliothèque, le nom ou le type de l'objet est incorrect. Si le nom de la bibliothèque n'est pas indiqué, il se peut que celle contenant l'objet ne figure pas dans la liste des bibliothèques.
Que faire
Modifiez le nom de la bibliothèque, le nom ou le type de l'objet. Si le nom de la bibliothèque n'est pas indiqué, précisez-le et renouvelez la demande.
Variables du message
Quand le système envoie le message, chaque variable est remplacée par une valeur réelle : un nom d'objet, de bibliothèque, un code...
| Variable | Type | Longueur |
|---|---|---|
| &2 | *CHAR |
10 |
| &3 | *CHAR |
10 |
| &5 | *CHAR |
7 |
Sur votre IBM i
Afficher la description complète du message :
DSPMSGD RANGE(CPF9801) MSGF(QSYS/QCPFMSG)
L'intercepter dans un programme CL, quand il est envoyé comme message d'échappement :
MONMSG MSGID(CPF9801) EXEC(DO)
/* traitement de l'erreur */
ENDDO