SAP Career Guide - A beginner’s manual on SAP careers for students and professionals

Exceptionally Well Written !!

G. Mayer

Le débogueur SAP pour développeurs et fonctionnels

Comprendre un projet SAP implique bien évidemment de comprendre les flux métiers qui composent le scope de ce projet, mais aussi toute la partie tech- nique déjà en place ou à réaliser afin de saisir au mieux les besoins du client. Très vite, nous pouvons...

Leseprobe
10% Rabatt

Jetzt 10% Rabatt sichern! Melden Sie sich für unseren Newsletter an und erhalten Sie 10% Rabatt auf das Digital-Abo für unsere SAP-Lernplattform!

Inhaltsverzeichnis

  • Avant-propos
  • 1   Le débogueur SAP
  • 2   Menu et interface
  • 3   Outils
  • 4   Autres fonctions
  • A   À propos de l’auteur
  • B   Clause de non-responsabilité

Weitere Informationen

Autor/in:

Nicolas Pontier

Katgorie:

SAP-Programming

Sprache:

Französisch

Leseprobe

2.1   Barre d’outils

La barre d’outils du débogueur se compose des fonctions représentées sur la Figure 2.2 :

Debuger

Figure 2.2 : Barre d’outils

En détail, voici les fonctionnalités de cette barre d’outils avec les raccourcis clavier associés.

CalloutCaption  Étape individuelle F5 

CalloutCaption  Exécuter F6 

CalloutCaption  Retour F7 

CalloutCaption  Suite F8 

CalloutCaption  Modifier incrément du débogage Ctrl + Maj + F10 

CalloutCaption  Créer un point d’arrêt F9

CalloutCaption  Créer un point de surveillance Maj + F4

CalloutCaption  Sauvegarder mise en forme Ctrl + Maj + F3

CalloutCaption  Configurer couche de débogage Ctrl + Maj + F4

2.1.1   Étape individuelle F5

Cette fonction permet d’avancer ligne par ligne dans le programme. Prenons l’exemple du programme ci-dessous, afin de bien comprendre ce que fait cette fonctionnalité.

1   START-OF-SELECTION.
2  
3     IF p_werks IS NOT INITIAL.
4
5       PERFORM get_data.
6
7       IF NOT gt_data[] IS INITIAL.
8
9         LOOP AT gt_data ASSIGNING .
10
11         CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
12             EXPORTING
13               input  = -matnr
14             IMPORTING
15               output = -matnr.
16
17         CALL SCREEN 100.
18
19       ENDLOOP.
20     ENDIF.
21   ENDIF.

Si un point d’arrêt est défini à la ligne 3, en cliquant sur l’icône Étape individuelle ou en utilisant le raccourci clavier F5, le programme avancera à la prochaine ligne de code, soit la ligne 5. En réappuyant sur F5, le programme avancera de nouveau à la ligne suivante. Comme il s’agit de PERFORM, le programme entrera dans cette routine et il sera ensuite possible de continuer à l’exécuter pas à pas. De même, en arrivant à la ligne 11, le programme entrera dans la fonction où il sera également possible de continuer pas à pas.

2.1.2   Exécuter F6

Cette fonction est similaire à la fonction précédente, mais elle ne rentrera pas dans le détail d’un appel d’objet tel qu’une routine, une fonction, une classe, etc.

Avec l’exemple précédent et un point d’arrêt à la ligne 3, en cliquant sur l’icône Exécuter ou en passant par le raccourci clavier F6, le programme avancera à la ligne 5. Si l’on appuie de nouveau sur F6, au lieu d’entrer dans la routine, il accédera directement à la ligne 7. De même, une fois à la ligne 11, le programme passera la fonction pour accéder directement à la ligne 17.

La fonction de F6

Le fait de sauter une routine, fonction, etc. avec la fonctionnalité F6 ne signifie pas que le programme n’exécute pas le code contenu dans ces parties, mais simplement qu’il reviendra à la partie principale après l’avoir exécuté. Ce procédé évite de dérouler tout un programme, ce qui peut être long et fastidieux.

