cours GAP TRAITEMENT DES ERREURS-EXCEPTIONS

BoTTom |    Changer de couleur
 
 
                    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.  
 


|    Changer de couleur
 
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
 


|    Changer de couleur
 
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.
 


|    Changer de couleur
 
   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


|    Changer de couleur
 
     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
 
 
 
 
 
 
 


|    Changer de couleur
 
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.
 


|    Changer de couleur
 
 
     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
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
 
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                  ------------------


|    Changer de couleur
     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.


|    Changer de couleur
 
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
 


|    Changer de couleur
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                  ------------------


|    Changer de couleur
     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
 
 
 
 
 


|    Changer de couleur
 
 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)
 


|    Changer de couleur
 
 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)


|    Changer de couleur
 
 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





©AF400