SAP ABAP - Gestion des exceptions

Un exceptionest un problème qui survient lors de l'exécution d'un programme. Lorsqu'une exception se produit, le déroulement normal du programme est interrompu et l'application du programme se termine anormalement, ce qui n'est pas recommandé. Par conséquent, ces exceptions doivent être traitées.

Les exceptions fournissent un moyen de transférer le contrôle d'une partie d'un programme à une autre. La gestion des exceptions ABAP repose sur trois mots-clés: RAISE, TRY, CATCH et CLEANUP. En supposant qu'un bloc lève une exception, une méthode intercepte une exception en utilisant une combinaison des mots-clés TRY et CATCH. Un bloc TRY - CATCH est placé autour du code qui peut générer une exception. Voici la syntaxe pour utiliser TRY - CATCH -

TRY.      
Try Block <Code that raises an exception> 
  
CATCH  
Catch Block <exception handler M>  
. . . 
. . . 
. . . 
CATCH  
Catch Block <exception handler R>
   
CLEANUP. 
   Cleanup block <to restore consistent state>
 
ENDTRY.

RAISE- Des exceptions sont soulevées pour indiquer qu'une situation exceptionnelle s'est produite. En général, un gestionnaire d'exceptions tente de réparer l'erreur ou de trouver une solution alternative.

TRY- Le bloc TRY contient le codage de l'application dont les exceptions doivent être traitées. Ce bloc d'instructions est traité séquentiellement. Il peut contenir d'autres structures de contrôle et appels de procédures ou d'autres programmes ABAP. Il est suivi d'un ou plusieurs blocs catch.

CATCH- Un programme intercepte une exception avec un gestionnaire d'exceptions à l'endroit dans un programme où vous souhaitez gérer le problème. Le mot-clé CATCH indique la capture d'une exception.

CLEANUP- Les instructions du bloc CLEANUP sont exécutées chaque fois qu'une exception se produit dans un bloc TRY qui n'est pas intercepté par le gestionnaire de la même construction TRY - ENDTRY. Dans la clause CLEANUP, le système peut restaurer un objet dans un état cohérent ou libérer des ressources externes. Autrement dit, le travail de nettoyage peut être exécuté pour le contexte du bloc TRY.

Lever des exceptions

Des exceptions peuvent être déclenchées à tout moment dans une méthode, un module fonction, un sous-programme, etc. Une exception peut être déclenchée de deux manières:

  • Exceptions levées par le système d'exécution ABAP.

    Par exemple Y = 1 / 0. Cela entraînera une erreur d'exécution de type CX_SY_ZERODIVIDE.

  • Exceptions soulevées par le programmeur.

    Soulevez et créez un objet d'exception simultanément. Déclenchez une exception avec un objet d'exception qui existe déjà dans le premier scénario. La syntaxe est la suivante: RAISE EXCEPTION exep.

Attraper les exceptions

Les gestionnaires sont utilisés pour intercepter les exceptions.

Jetons un coup d'œil à un extrait de code -

DATA: result TYPE P LENGTH 8 DECIMALS 2, 
exref TYPE REF TO CX_ROOT, 
msgtxt TYPE STRING. 
PARAMETERS: Num1 TYPE I, Num2 TYPE I. 
TRY. 
result = Num1 / Num2. 
CATCH CX_SY_ZERODIVIDE INTO exref. 
msgtxt = exref→GET_TEXT( ). 

CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref. 
msgtxt = exref→GET_TEXT( ).

Dans l'extrait de code ci-dessus, nous essayons de diviser Num1 par Num2 pour obtenir le résultat dans une variable de type float.

Deux types d'exceptions peuvent être générés.

  • Erreur de conversion numérique.

  • Divisez par zéro exception. Les gestionnaires interceptent l'exception CX_SY_CONVERSION_NO_NUMBER ainsi que l'exception CX_SY_ZERODIVIDE. Ici, la méthode GET_TEXT () de la classe d'exception est utilisée pour obtenir la description de l'exception.

Attributs des exceptions

Voici les cinq attributs et méthodes d'exceptions -

S.No. Attribut et description
1

Textid

Utilisé pour définir différents textes pour les exceptions et affecte également le résultat de la méthode get_text.

2

Previous

Cet attribut peut stocker l'exception d'origine qui vous permet de créer une chaîne d'exceptions.

3

get_text

Cela renvoie la représentation textuelle sous forme de chaîne selon la langue système de l'exception.

4

get_longtext

Cela renvoie la variante longue de la représentation textuelle de l'exception sous forme de chaîne.

5

get_source_position

Donne le nom du programme et le numéro de ligne atteint où l'exception a été déclenchée.

Exemple

REPORT ZExceptionsDemo. 
PARAMETERS Num_1 TYPE I. 

DATA res_1 TYPE P DECIMALS 2. 
DATA orf_1 TYPE REF TO CX_ROOT. 
DATA txt_1 TYPE STRING. 

start-of-selection. 
Write: / 'Square Root and Division with:', Num_1. 
write: /. 

TRY. 
IF ABS( Num_1 ) > 150. 
RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE. 
ENDIF.
  
TRY. 
res_1 = SQRT( Num_1 ). 
Write: / 'Result of square root:', res_1. 
res_1 = 1 / Num_1. 

Write: / 'Result of division:', res_1. 
CATCH CX_SY_ZERODIVIDE INTO orf_1. 
txt_1 = orf_1→GET_TEXT( ). 
CLEANUP. 
CLEAR res_1. 
ENDTRY. 

CATCH CX_SY_ARITHMETIC_ERROR INTO orf_1. 
txt_1 = orf_1→GET_TEXT( ).

CATCH CX_ROOT INTO orf_1. 
txt_1 = orf_1→GET_TEXT( ). 
ENDTRY. 
IF NOT txt_1 IS INITIAL. 
Write / txt_1. 
ENDIF. 
Write: / 'Final Result is:', res_1.

Dans cet exemple, si le nombre est supérieur à 150, l'exception CX_DEMO_ABS_TOO_LARGE est déclenchée. Le code ci-dessus produit la sortie suivante pour le nombre 160.

Square Root and Division with: 160 
The absolute value of number is too high 
Final Result is:  0.00