2.1.3   Retour F7

La fonctionnalité Retour ou le raccourci clavier F7 permettent de revenir à l’étape supérieure du programme. Lors de son exécution, un programme passe par plusieurs couches composées de routines, méthodes ou fonctions, etc.

Dans le débogueur, il est possible de voir toutes les étapes par lesquelles le programme est passé. La Figure 2.3 est un exemple d’une pile ABAP (liste de programmes en cours d’exécution – voir section 3.2.2). Le programme se situe à l’étape 9 de la méthode GET_PARAMETERS de la classe CL_SALV_CSQ_PARAMS_DB.

Debuger

Figure 2.3 : Pile ABAP pendant l’exécution d’un programme

Ainsi, si l’étape 9 ne paraît pas intéressante, et que l’on souhaite poursuivre l’analyse à l’étape 8, la fonction de F7 permet de revenir à l’étape précédente.

Rappelons que le fait de revenir en arrière ne signifie pas que le code de l’étape quittée n’ait pas été traité.

2.1.4   Suite F8

La fonctionnalité Suite ou le raccourci clavier F8 permettent de terminer l’exécution du programme et de sortir du débogueur pour arriver au résultat final. Cependant, si un point d’arrêt a été placé un peu plus loin dans l’exécution du programme, il s’arrêtera de nouveau au point défini. Cette fonctionnalité permet, dans l’analyse de programmes complexes, de passer de nombreuses étapes très rapidement.

Pour conclure, la Figure 2.4 représente les différents types d’exécution du débogueur.

Debuger

Figure 2.4: Schéma de l’exécution du programme

2.1.5   Modifier incrément du débogage Ctrl + Maj + F10

Lorsque le programme contient une condition IF composée de plusieurs conditions, par défaut le débogueur vérifie si tout le bloc est valide. Avec l’option d’incrément, il est possible de vérifier chaque étape de la condition.

Dans l’exemple de la Figure 2.5, le débogueur vérifie d’abord la première étape ; si elle est validée, il passe à la seconde et ainsi de suite. Il est donc possible de cibler plus aisément le problème lorsqu’une condition est incorrecte.

Debuger

Figure 2.5 : Exemple du débogueur avec l’option Incrément

2.1.6   Créer un point d’arrêt F9

Bien que l’icône rappelle le point d’arrêt de l’éditeur ABAP, sa fonctionnalité permet de définir un point d’arrêt selon plusieurs critères :

Instruction ABAP

Il suffira de définir une syntaxe ABAP pour que le programme s’arrête.

Utilisation du point d’arrêt Instruction ABAP

Dans l’exemple de la Figure 2.6, on souhaite que le programme s’arrête à toutes les instructions AUTHORITY-CHECK afin de relever les autorisations nécessaires à l’exécution du programme.

Debuger

Figure 2.6 : Mise en place d’un point d’arrêt sur une instruction

Méthode

Il faut ici définir notamment le nom d’une classe, celui d’une méthode, s’il s’agit d’une classe SAP (standard ou spécifique) visible via la transaction SE24, s’il s’agit d’une classe locale, visible uniquement dans le programme en cours d’exécution, ou s’il s’agit d’une classe locale définie dans une autre classe, comme représenté sur la Figure 2.7.

Debuger

Figure 2.7 : Point d’arrêt sur une méthode

Fonction

Il s’agit du même comportement que pour les méthodes, mais avec les modules de fonction. Il est à noter qu’il est possible de filtrer l’entrée selon les méthodes, fonctions, etc. en cliquant sur l’icône Debuger.

Il sera alors possible d’ajouter une condition au point d’arrêt, comme indiqué sur la Figure 2.8.

Utilisation du point d’arrêt Fonction

Dans cet exemple, nous allons définir un point d’arrêt dans la fonction CONVERSION_EXIT_MATN1_OUTPUT quand le paramètre INPUT est égal à ‘BW-5400’.

Debuger

Figure 2.8 : Condition d’entrée pour une fonction

Autres onglets

