ADT Astuces & Conseils : Développement ABAP efficace dans Eclipse

Catégorie
DevOps
Publié
Auteur
Johannes

ABAP Development Tools (ADT) dans Eclipse offrent beaucoup plus de fonctionnalités que ce qui est visible au premier abord. Avec les bons raccourcis, modèles et fonctionnalités, vous pouvez considérablement augmenter votre productivité.

Raccourcis clavier essentiels

Les raccourcis suivants doivent être connus de tout développeur ABAP :

RaccourciFonctionDescription
Ctrl+Shift+AOpen ABAP Development ObjectRecherche rapide de n’importe quel objet
F3Navigate to DefinitionAller à la définition
Alt+Left/RightBack/ForwardAvant/arrière dans la navigation
Ctrl+OQuick OutlineAperçu de toutes les méthodes et attributs
Ctrl+TType HierarchyAfficher la hiérarchie d’héritage
Ctrl+Shift+GWhere-Used ListListe d’utilisation
Ctrl+HSearchRecherche globale
Ctrl+LGo to LineAller à une ligne spécifique
F4Open TypeOuvrir la définition de type

Édition de code

RaccourciFonctionDescription
Ctrl+1Quick FixCorrection rapide et suggestions
Ctrl+SpaceCode CompletionComplétion de code
Ctrl+Shift+FFormat Source CodeFormater le code (Pretty Printer)
Ctrl+/Toggle CommentCommenter/décommenter la ligne
Ctrl+DDelete LineSupprimer la ligne
Alt+Up/DownMove LineDéplacer la ligne
Ctrl+Alt+Up/DownDuplicate LineDupliquer la ligne
Ctrl+Shift+EnterInsert Line AboveInsérer une nouvelle ligne au-dessus
Shift+EnterInsert Line BelowInsérer une nouvelle ligne en-dessous

Refactoring

RaccourciFonctionDescription
Alt+Shift+RRenameRenommer l’élément
Alt+Shift+MExtract MethodExtraire le code dans une méthode
Alt+Shift+LExtract Local VariableExtraire une variable locale
Alt+Shift+CChange Method SignatureModifier la signature de méthode
Alt+Shift+IInlineMettre en ligne la variable/méthode

Exécution et Debug

RaccourciFonctionDescription
F8RunExécuter
F9Toggle BreakpointDéfinir/supprimer un point d’arrêt
F5Step IntoEntrer dans la méthode (Debug)
F6Step OverPasser par-dessus la méthode (Debug)
F7Step ReturnSortir de la méthode
Ctrl+F2TerminateTerminer le débogage

Gestion de l’éditeur

RaccourciFonctionDescription
Ctrl+ESwitch EditorBasculer entre les éditeurs ouverts
Ctrl+WClose EditorFermer l’éditeur
Ctrl+Shift+WClose AllFermer tous les éditeurs
Ctrl+MMaximize/RestoreMaximiser/restaurer l’éditeur
Ctrl+F6Next EditorÉditeur suivant
Ctrl+Shift+F6Previous EditorÉditeur précédent

Fonctionnalités cachées

ADT offre de nombreuses fonctionnalités moins connues mais très utiles :

Synchronise le Project Explorer avec l’éditeur actuel :

┌──────────────────────────────────────────────────────────────┐
│ Project Explorer │
├──────────────────────────────────────────────────────────────┤
│ │
│ [🔗] Toggle Link with Editor │
│ ↓ │
│ Quand actif : lors de l'ouverture d'un fichier, celui-ci │
│ est automatiquement marqué dans le Project Explorer │
│ │
│ Activer : Icône Toolbar ou View Menu → Link with Editor │
│ │
└──────────────────────────────────────────────────────────────┘

2. Block Selection Mode

Permet la sélection et l’édition par colonnes :

" Normal: Sélection ligne par ligne
" Block Mode (Alt+Shift+A): Sélection colonne par colonne
" Avant - Avec Block Selection éditer plusieurs lignes simultanément :
DATA lv_field1 TYPE string.
DATA lv_field2 TYPE string.
DATA lv_field3 TYPE string.
" Marquer le bloc et modifier → toutes les lignes éditées simultanément

