Aller au contenu

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 (INLLIBL de 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...

VariableTypeLongueur
&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