Concernant les autres fonctionnalités, leur utilisation est similaire et suit le même schéma de fonctionnement. Signalons peut-être l’onglet Message qui est très utile en cas de message d’erreur. Il suffira alors d’exécuter le débogueur grâce à l’instruction /h, puis de créer un point d’arrêt avec le bouton Créer un point d’arrêt ou le raccourci clavier F9, dans l’onglet Message, puis d’insérer l’ID du message, son numéro et son type pour trouver la ligne de programme ABAP.

Message d’erreur dans une transaction

On souhaite créer une commande d’achat (CA) dans la ME21N avec de mauvaises informations mais, très vite, un message d’erreur apparaît en bas de la fenêtre SAP (voir Figure 2.9).

Debuger

Figure 2.9 : Message d’erreur lors de la création d’une CA

En double-cliquant sur ce message d’erreur, le numéro de l’erreur s’affiche avec le détail du message. Dans l’exemple que nous venons de voir, le détail du message est celui de la Figure 2.10.

Debuger

Figure 2.10 : Message d’erreur de la ME21N

De retour sur l’écran de la ME21N, il suffit de lancer le débogueur via /h en validant deux fois : la première pour valider l’instruction et la deuxième pour lancer le débogueur (voir Figure 2.11). Ensuite, il faut insérer le message trouvé dans la fonction F9, comme indiqué sur la Figure 2.12.

Debuger

Figure 2.11 : Exécution du débogueur via /h

Debuger

Figure 2.12 : Définition du point d’arrêt

CalloutCaption  Cliquer sur le bouton Créer Point d’arrêt

CalloutCaption  Choisir l’onglet Message

CalloutCaption  Remplir les champs avec le message d’erreur rencontré

Après validation, il suffit de cliquer sur la fonction Suite ou d’appuyer sur F8 afin d’exécuter le programme jusqu’au point d’arrêt défini par le message. Cela permet de voir que le programme s’arrête à l’endroit où l’erreur est rencontrée, comme sur la Figure 2.13.

Debuger

Figure 2.13 : Ligne du code où se situe l’erreur

Ainsi, l’erreur provient d’un résultat d’un SELECT de la table T024W. La clause du SELECT est définie avec les champs de la division (WERKS) et de l’organisation d’achats (EKORG), venant respectivement des variables IM_WERKS et IM_EKORG. En double-cliquant sur ces variables, il est possible de voir leur contenu dans l’onglet Variables 1, sous la colonne Variable (voir Figure 2.14).

Debuger

Figure 2.14 : Aperçu des valeurs de variables

Nous reviendrons un peu plus tard en détail sur ce bloc de variables dans la section d’affichage rapide des variables du chapitre sur les outils SAP (voir section 3.2.3).

2.1.7   Créer point de surveillance Maj + F4

Le point de surveillance sert, comme son nom l’indique, à cibler une variable dans un programme avec la possibilité de lui attribuer une valeur à rechercher. Si le nom de cette variable est renseigné, le programme s’arrête lorsque la valeur est modifiée ou lorsqu’il atteint celle souhaitée.

Un programme à déboguer

Dans l’exemple ci-dessous, on ne souhaite afficher que les documents d’achat de type K (contrat). Le programme retourne la liste indiquée sur la Figure 2.15 :

DATA lv_date TYPE sy-datum.
 
"Prendre la date en cours et retirer 4 mois
CALL FUNCTION 'CCM_GO_BACK_MONTHS'
  EXPORTING
    currdate   = sy-datum
    backmonths = 4
  IMPORTING
    newdate    = lv_date.
 
"Sélection des commandes d'achat
SELECT ebeln, bstyp FROM ekko
  INTO TABLE @DATA(lt_ekko)
  WHERE aedat GE @lv_date.
 
"Boucle sur les commandes d'achat et affichage du n° de document
LOOP AT lt_ekko INTO DATA(ls_ekko).
  IF ls_ekko-bstyp = 'K'.
    WRITE / ls_ekko-ebeln.
  ENDIF.
ENDLOOP.

Debuger

Figure 2.15 : Résultat