Activation : Alt+Shift+A ou Edit → Toggle Block Selection Mode

3. Compare With

Différents modes de comparaison pour le code :

Clic droit sur objet → Compare With :
┌─────────────────────────────────────────────────┐
│ Local History... │ Versions locales antérieures │
│ Revision... │ Révision spécifique │
│ Latest from Server │ Version serveur actuelle │
│ Active/Inactive │ Actif vs. Inactif │
│ Each Other │ Comparer deux objets │
└─────────────────────────────────────────────────┘

4. Local History

Eclipse sauvegarde automatiquement les versions locales :

Clic droit → Compare With → Local History
┌──────────────────────────────────────────────────────────────┐
│ Local History for ZCL_ORDER_SERVICE │
├──────────────────────────────────────────────────────────────┤
│ │
│ 📅 Feb 13, 2026, 14:32:15 │ Version actuelle │
│ 📅 Feb 13, 2026, 14:15:22 │ Avant refactoring │
│ 📅 Feb 13, 2026, 13:45:08 │ Après extraction de méthode │
│ 📅 Feb 13, 2026, 11:20:33 │ Version initiale │
│ │
│ [ Compare ] [ Replace ] [ Restore ] │
│ │
└──────────────────────────────────────────────────────────────┘

Astuce : Récupérable même après suppression accidentelle !

5. Annotations

ADT affiche des annotations utiles en marge de ligne :

┌────┬──────────────────────────────────────────┐
│ 42 │ METHOD process_data. │ ← Début de méthode
│ 43 │ DATA lv_result TYPE string. │
│ ⚡ │ SELECT SINGLE * │ ← Avertissement performance
│ 45 │ FROM ztable │
│ 46 │ INTO @DATA(ls_data) │
│ 🔴 │ WHERE field = @iv_param. │ ← Point d'arrêt
│ 48 │ │
│ ⚠️ │ IF ls_data IS INITIAL. "TODO: Handle │ ← Marqueur TODO/FIXME
│ 50 │ RETURN. │
│ 51 │ ENDIF. │
│ 52 │ ENDMETHOD. │
└────┴──────────────────────────────────────────┘

6. Breadcrumb Navigation

Affiche le chemin actuel dans le code :

┌──────────────────────────────────────────────────────────────┐
│ ZCL_ORDER_SERVICE > PUBLIC SECTION > process_order │
│ ↑ ↑ ↑ │
│ Clic: Affiche Clic: Affiche Clic: Affiche │
│ toutes les classes toutes sections toutes méthodes │
└──────────────────────────────────────────────────────────────┘
Activer: Window → Preferences → General → Editors → Show breadcrumb

7. Quick Access

Fenêtre de commande universelle :

Ctrl+3 → Ouvrir Quick Access
┌──────────────────────────────────────────────────────────────┐
│ 🔍 [activate ] │
├──────────────────────────────────────────────────────────────┤
│ Commands │
│ ▸ Activate Object (Ctrl+F3) │
│ ▸ Activate All Inactive Objects │
│ │
│ Views │
│ ▸ Activation Log │
│ │
│ Preferences │
│ ▸ ABAP Development → Editors → Source Code → Activation │
└──────────────────────────────────────────────────────────────┘

Modèles de code

Les modèles de code accélèrent considérablement l’écriture de code répétitif.

Modèles intégrés

ADT contient de nombreux modèles prédéfinis. Tapez le nom du modèle et appuyez sur Ctrl+Space :

ModèleSortieDescription
methodDéfinition de méthodeCrée le squelette de méthode
classDéfinition de classeCrée la structure de classe
ifBloc IFCrée IF…ENDIF
loopLOOP ATCrée un bloc LOOP
selectSELECT-StatementCrée une requête SELECT
tryTRY…CATCHCrée la gestion d’erreur
dataDéclaration DATACrée une déclaration de variable
constCONSTANTSCrée une constante

Utilisation des modèles

" Tapez : loop + Ctrl+Space
" Le modèle est inséré :
LOOP AT ${itab} INTO DATA(${wa}).
${cursor}
ENDLOOP.
" ${itab}, ${wa} = Espaces réservés à remplir (naviguer avec Tab)
" ${cursor} = Position finale du curseur

