Accueil du site > Les articles > Comment monitorer une erreur en RPG ?
Version à imprimer Enregistrer au format PDF

Comment monitorer une erreur en RPG ?

mercredi 4 octobre 2006, par David Malle Visites  2392

Comment monitorer une erreur en rpg ? Utile par exemple lorsque l’on souhaite monitorer l’exécution d’une commande CLP. Cet article présente une méthode en free rpg.


Méthode en free rpg

En free rpg :
- Utiliser un groupe monitor pour tester les erreurs sur les opérations entre le monitor et les premières opérations on-error.
- Pour intercepter l’erreur qui nous intéresse, on utilise les mots réservés *Program et *File sur l’opération On- Error :
- Utilisez la data structure du programme (position 40 à 46 , EXCP_TYPE et EXCP_NUM) pour monitorer finement des messages particuliers.
- Utilisez les datas structures fichiers pour monitorer les erreurs sur les fichiers.

D Err_Status      s              5I 0

* ----------------------------------------------------
* Exécution de commande CLP                          
* ----------------------------------------------------
D Commande        S            250                    
D CLPCMD          PR                  EXTPGM('QCMDEXC')
D  cmd                         250                    
D  cmdlen                       15P 5 CONST            
                                                     
DMYPSDS          SDS                  noopt qualified
D PROC_NAME         *PROC                            
D PGM_STATUS        *STATUS                          
D PRV_STATUS             16     20S 0                
D LINE_NUM               21     28                  
D ROUTINE           *ROUTINE                        
D PARMS             *PARMS                          
D EXCP_TYPE              40     42                  
D EXCP_NUM               43     46                  
D PGM_LIB                81     90                  
D EXCP_DATA              91    170                  
D EXCP_ID               171    174                  
D DATE                  191    198                  
D YEAR                  199    200S 0                
D LAST_FILE             201    208                  
D FILE_INFO             209    243                  
D JOB_NAME              244    253                  
D USER                  254    263                  
D JOB_NUM               264    269S 0                
D JOB_DATE              270    275S 0                
D RUN_DATE              276    281S 0                
D RUN_TIME              282    287S 0                
D CRT_DATE              288    293                  
D CRT_TIME              294    299                  
D DATE                  191    198                  
D YEAR                  199    200S 0                
D LAST_FILE             201    208                  
D FILE_INFO             209    243                  
D JOB_NAME              244    253                  
D USER                  254    263                  
D JOB_NUM               264    269S 0                
D JOB_DATE              270    275S 0                
D RUN_DATE              276    281S 0                
D RUN_TIME              282    287S 0                
D CRT_DATE              288    293                  
D CRT_TIME              294    299                  
D CPL_LEVEL             300    303                  
D SRC_FILE              304    313                  
D SRC_LIB               314    323                  
D SRC_MBR               324    333                  
D PROC_PGM              334    343                  
D PROC_MOD              344    353                      
                                                     
/free                                                
   //  ------------------------------------------    
   //  Création du fichier de travail dans QTEMP.    
   //  ------------------------------------------    
   Monitor;                                          
   Commande = 'CRTPF FILE(QTEMP/TMPSPLF2PF) ' +
              '      RCDLEN(210)'
   CLPCMD(Commande:%size(Commande));
   On-error *program;                                              
     Err_Status = MYPSDS.PGM_STATUS;
     // Faire quelque chose. Sinon autant
     // laisser planter le programme
     // Monitorer les erreurs sans action
     // est dangereux.
   Endmon;                                                
/end-free

Liens connexes
- Data structure programme
- Data structure fichier