Si le résultat paraît incertain et que l’on souhaite savoir pourquoi une valeur attendue n’apparaît pas (numéro de document 6050004111, par exemple), il est alors utile de définir un point de surveillance sur la variable des numéros de DA, à savoir LS_EKKO-EBELN. Il suffit alors de cliquer sur le bouton et la fenêtre représentée sur la Figure 2.16 s’affiche.

Debuger

Figure 2.16 : Fenêtre du point de surveillance

Elle est composée des parties suivantes :

Variable

Renseignez celle que vous souhaitez surveiller.

Nom de progr

Nom du programme où se situe la variable du champ précédent (par défaut, il sera renseigné par le nom du programme exécuté).

Points de surveillance

Lors d’un débogage assez complexe (programme standard, par exemple), il est possible qu’une variable soit présente dans un programme appelé plus tard, mais qui n’existe pas dans le programme au moment où le point de surveillance souhaite être défini. Il faudra alors avancer dans l’exécution du programme jusqu’à ce que l’on arrive au programme souhaité.

Type point de surveill.

Là encore, il en existe deux : le Pt surveill. sur var. qui, comme son nom l’indique, surveille toutes les données contenues dans une variable et le Pt surveill. sur attr. d’objet (Figure 2.17) qui, quant à lui, surveille toutes les données de type objet (classes, interfaces, etc.). Ainsi, lorsqu’un objet a été créé sous une référence, un point de surveillance peut être inséré afin que le programme s’arrête dès lors qu’il modifie un des attributs d’instance ou statiques. Lorsque le point de surveillance sur attributs d’objet est sélectionné, les options qui suivent sont modifiées afin de pouvoir filtrer selon les attributs d’instance ou les attributs statiques souhaités (publics, privés, protégés, etc.).

Debuger

Figure 2.17 : Point de surveillance sur attributs d’objet

Condition :

Enfin, la condition permet de définir la valeur souhaitée à laquelle le débogueur devra s’arrêter. Il existe plusieurs formes de condition.

Utilisation d’un point de surveillance

Pour les différents types de condition, l’exemple suivant, tiré de la fonction BAL_DB_LOAD qui lit les messages de log pour les afficher lors de la transaction SLG1, sera utilisé (voir Figure 2.18). La table interne L_T_BALHDR_CURRENT est alors composée des valeurs ci-après. Comme on le remarque, sur la Figure 2.19, la table possède plus de 27 000 entrées.

Debuger

Figure 2.18 : Exemple de fonction des logs SLG1

Debuger

Figure 2.19 : Table interne L_T_BALHDR_CURRENT

1.   La condition simple. Dans l’exemple ci-dessus, on souhaite que le débogueur s’arrête lorsque le champ L_S_LDAT-ADMIN-LOGNUMBER possède la valeur 451598773 située à ligne 14980 (voir Figure 2.20). Le déroulement du programme ligne par ligne s’avérerait très long. Le fait de définir le point de surveillance avec une condition simple permettra de gagner énormément de temps lors de l’analyse. Ainsi, pendant la boucle LOOP, le débogueur s’arrêtera à la ligne souhaitée.

Debuger

Figure 2.20 : Définition de la condition

2.   LINES( itab ) : Il est également possible de définir un point d’arrêt selon le nombre de lignes contenues dans une table. Toujours en s’appuyant sur l’exemple ci-dessus, nous souhaitons que le débogueur s’arrête lorsque la table interne de sortie -T_LDAT aura atteint 10 000 lignes, ce qui est représenté sur la Figure 2.21.

Debuger

Figure 2.21 : Utilisation de la fonction LINES

3.   STRLEN( string ) comme la fonction LINES pour une table interne, celle-ci va définir à quelle longueur de la chaîne de caractères le programme devra s’arrêter pour débogage. Dans l’exemple de la Figure 2.22, la variante lv_texte est incrémentée d’une lettre à chaque boucle, et nous souhaitons arrêter le programme pour le débogage lorsque la longueur du champ est égale à 5.