Créer vos propres modèles

Window → Preferences → ABAP Development → Editors → Source Code → Templates
┌──────────────────────────────────────────────────────────────┐
│ Templates │
├──────────────────────────────────────────────────────────────┤
│ │
│ [New...] [Edit...] [Remove] [Import...] [Export...] │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Name │ Context │ Description │ │
│ ├────────────────┼──────────┼──────────────────────────────┤ │
│ │ logentry │ ABAP │ Application Log Entry │ │
│ │ singleton │ ABAP │ Singleton Pattern │ │
│ │ rapaction │ ABAP │ RAP Action Method │ │
│ │ unittest │ ABAP │ Unit Test Method │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘

Modèles personnalisés pratiques

Modèle RAP Action (rapaction) :

METHOD ${action_name} FOR MODIFY
IMPORTING keys FOR ACTION ${entity}~${action_name}.
READ ENTITIES OF ${root_entity} IN LOCAL MODE
ENTITY ${entity}
ALL FIELDS WITH CORRESPONDING #( keys )
RESULT DATA(lt_entities).
LOOP AT lt_entities ASSIGNING FIELD-SYMBOL(<ls_entity>).
${cursor}
ENDLOOP.
MODIFY ENTITIES OF ${root_entity} IN LOCAL MODE
ENTITY ${entity}
UPDATE FIELDS ( ${fields} )
WITH VALUE #( FOR ls_entity IN lt_entities (
%tky = ls_entity-%tky
${field_assignments}
) )
REPORTED DATA(lt_reported).
reported = CORRESPONDING #( DEEP lt_reported ).
ENDMETHOD.

Modèle Unit Test (unittest) :

METHOD ${test_name}.
" Given
${given}
" When
DATA(lo_cut) = NEW ${class_under_test}( ).
DATA(lv_result) = lo_cut->${method_under_test}( ${parameters} ).
" Then
cl_abap_unit_assert=>assert_equals(
act = lv_result
exp = ${expected}
msg = '${message}' ).
ENDMETHOD.

Modèle Application Log (logentry) :

DATA(lo_log) = cl_bali_log=>create_with_header(
header = cl_bali_header_setter=>create(
object = '${log_object}"
subobject = '${log_subobject}"
)
).
lo_log->add_item(
item = cl_bali_message_setter=>create_from_sy( )
).
cl_bali_log_db=>get_instance( )->save_log( log = lo_log ).

Variables de modèle

VariableDescription
${cursor}Position finale du curseur
${word_selection}Mot actuellement sélectionné
${line_selection}Ligne actuellement sélectionnée
${date}Date actuelle
${time}Heure actuelle
${user}Nom d’utilisateur
${enclosing_method}Nom de la méthode englobante
${enclosing_type}Nom de la classe englobante

Quick Fixes et outils de refactoring

Quick Fix (Ctrl+1)

La fonction la plus puissante dans ADT. Disponible quand un problème ou une suggestion existe :

Créer une méthode manquante :

" Écrire un appel de méthode pour une méthode inexistante :
DATA(lv_result) = calculate_total( lt_items ).
" Curseur sur calculate_total → Ctrl+1
" → Choisir "Create method calculate_total"
" → La signature de méthode est générée automatiquement

Déclarer une variable manquante :

" Écrire du code avec une variable non déclarée :
lv_status = 'ACTIVE'.
" Curseur sur lv_status → Ctrl+1
" → Choisir "Declare local variable lv_status"
" → DATA lv_status TYPE ??? est inséré

Ajouter un import :

" Utiliser une classe sans instruction USE :
DATA(lo_client) = cl_web_http_client_manager=>create_by_http_destination( ... ).
" Ctrl+1 sur la classe
" → Les imports manquants sont proposés

Quick Fixes disponibles

SituationOption Quick Fix
Variable non définieDeclare local/instance variable
Méthode non définieCreate method
Type non définiCreate class/interface/type
Exception non géréeAdd CATCH block / Add to signature
Syntaxe obsolèteConvert to modern syntax
Code inaccessibleRemove unreachable code
Variable inutiliséeRemove unused declaration
ENDIF/ENDLOOP manquantInsert missing statement

Extract Method (Alt+Shift+M)

