Récupérer une exception venant d'une sous-procédure ?

RPG (3 et 4, free), CL, SQL, etc...
Répondre
germor
Messages : 75
Enregistré le : lun. 06 juin 2011, 08:01:43

Récupérer une exception venant d'une sous-procédure ?

Message par germor »

Bonjour :wink:
En V5R4.
Un programme RPGLE appelle une sous-procédure :

Code : Tout sélectionner

...
          Opt ='path=Document/BkToCstmrDbtCdtNtfctn/Ntfctn +
          doc=file allowextra=yes case=any';
          xml-into(e) %Handler(Proc_Hand : TotNotif)  %xml(chemin : Opt) ;
          if %error();
            if %status=1218 or %status=1299;     
...
Une exception se produit dans la sous-procédure (plus exactement dans une sous-routine : CtlDetRejet) :

Code : Tout sélectionner

     PProc_Hand        b
     dProc_Hand        pi            10i 0
     D Total                         10i 0
     D Result                              likeds(ntfctn) dim(1) const
     D NB                            10u 0 value
     D i               s             10i 0    
/free
...
             Exsr CtlDetRejet;

        endfor;
        return 0;
/end-free   

Code : Tout sélectionner

     
C     CtlDetRejet   Begsr    
C                   Eval      G_HasPro = *off          
/free
        dsply ('avt FICHIER=' + G_CoProEdt) 'GERMOR' ;
/end-free
C     G_CoProEdt    Chain     FICHIER
C                   If        %found
C                   Eval      G_HasPro = *on
C                   EndIf                  
L'exception se produit sur le chain, et renvoie directement sur l'instruction après le xml-into : le %error donne 1 et le %status donne 1299.
et je n'ai pas le displ : avt FICHIER=
Comment peut on monitorer les erreurs dans une sous-procédure ?
Si vous avez une idée ?
merci d'avance

cmasse
Site Admin
Messages : 764
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

(sans texte)

Message par cmasse »

il faut utiliser MONITOR

Code : Tout sélectionner

C     CtlDetRejet   Begsr   
  /free
       Eval      G_HasPro = *off   ;      
       dsply ('avt FICHIER=' + G_CoProEdt) 'GERMOR' ;

       Monitor;
          Chain G_CoProEdt      FICHIER;
               If        %found;
                   Eval      G_HasPro = *on;
               EndIf ;               
       On-error *all;
         // faire qq chose
       ENDMON;
  /end-free

puis faire en sorte que la procédure Proc_Hand retourne autre chose que 0 pour signaler l'erreur à XML-INTO.
Christian Massé (Volubis.fr)

germor
Messages : 75
Enregistré le : lun. 06 juin 2011, 08:01:43

(sans texte)

Message par germor »

Bonjour,
Merci pour la réponse.
J'ai ainsi pu monitorer mes exceptions : je tombe sur une %status 351 dans le xml-into.
Je vais revoir la logique metier du programme.

Répondre