lv_texte = 'A'.
DO 10 TIMES.
  CONCATENATE lv_texte 'A' INTO lv_texte.
ENDDO.

Debuger

Figure 2.22 : Condition avec STRLEN

La condition STRLEN

La condition STRLEN ne fonctionne qu’avec des variables de type string, et il n’est pas possible d’en créer avec un type CHAR.

Sauvegarder mise en forme Ctrl + Maj + F3

Il est possible de sauvegarder la disposition et la mise en forme des différentes sections du débogueur. En effet, chaque onglet peut être modifié à souhait. Nous le verrons plus en détail au chapitre 4.1 Modification de l’interface.

2.1.8   Configurer couche de débogage Ctrl + Maj + F4

La configuration de la couche de débogage permet d’affiner l’exécution du débogueur en chargeant des profils existants ou en spécifiant ce dont on a besoin. Le détail de l’interface se présente comme dans la Figure 2.23.

Debuger

Figure 2.23 : Interface de la couche de débogage

En cochant l’option Débogage par couche actif, toute la partie inférieure qui restait grisée apparaît désormais comme étant modifiable.

Ainsi, l’interface est divisée en deux parties :

Utilis. d’ens. d’objets prédéf. (couche) via profils du débogueur

Cette partie permet de charger des profils existants que l’on peut retrouver en appuyant sur l’aide à la recherche F4. La liste des profils est alors chargée, il suffit d’en choisir un (FICO_GENERAL, par exemple) afin d’en étudier le contenu (voir Figure 2.24).

Debuger

Figure 2.24 : Ouverture d’un profil de débogage

Ainsi, le profil FICO_GENERAL présente le détail comme indiqué dans la Figure 2.25.

Debuger

Figure 2.25 : Détail du profil FICO_GENERAL

On peut voir que le profil FICO_GENERAL est composé de l’objet FICO lui-même paramétré en visibilité.

Pour un cas plus concret, nous allons maintenant créer un profil temporaire. Pour cela, il suffit de cliquer sur le bouton Profil temp. de la fenêtre principale, et à l’invite de la fenêtre, nous allons choisir Sans modèle, comme à la Figure 2.26.

Debuger

Figure 2.26 : Création d’un profil

La fenêtre des sélections de profil apparaît de nouveau. En insérant une nouvelle ligne, il est possible de sélectionner un ensemble d’objets (ici SALV_CORE).

Debuger

Figure 2.27 : Choix d’un profil

En double-cliquant sur l’objet, il est possible d’en voir le contenu et aussi d’en afficher le détail (Figure 2.28 et Figure 2.29).

Debuger

Figure 2.28 : Ouverture du détail de SALV

Debuger

Figure 2.29 : Détail de l’objet SALV

On peut alors s’apercevoir que l’objet SALV_CORE, composé de la sélection SALV, contient deux packages SALV et SLIS, ce qui signifie que notre profil temporaire ne s’arrêtera que dans les objets ABAP ayant pour package SALV et SLIS.

Bien entendu les objets et ensemble d’objets peuvent être spécifiques, et il est possible de les créer via la transaction SLAD.

Déf. Directe de l’ensemble d’objets visible (couche)

Dans cette section, il est possible de définir directement les packages, classes, programmes et interfaces implémentées. Dans l’exemple de la Figure 2.30, le débogueur a été configuré afin de s’arrêter uniquement dans les packages de type Z*.

Debuger

Figure 2.30 : Configuration pour appel de package Z*

Alle Inhalte. Mehr Informationen. Jetzt entdecken.

et.training - Ihre Lernplattform für SAP-Software

  • Zugriff auf alle Lerninhalte1
  • Regelmäßige Neuerscheinungen
  • Intelligenter Suchalgorithmus
  • Innovatives Leseerlebnis
  • Maßgeschneidere Lernpfade
  • Zertifikate & QA-Tests2

Sie haben bereits ein Konto?

1 Sie erhalten Zugriff auf alle Lerninhalte. Online-Trainings, Zertifikate sind NICHT Teil der Flatrate.

2 Weitere Informationen auf Anfrage.