Extrait le code marqué dans une nouvelle méthode :

" Avant - Marquer le code :
METHOD process_order.
" --- Code marqué Début ---
SELECT *
FROM zorder_items
INTO TABLE @DATA(lt_items)
WHERE order_id = @iv_order_id.
DATA(lv_total) = REDUCE #( INIT sum = 0
FOR ls_item IN lt_items
NEXT sum += ls_item-amount ).
" --- Code marqué Fin ---
" Traitement ultérieur...
ENDMETHOD.
" Alt+Shift+M → Entrer le nom de méthode : "calculate_order_total"
" Après :
METHOD process_order.
DATA(lv_total) = calculate_order_total( iv_order_id ).
" Traitement ultérieur...
ENDMETHOD.
METHOD calculate_order_total.
SELECT *
FROM zorder_items
INTO TABLE @DATA(lt_items)
WHERE order_id = @iv_order_id.
rv_total = REDUCE #( INIT sum = 0
FOR ls_item IN lt_items
NEXT sum += ls_item-amount ).
ENDMETHOD.

Rename (Alt+Shift+R)

Renomme les éléments dans tout le projet :

┌──────────────────────────────────────────────────────────────┐
│ Rename Method │
├──────────────────────────────────────────────────────────────┤
│ │
│ Renommer la méthode 'process_order' en : │
│ [process_sales_order ] │
│ │
│ ☑ Mettre à jour les références │
│ ☑ Mettre à jour les entrées de text pool │
│ ☐ Conserver la méthode originale comme wrapper obsolète │
│ │
│ Aperçu : │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ ✓ ZCL_ORDER_SERVICE - Définition de méthode │ │
│ │ ✓ ZCL_ORDER_SERVICE - Implémentation de méthode │ │
│ │ ✓ ZCL_ORDER_PROCESSOR - Appel de méthode (Ligne 45) │ │
│ │ ✓ ZCL_TEST_ORDER - Appel de méthode test (Ligne 23) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ [ Preview > ] [ OK ] [ Cancel ] │
│ │
└──────────────────────────────────────────────────────────────┘

Change Method Signature (Alt+Shift+C)

Modifie les paramètres et met à jour tous les appelants :

┌──────────────────────────────────────────────────────────────┐
│ Change Method Signature: process_order │
├──────────────────────────────────────────────────────────────┤
│ │
│ Paramètres : │
│ ┌─────────┬──────────┬───────────────┬────────────────┐ │
│ │ Type │ Nom │ Type │ Défaut │ │
│ ├─────────┼──────────┼───────────────┼────────────────┤ │
│ │ IMPORT │ iv_order │ zorder_id │ │ │
│ │ IMPORT │ iv_mode │ string │ 'DEFAULT' │ NOUVEAU │
│ │ RETURN │ rv_ok │ abap_bool │ │ │
│ └─────────┴──────────┴───────────────┴────────────────┘ │
│ │
│ [Add] [Remove] [Move Up] [Move Down] │
│ │
│ ☑ Mettre à jour tous les appelants │
│ │
└──────────────────────────────────────────────────────────────┘

Vues et perspectives utiles

Les vues les plus importantes

1. ABAP Element Info (F2)

Affiche la documentation et les détails de l’élément sous le curseur :

┌──────────────────────────────────────────────────────────────┐
│ ABAP Element Info │
├──────────────────────────────────────────────────────────────┤
│ │
│ METHOD process_order │
│ ───────────────────── │
│ │
│ Importing: │
│ IV_ORDER_ID TYPE ZORDER_ID - Identifiant de commande │
│ IV_MODE TYPE STRING - Mode de traitement (optionnel) │
│ │
│ Returning: │
│ RV_SUCCESS TYPE ABAP_BOOL - Résultat du traitement │
│ │
│ Exceptions: │
│ ZCX_ORDER_ERROR - Si la commande ne peut être traitée │
│ │
│ Documentation: │
│ Traite la commande donnée selon les règles métier. │
│ La commande doit être dans le statut 'OPEN' ou 'PENDING'. │
│ │
└──────────────────────────────────────────────────────────────┘

2. Transport Organizer

Gère les ordres de transport :

