TRAITEMENT DES ERREURS/EXECPTIONS --------------------------------- IL EXISTE 2 TYPES D'ERREUR DANS 1 PROGRAMME GAP: - ERREURS PROVOQUES PAR DES INSTRUCTIONS DE CALCUL EX: DIVISION PAR ZERO, INDEX DE TABLEAU INVALIDE - ERREURS PROVOQUES PAR DES INSTRUCTIONS D'ENTREE/SORTIE EX: ENREGISTREMENT VEROUILLE, ENREGISTREMENT DEJA EXISTANT CES ERREURS SI ELLES NE SONT PAS GEREES PROVOQUENT LE "PLANTAGE" DU PROGRAMME, ILS EXISTENT PLUSIEURS FACONS DE GERER CES ERREURS. |
1 UTILISATION DE L'INDICATEUR INFERIEUR (<) ------------------------------------------- C'EST LA TECHNIQUE LA PLUS SIMPLE, AVEC LA PLUPART DES INSTRUCTIONS GAP IL EST POSSIBLE DE PLACER EN COLONNE 56 57 (<) UN INDICATEUR QUI SERA MIS EN FONCTION SI UNE ERREUR APPARAIT LORS DE L'exécutION DE L'INSTRUCTION. C WRITEF1 50 C CLE CHAINFIC1 4050 C CALL 'PGM1' 50 C *LOCK IN VARCOM 50 UN DES INCONVENIENTS DE CETTE TECHNIQUE EST QUE L'ON N'A PAS D'INFORMATION SUR L'ERREUR, ON NE CONNAIT PAS LES CAUSES DE L'ERREUR |
2 UTILISATION DES DATA STRUCTURE D'INFORMATION FICHIER ET PROGRAMME ------------------------------------------------------------------- LE GAP NOUS PERMET DE RECUPERER DANS DES STRUCTURES DE DONNEES DES INFORMATIONS SUR L'ETAT DU PROGRAMME OU SUR L'ETAT DU FICHIER. CES INFORMATIONS VONT NOUS PERMETTRE DE MIEUX GERER LES ERREURS/EXECPTIONS MAIS POURRONT NOUS SERVIR A AVOIR DES INFORMATIONS SUR LE PROFIL UTILISATEUR exécutANT LE TRAVAIL, SUR L'ECRAN QUI EXECUTE LE TRAVAIL REGARDONS TOUT D'ABORD LES INFORMATIONS QUE NOUS POUVONS RECEVOIR DU PROGRAMME ET DU FICHIER 2.1 INFORMATION PROGRAMME ------------------------- RAPPELEZ VOUS QUE CES INFORMATIONS NOUS LES RECEVRONS DANS UNE DATA STRUCTURE. |
DE 1 à 10 CHAR (*PROGRAM) NOM DU PROGRAMME 11 à 15 NUM E (*STATUS) CODE ERREUR VOUS TROUVEREZ PLUS LOIN LA SIGNIFICATION DE CHACUN DE CES CODES 201 à 208 CHAR NOM DU DERNIER FICHIER UTILISE 244 à 253 CHAR NOM DU TRAVAIL (EN INTERACTIF = ECRAN) 254 à 263 CHAR NOM DU PROFIL UTILISATEUR CETTE LISTE N'EST PAS EXHAUSTIVE VOUS TROUVEREZ L'ENSEMBLE DES INFORMATIONS QUE VOUS POUVEZ RECUPERER DANS LA DOC RPG/400 COMPLEMENT SUR LE CODE ERREUR. LE CODE ERREUR EST UNE ZONE DE 5 CHIFFRES QUI CONTIENT LE N° DU CODE 00000 PAS D'ERREUR 00001 RETOUR VERS LE PROGRAMME APPELANT AVEC LR EN FONCTION 00101 EXTRACTION D'UNE RACINE CARREE NEGATIVE 00102 DIVISION PAR ZERO 00121 INDICE DE TABLEAU INVALIDE 00211 PROGRAMME APPELE OU LIBERE NON TROUVE |
IL EN EXISTE BIEN D'AUTRE VOUS TROUVEREZ LE COMPLEMENT DANS LA DOC RPG/400. COMMENT DEFINIR CETTE DATA STRUCTURE DANS VOTRE PROGRAMME EX: I SDS I *PROGRAM NOMPGM I *STATUS CODERR I 244 253 NOMJOB I 254 263 PRFUTI |
2.2 INFORMATION FICHIER ----------------------- DE 1 à 8 CHAR (*FILE) NOM DU FICHIER 11 à 15 NUM E (*STATUS) CODE ERREUR VOUS TROUVEREZ PLUS LOIN LA SIGNIFICATION DE CHACUN DE CES CODES CETTE LISTE N'EST PAS EXHAUSTIVE VOUS TROUVEREZ L'ENSEMBLE DES INFORMATIONS QUE VOUS POUVEZ RECUPERER DANS LA DOC RPG/400 OU DANS LA DOC DATA-MANAGMENT (I-O FEEDBACK AREA) COMPLEMENT SUR LE CODE ERREUR. 01021 ESSAIE D'ECRIRE UN ENREGISTREMENT QUI EXISTE DEJA 01218 ENREGISTREMENT NE PEUT être ALLOUE 01221 MISE A JOUR SANS LECTURE PREALABLE IL EN EXISTE BIEN D'AUTRE. |
COMMENT DEFINIR CETTE DATA STRUCTURE DANS VOTRE PROGRAMME EX: FFIC1 UF E K DISK A F KINFDS FIC1DS IFIC1DS DS I *FILE NOMFIC I *STATUS CODERR |
3 GESTION DES ERREURS DE CALCUL ------------------------------- 3.1. SANS L'INDICATEUR INFERIEUR -------------------------------- I SDS I *ROUTINE LOC I *STATUS ERR I *PARMS PARMS I *PROGRAM NAME C ------------------ C ------------------ C ------------------ C A DIV B C C ------------------ C ------------------ C ------------------ C ------------------ |
C ------------------ C ------------------ C ------------------ C *PSSR BEGSR C ERR IFEQ 00102 C ADD 1 B C MOVE '*DETC ' RETURN 6 C ELSE C MOVE '*CANCL' RETURN C END C ENDSRRETURN QUE FAIT CE PROGRAMME: LORQU'UNE ERREUR EXCEPTION APPARAIT LE PROGRAMME exécutE LE SOUS-PROGRAMME *PSSR SI LE CODE ERREUR EST 00102 (DIVISION PAR ZERO) LE PROGRAMME ADDITIONNE 1 DANS LE DIVISEUR ET RETOURNE LA VALEUR *DETC SINON LE PROGRAMME RETOURNE *CANCL CE QUI PROVOQUERA L'ARRET DU PROGRAMME. VOUS ETES OBLIGES D'UTILISER LE FACTEUR 2 DANS L'ENDSR POUR RETOURNER UNE VALEUR A LA FIN DU SOUS-PROGRAMME SINON VOTRE PROGRAMME SE PLANTERA. |
3.2. AVEC L'INDICATEUR INFERIEUR -------------------------------- I 'CRTRPGPGM PGM(EXPLOI-C COM I 'T/PGM1)' I SDS I *STATUS ERR C ------------------ C ------------------ C CALL 'PGM1' 70 C 70 EXSR *PSSR C ------------------ C ------------------ C *PSSR BEGSR C ERR IFEQ 00202 C Z-ADD30 LONG 155 C CALL 'QCMDEXC' C PARM COM CMD 30 C PARM LONG C END C ENDSR |
4 GESTION DES ERREURS D'ENTRE/SORTIE ------------------------------------ 4.1. AVEC L'INDICATEUR INFERIEUR -------------------------------- FFIC1 UP E K DISK F KINFDS FIC1DS F KINFSR TRTERR IFIC1DS DS I *STATUS ERR C ------------------ C ------------------ C ------------------ C CLE CHAINFIC1 1020 C 20 EXSR TRTERR C ------------------ C ------------------ C ------------------ C ------------------ C ------------------ |
C ------------------ C ------------------ C TRTERR BEGSR C ERR IFEQ 01021 C MOVE '1' *IN,18 C ELSE C MOVE '1' *IN,20 C END C ENDSR *IN18 EST ASSOCIE A UN MESSAGE D'ERREUR DANS LE FICHIER ECRAN QUI INDIQUERA ENREGISTREMENT DEJA EXISTANT *IN20 EST ASSOCIE A UN MESSAGE D'ERREUR DANS LE FICHIER ECRAN QUI INDIQUERA AJOUT IMPOSSIBLE CAUSE D'ANOMALIE |
ATTENTION SI VOUS UTLISER CES METHODES POUR GERER L'ERREUR --------- D'ENREGISTREMENT VEROUILLE, IL FAUDRA CHANGER LES CARATERISTIQUES DU FICHIER, EN PARTICULIER LE TEMPS D'ATTENTE D'UN ENREGISTREMENT (WAITRCD) QUI EST PAR DEFAUT DE 60 SECONDES SINON AVANT QUE S'EFFECTUE L'APPEL DU SOUS PROGRAMME DE TRAITEMENT DES ERREURS LE PROGRAMME ATTENDRA QUE LE TEMPS D'ATTENTE S'ECOULE =====> DES TEMPS DE REPONSE CATASTROPHIQUE. CE TEMPS D'ATTENTE VOUS POUVEZ LE MODIFIER POUR TOUTE LA DUREE DE VIE DU FICHIER PAR LA COMMANDE CHGPF OU CHGLF. EX: CHGPF FILE(FIC1) WAITRCD(1) OU LE MODIFIER TEMPORAIREMENT PENDANT LA DUREE DU PROGRAMME PAR LA COMMANDE OVRDBF QUI PERMET DE SUBSTITUER LES CARATERISTIQUES DU FICHIER EX: OVRDBF FILE(FIC1) WAITRCD(1) |
RPG-IV, V5R10 : nouvelle gestion des erreurs (format fixe ET format libre) MONITOR / ENDMON il s'agit de définir un groupe d'instructions devant être monitorées si une erreur survient , le contrôle est transmis au premier ON-ERROR si tout se passe normalement, on saute à l'instruction qui suit le ENDMON. ON-ERROR n° | ou n°1 : n°2 : n°3 | ou *FILE, *PROGRAM , *ALL gère une erreur spécifique ou une série d'erreurs dans un bloque MONITOR. les erreurs sont gérées dans l'ordre d'écriture, vous devez donc écrire du plus spécifique (une seule erreur) au plus large (*ALL), comme les MONMSG du CL. si une erreur survient pendant le traitement du code associé à un ordre on-error, l'erreur elle même n'est pas gérée (risque de boucle) |
vous pouvez préciser un ordre MONITOR dans un ordre ON-ERROR, pour éviter cela. Si vous imbriquez les ordres MONITOR, il seront examinés dans l'ordre. /free MONITOR ; chain nocli clientf1 ; if %found ; chaine = %subst( tbl(x) : %scan('*':tbl(x)) + 1) endif; On-error 1211 ; // fichier non ouvert ... On-error *FILE ; // autres erreurs fichier ... On error 00100:00121 ; // erreur de chaîne ou d'indice .... On-error *ALL ; // autres erreurs (MONMSG CPF0000) ... ENDMON; /end-free |