Page 1 sur 1

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

Posté : mar. 30 oct. 2012, 17:03:45
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

(sans texte)

Posté : mar. 30 oct. 2012, 17:31:35
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.

(sans texte)

Posté : lun. 05 nov. 2012, 10:29:57
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.