Window → Show View → Other → ABAP → Transport Organizer
┌──────────────────────────────────────────────────────────────┐
│ Transport Organizer │
├──────────────────────────────────────────────────────────────┤
│ │
│ 📁 Modifiable │
│ └─ 📦 DEVK900123 - Feature: Traitement de commande │
│ └─ 📄 ZCL_ORDER_SERVICE │
│ └─ 📄 ZI_ORDER │
│ └─ 📄 ZC_ORDER │
│ │
│ 📁 Released │
│ └─ 📦 DEVK900120 - Bugfix: Null pointer │
│ └─ 📦 DEVK900118 - Enhancement: Logging │
│ │
└──────────────────────────────────────────────────────────────┘

3. ABAP Language Help (F1)

Ouvre l’aide contextuelle :

Curseur sur un mot-clé (par ex. REDUCE) → F1
→ Ouvre la documentation SAP dans le navigateur
→ Syntaxe, exemples, restrictions

4. Problems View

Affiche toutes les erreurs et avertissements :

Window → Show View → Problems
┌──────────────────────────────────────────────────────────────┐
│ Problems │
├──────────────────────────────────────────────────────────────┤
│ │
│ 🔴 Errors (2) │
│ └─ Variable LV_RESULT not defined (ZCL_ORDER:45) │
│ └─ Method GET_DATA not found (ZCL_ORDER:67) │
│ │
│ ⚠️ Warnings (5) │
│ └─ Variable LV_TEMP declared but not used (ZCL_ORDER:23) │
│ └─ Consider using inline declaration (ZCL_ORDER:34) │
│ └─ SELECT without ORDER BY (ZCL_REPORT:89) │
│ │
│ ℹ️ Info (3) │
│ └─ TODO: Implement error handling (ZCL_ORDER:102) │
│ │
└──────────────────────────────────────────────────────────────┘
" Double-clic → Saute à l'emplacement du problème

5. ATC Results

Affiche les résultats de la vérification ABAP Test Cockpit :

Run → ABAP Test Cockpit → Check ABAP Development Object
┌──────────────────────────────────────────────────────────────┐
│ ATC Results │
├──────────────────────────────────────────────────────────────┤
│ │
│ Object: ZCL_ORDER_SERVICE │
│ Check Variant: STANDARD │
│ │
│ 🔴 Priority 1 (Blocking) │
│ └─ Injection SQL possible (Ligne 78) │
│ │
│ ⚠️ Priority 2 (Warning) │
│ └─ Texte codé en dur trouvé, utilisez un symbole (Ligne 45) │
│ └─ Méthode trop complexe (complexité cyclomatique > 10) │
│ │
│ ℹ️ Priority 3 (Information) │
│ └─ Considérez l'utilisation de REF TO au lieu de TYPE REF TO │
│ │
└──────────────────────────────────────────────────────────────┘

6. Outline View

Aperçu de la structure de l’objet actuel :

Window → Show View → Outline
┌──────────────────────────────────────────────────────────────┐
│ Outline │
├──────────────────────────────────────────────────────────────┤
│ │
│ 📦 ZCL_ORDER_SERVICE │
│ ├─ 📂 PUBLIC SECTION │
│ │ ├─ 📋 INTERFACES: if_order_service │
│ │ ├─ ⚙️ METHODS │
│ │ │ ├─ process_order │
│ │ │ ├─ cancel_order │
│ │ │ └─ get_status │
│ │ └─ 📊 TYPES │
│ │ └─ ty_order_status │
│ │ │
│ ├─ 📂 PRIVATE SECTION │
│ │ ├─ 📦 DATA │
│ │ │ ├─ mv_client │
│ │ │ └─ mo_logger │
│ │ └─ ⚙️ METHODS │
│ │ ├─ validate_order │
│ │ └─ calculate_total │
│ │ │
│ └─ 📂 IMPLEMENTATION │
│ │
└──────────────────────────────────────────────────────────────┘

Changer de perspective

ADT offre des perspectives spécialisées pour différentes tâches :

Window → Perspective → Open Perspective → Other...
┌──────────────────────────────────────────────────────────────┐
│ Open Perspective │
├──────────────────────────────────────────────────────────────┤
│ │
│ ▸ ABAP Développement standard │
│ ▸ ABAP Profiling Analyse de performance │
│ ▸ Debug Session de débogage │
│ ▸ ABAP Cross Trace Analyse de trace │
│ ▸ Git Contrôle de version │
│ │
└──────────────────────────────────────────────────────────────┘

Perspective ABAP Profiling :

Pour l’analyse de performance du code ABAP :

  • ABAP Trace View
  • SQL Trace Results
  • Memory Analysis
  • Runtime Analysis

Sauvegarder une disposition de vue personnalisée

1. Organiser les vues selon vos souhaits
2. Window → Perspective → Save Perspective As...
3. Donner un nom : "My ABAP Development"
4. Accessible via Window → Perspective → Open Perspective

Astuces avancées

Favoris et Bookmarks

Favoris (pour les objets fréquemment utilisés) :

Clic droit sur objet → Add to Favorites
Window → Show View → Favorites
┌──────────────────────────────────────────────────────────────┐
│ Favorites │
├──────────────────────────────────────────────────────────────┤
│ ★ ZCL_ORDER_SERVICE │
│ ★ ZI_ORDER_ROOT │
│ ★ ZORDER_CONFIG │
│ ★ SE80 (Transaction) │
└──────────────────────────────────────────────────────────────┘

Bookmarks (pour des emplacements de code) :

Clic droit sur numéro de ligne → Add Bookmark
Window → Show View → Bookmarks
┌──────────────────────────────────────────────────────────────┐
│ Bookmarks │
├──────────────────────────────────────────────────────────────┤
│ 📑 TODO: Refactor this method (ZCL_ORDER:45) │
│ 📑 Bug: Edge case not handled (ZCL_PROCESSOR:128) │
│ 📑 Review: Performance optimization needed (ZCL_REPORT:67) │
└──────────────────────────────────────────────────────────────┘

Task Tags

ADT reconnaît automatiquement les tags de commentaire spéciaux :

" TODO: Implement retry logic
" FIXME: This causes memory leak
" XXX: Temporary workaround, remove after release
" HACK: Quick fix for demo, refactor later
" Ceux-ci apparaissent automatiquement dans la vue Tasks :
" Window → Show View → Tasks

Multi-Cursor Editing

Plusieurs curseurs simultanément pour l’édition parallèle :

Ctrl+Clic → Ajoute un curseur supplémentaire
Ctrl+Shift+L → Curseur à chaque ligne de la sélection
" Exemple : Renommer toutes les variables
DATA lv_var1 TYPE string. | ← Curseur 1
DATA lv_var2 TYPE string. | ← Curseur 2
DATA lv_var3 TYPE string. | ← Curseur 3
" Taper simultanément modifie toutes les lignes

Zen Mode (Mode Focus)

Maximise l’éditeur sans distractions :

Ctrl+M → Maximiser l'éditeur
Ctrl+M+M → Plein écran (Zen Mode)
Ou : Window → Appearance → Toggle Full Screen

Personnaliser la coloration syntaxique

Window → Preferences → ABAP Development → Editors → Source Code → Syntax Coloring
Éléments personnalisables :
- Mots-clés (DATA, IF, LOOP...)
- Chaînes et littéraux
- Commentaires
- Méthodes et attributs
- Variables locales vs. globales

Bonnes pratiques

ThèmeRecommandation
Apprendre les raccourcisCommencer avec les 10 plus importants, étendre progressivement
Utiliser Quick FixCtrl+1 est la fonction la plus puissante - toujours vérifier en premier
Créer des modèlesCréer vos propres modèles pour les patterns récurrents
Organiser les vuesSauvegarder votre propre disposition et l’enregistrer comme perspective
Définir des bookmarksUtiliser les bookmarks pour les revues de code et TODOs
Local HistoryVérifier avant les grands changements - bouée de sauvetage en cas d’erreur
ATC régulièrementVérifier continuellement la qualité du code avec ATC
Block SelectionUtiliser Alt+Shift+A pour les modifications en masse
Keyboard-firstMoins de souris = développement plus rapide
Changer de perspectiveUtiliser des perspectives spécialisées pour le débogage et le profilage

Thèmes complémentaires