ABAP Cloud vs. ABAP classique - quelles sont les différences ? Quelle version devriez-vous apprendre ? Cette comparaison complète vous montre côte à côte ce qui a changé et pourquoi.
Aperçu : ABAP Cloud vs ABAP classique
| Aspect | ABAP classique | ABAP Cloud |
|---|---|---|
| Depuis quand ? | Années 1980 | 2019 (ABAP Environment) |
| Disponible dans | SAP ECC, S/4HANA On-Prem | SAP BTP, S/4HANA Cloud |
| Mode de développement | Toutes les fonctionnalités ABAP | Uniquement APIs Released |
| Technologie UI | Dynpro, WebDynpro, Fiori | Uniquement Fiori |
| Déploiement | On-Premise | Cloud & On-Premise |
| Stabilité des mises à jour | Souvent ajustements manuels | Automatique (Clean Core) |
| Courbe d’apprentissage | Moyenne | Élevée (beaucoup de nouveaux concepts) |
En bref : ABAP Cloud est la variante moderne et compatible cloud d’ABAP avec des règles plus strictes mais une meilleure maintenabilité.
1. Comparaison de syntaxe : Ancien vs. Nouveau
1.1 Déclaration de données
ABAP classique :
DATA lv_name TYPE string.DATA lv_count TYPE i.lv_name = 'Max Mustermann'.lv_count = 42.
DATA lt_customers TYPE TABLE OF ty_customer.DATA ls_customer TYPE ty_customer.ABAP Cloud :
" Déclaration inline préféréeDATA(lv_name) = 'Max Mustermann'.DATA(lv_count) = 42.
DATA(lt_customers) = VALUE ty_customer_table( ( id = 1 name = 'Max' ) ( id = 2 name = 'Anna' )).Différence : ABAP Cloud préfère les déclarations inline pour un code plus court.
1.2 Opérations sur les chaînes
ABAP classique :
DATA lv_full_name TYPE string.CONCATENATE lv_first_name lv_last_name INTO lv_full_name SEPARATED BY space.
" OuCONCATENATE 'Bonjour ' lv_name '!' INTO lv_greeting.ABAP Cloud :
" String TemplatesDATA(lv_full_name) = |{ lv_first_name } { lv_last_name }|.DATA(lv_greeting) = |Bonjour { lv_name }!|.
" Avec formatageDATA(lv_price) = |Prix: { lv_amount CURRENCY = lv_currency }|.Différence : CONCATENATE est obsolète dans ABAP Cloud. Les String Templates sont plus modernes et puissants.
1.3 Tables internes
ABAP classique :
DATA ls_customer TYPE ty_customer.
READ TABLE lt_customers INTO ls_customer WITH KEY id = lv_id.
IF sy-subrc = 0. " Client trouvé WRITE: ls_customer-name.ENDIF.
" Modifier une lignels_customer-name = 'Nouveau nom'.MODIFY TABLE lt_customers FROM ls_customer.ABAP Cloud :
" Expression de tableTRY. DATA(ls_customer) = lt_customers[ id = lv_id ]. " Client trouvé cl_demo_output=>display( ls_customer-name ).
" Modifier directement une ligne lt_customers[ id = lv_id ]-name = 'Nouveau nom'.
CATCH cx_sy_itab_line_not_found. " Non trouvéENDTRY.
" Ou : Avec OPTIONAL (pas d'exception)DATA(ls_customer) = VALUE #( lt_customers[ id = lv_id ] OPTIONAL ).Différence : Les expressions de table sont plus courtes et modernes, mais nécessitent une gestion des exceptions.
1.4 Structures de contrôle
ABAP classique :
IF lv_status = 'A'. lv_message = 'Actif'.ELSEIF lv_status = 'I'. lv_message = 'Inactif'.ELSE. lv_message = 'Inconnu'.ENDIF.
CASE lv_type. WHEN 'A'. lv_result = 'Type A'. WHEN 'B'. lv_result = 'Type B'. WHEN OTHERS. lv_result = 'Autre type'.ENDCASE.ABAP Cloud :
" Expression COND (IF inline)DATA(lv_message) = COND string( WHEN lv_status = 'A' THEN 'Actif" WHEN lv_status = 'I' THEN 'Inactif" ELSE 'Inconnu").
" Expression SWITCH (CASE inline)DATA(lv_result) = SWITCH string( lv_type WHEN 'A' THEN 'Type A" WHEN 'B' THEN 'Type B" ELSE 'Autre type").Différence : COND/SWITCH sont fonctionnels (retournent une valeur) au lieu d’être impératifs.
1.5 Boucles et itérations
ABAP classique :
DATA lv_total TYPE i VALUE 0.LOOP AT lt_orders INTO DATA(ls_order). lv_total = lv_total + ls_order-amount.ENDLOOP.
" Extraire des nomsDATA lt_names TYPE TABLE OF string.DATA ls_name TYPE string.LOOP AT lt_customers INTO DATA(ls_customer). ls_name = ls_customer-name. APPEND ls_name TO lt_names.ENDLOOP.ABAP Cloud :
" REDUCE (pour les agrégations)DATA(lv_total) = REDUCE i( INIT sum = 0 FOR ls_order IN lt_orders NEXT sum = sum + ls_order-amount ).
" Expression FOR (pour les transformations)DATA(lt_names) = VALUE string_table( FOR ls_customer IN lt_customers ( ls_customer-name )).
" Avec filtreDATA(lt_active_names) = VALUE string_table( FOR ls_cust IN lt_customers WHERE ( status = 'ACTIVE' ) ( ls_cust-name )).Différence : REDUCE/FOR sont déclaratifs et souvent plus performants.
1.6 Accès base de données
ABAP classique :
" SELECT * non recommandé mais autoriséSELECT * FROM mara INTO TABLE @DATA(lt_materials) WHERE mtart = 'FERT'.
" Sans @-Escaping (ancienne syntaxe)SELECT matnr maktx FROM mara INTO TABLE lt_materials WHERE mtart = 'FERT'.ABAP Cloud :
" SELECT * INTERDIT dans ABAP Cloud" Uniquement CDS Views Released + Champs explicitesSELECT Product, ProductDescription FROM I_Product INTO TABLE @DATA(lt_products) WHERE ProductType = 'FERT'.
" @-Escaping est OBLIGATOIREDifférence :
SELECT *interdit- Uniquement APIs Released (CDS Views avec statut Released)
@-Escaping obligatoire
1.7 Sous-routines (FORM/PERFORM)
ABAP classique :
" Autorisé en classiqueFORM calculate_total USING pv_amount TYPE p CHANGING pv_total TYPE p. pv_total = pv_amount * '1.19'.ENDFORM.
PERFORM calculate_total USING lv_amount CHANGING lv_total.ABAP Cloud :
" FORM/PERFORM INTERDIT" Uniquement classes et méthodes
CLASS lcl_calculator DEFINITION. PUBLIC SECTION. CLASS-METHODS calculate_total IMPORTING iv_amount TYPE p RETURNING VALUE(rv_total) TYPE p.ENDCLASS.
CLASS lcl_calculator IMPLEMENTATION. METHOD calculate_total. rv_total = iv_amount * '1.19'. ENDMETHOD.ENDCLASS.
DATA(lv_total) = lcl_calculator=>calculate_total( lv_amount ).Différence : ABAP Cloud impose la programmation orientée objet.
2. Développement UI
ABAP classique
Technologies disponibles :
- Dynpro (SAP GUI classique)
- WebDynpro ABAP
- SAP Fiori (avec SAPUI5)
- BSP (Business Server Pages)
Exemple Dynpro :
" Écran 100 avec MODULECALL SCREEN 100.
MODULE status_0100 OUTPUT. SET PF-STATUS 'MAIN'. SET TITLEBAR 'TITLE'.ENDMODULE.
MODULE user_command_0100 INPUT. CASE sy-ucomm. WHEN 'SAVE'. " Sauvegarder WHEN 'BACK'. LEAVE TO SCREEN 0. ENDCASE.ENDMODULE.ABAP Cloud
Technologies disponibles :
- SAP Fiori (avec SAPUI5 ou Fiori Elements)
- Dynpro INTERDIT
- WebDynpro ABAP INTERDIT
Exemple Fiori Elements (RAP) :
" Pas de code UI nécessaire ! Généré automatiquement à partir des annotations
" Service Binding@EndUserText.label: 'Book Service"define service ZUI_BOOK_O4 { expose ZC_Book as Book;}
" Metadata Extension (mise en page UI)@UI.lineItem: [{ position: 10 }]@UI.identification: [{ position: 10 }]BookId;Différence : Dynpro appartient au passé. Fiori est l’avenir (basé web, responsive).
3. Accès base de données & APIs
ABAP classique
Accès à :
- Toutes les tables SAP (MARA, VBAK, KNA1, etc.)
- Tous les modules fonctionnels
- Tous les BAPIs
- Toutes les classes (même internes)
Exemple :
SELECT matnr maktx FROM mara INTO TABLE @DATA(lt_materials) WHERE mtart = 'FERT'.
CALL FUNCTION 'BAPI_MATERIAL_GET_DETAIL" EXPORTING material = lv_matnr IMPORTING material_general_data = ls_material.ABAP Cloud
Accès à :
- Uniquement APIs Released (CDS Views, classes avec statut Released)
- Pas d’accès direct aux tables SAP
- Beaucoup d’anciens BAPIs non disponibles
Exemple :
" CDS View ReleasedSELECT Product, ProductDescription FROM I_Product INTO TABLE @DATA(lt_products).
" RAP/EML au lieu de BAPIREAD ENTITIES OF I_Product ENTITY Product ALL FIELDS WITH VALUE #( ( Product = lv_product_id ) ) RESULT DATA(lt_result).Comment trouver les APIs Released :
- ADT :
Ctrl+Shift+A→ Recherche avec filtre “API State: Released” - SAP API Business Hub : api.sap.com
- Objets Released : Coche verte dans ADT
Différence : ABAP Cloud a des restrictions d’accès pour une meilleure stabilité des mises à jour.
4. RAP (RESTful ABAP Programming)
ABAP classique
RAP disponible ?
- Oui, mais optionnel (à partir de S/4HANA 2020)
- Vous pouvez continuer à utiliser BAPIs, Dynpro, etc.
ABAP Cloud
RAP disponible ?
- Modèle de développement principal
- Pour les apps transactionnelles, RAP est le seul moyen
Composants RAP :
| Composant | Objectif |
|---|---|
| CDS View | Modèle de données |
| Behavior Definition (BDEF) | Logique CRUD, Actions, Validations |
| Behavior Implementation (BIL) | Logique métier en ABAP |
| Service Definition | Quelles entités sont exposées ? |
| Service Binding | Service OData (V2 ou V4) |
Exemple - Scénario Managed :
managed implementation in class zbp_i_book unique;strict ( 2 );
define behavior for ZI_BOOK alias Bookpersistent table zbook_tab{ create; update; delete;
field ( readonly ) BookId; field ( numbering : managed ) BookId;
validation validateIsbn on save { field Isbn; } action markAsRead result [1] $self;}Différence : RAP est central dans ABAP Cloud, optionnel dans ABAP classique.
5. Performance
ABAP classique
Problèmes de performance possibles :
- SELECT dans les boucles (fréquent)
- Pas d’optimisations intégrées
- Tuning manuel nécessaire
Exemple de problème :
LOOP AT lt_customers INTO DATA(ls_customer). " SELECT dans une boucle - très lent ! SELECT SINGLE * FROM kna1 WHERE kunnr = ls_customer-id INTO @DATA(ls_detail).ENDLOOP.ABAP Cloud
Avantages de performance :
- CDS Views avec optimisations automatiques
- Le framework RAP optimise les accès DB
- Mise en cache intégrée
- EML regroupe automatiquement les opérations
Exemple de solution :
" Un SELECT pour tous les IDsSELECT FROM I_Customer FIELDS Customer, CustomerName FOR ALL ENTRIES IN @lt_customers WHERE Customer = @lt_customers-id INTO TABLE @DATA(lt_details).Différence : ABAP Cloud impose les bonnes pratiques, ABAP classique permet les mauvais patterns.
6. Tests
ABAP classique
Tests unitaires :
- ABAP Unit disponible
- Mais souvent pas utilisé
- Pas de framework Test Seam
CLASS ltc_test DEFINITION FOR TESTING. PRIVATE SECTION. METHODS test_calculation FOR TESTING.ENDCLASS.
CLASS ltc_test IMPLEMENTATION. METHOD test_calculation. DATA(lv_result) = zcl_calculator=>calculate( 10 ). cl_abap_unit_assert=>assert_equals( act = lv_result exp = 12 ). ENDMETHOD.ENDCLASS.ABAP Cloud
Tests unitaires :
- ABAP Unit recommandé
- CDS Test Double Framework
- RAP Test Seams
CLASS ltc_test DEFINITION FOR TESTING. PRIVATE SECTION. CLASS-DATA environment TYPE REF TO if_cds_test_environment.
CLASS-METHODS class_setup. METHODS test_create_book FOR TESTING.ENDCLASS.
CLASS ltc_test IMPLEMENTATION. METHOD class_setup. environment = cl_cds_test_environment=>create_for_multiple_cds( i_for_entities = VALUE #( ( i_for_entity = 'ZI_BOOK' ) ) ). ENDMETHOD.
METHOD test_create_book. MODIFY ENTITIES OF zi_book ENTITY Book CREATE FROM VALUE #( ( %cid = 'B1' Title = 'Test' ) ). " Assertions de test ENDMETHOD.ENDCLASS.Différence : ABAP Cloud a de meilleurs outils de test et les tests sont culturellement plus importants.
7. Déploiement & DevOps
ABAP classique
Déploiement :
- Transports (DEV → QAS → PRD)
- Validations manuelles
- Peu de CI/CD
Versioning :
- abapGit optionnel
- Souvent pas de Git
ABAP Cloud
Déploiement :
- Transports + abapGit sans interruption
- Pipelines CI/CD (ABAP Environment Pipelines)
- Déploiement continu possible
Versioning :
- abapGit recommandé
- Intégration Git dans ADT
Exemple pipeline CI/CD :
# Azure DevOps / GitHub Actions- name: Run ABAP Unit Tests run: abap test --package ZBOOK
- name: Deploy to QAS run: abap deploy --target QAS
- name: Run Integration Tests run: abap integration-testDifférence : ABAP Cloud est plus compatible DevOps.
8. Quand utiliser quelle version ?
Utilisez ABAP classique si :
- Vous avez SAP ECC/S/4HANA On-Premise
- Du code legacy doit être maintenu
- La migration vers ABAP Cloud n’est (pas encore) prévue
- Vous devez travailler avec Dynpro
- Projets à court/moyen terme (<5 ans)
Scénarios exemples :
- Maintenance de rapports existants
- Adaptations rapides au code standard
- Projets avec budget/temps limité
Utilisez ABAP Cloud si :
- Vous démarrez un nouveau développement
- Déploiement cloud prévu (SAP BTP)
- La maintenabilité à long terme est importante (>5 ans)
- Vous suivez la stratégie Clean Core
- Développement moderne (RAP, Fiori)
Scénarios exemples :
- Nouvelles apps SAP Fiori
- Projets S/4HANA Cloud
- Développement greenfield
- Applications SaaS sur SAP BTP
9. Courbe d’apprentissage
ABAP classique
Effort d’apprentissage : Moyen
Démarrage :
- Bases ABAP (2-4 semaines)
- Tables internes, Selects (2 semaines)
- Dynpro/Rapports (2-3 semaines)
- BAPIs, RFCs (1-2 semaines)
Total : ~3 mois pour être productif
ABAP Cloud
Effort d’apprentissage : Élevé
Démarrage :
- Syntaxe ABAP moderne (2 semaines)
- CDS Views (3-4 semaines)
- RAP (6-8 semaines)
- SAP Fiori (4-6 semaines)
- Tests & DevOps (2 semaines)
Total : ~5-6 mois pour être productif
Mais : Meilleure maintenabilité à long terme !
10. Migration : Classique → Cloud
Chemin de migration
ABAP classique ↓Moderniser (ABAP Cleaner, nouvelle syntaxe) ↓Identifier les APIs Released ↓Nouveau développement conforme ABAP Cloud ↓Migration progressive ↓ABAP CloudOutils :
- Custom Code Migration App (App Fiori)
- ABAP Test Cockpit (Vérifications ATC)
- ABAP Cleaner (Modernisation de syntaxe)
Voir : Guide de migration ABAP Cloud
11. Coûts
ABAP classique
Coûts de licence :
- Licence On-Premise (unique + maintenance)
- Pas de coûts cloud
Coûts développeur :
- Développeur ABAP moyen : 60-80k EUR/an
ABAP Cloud
Coûts de licence :
- SAP BTP : Pay-per-Use (à partir de ~200 EUR/mois)
- Ou : S/4HANA Cloud (coûts de licence plus élevés)
Coûts développeur :
- Développeur ABAP Cloud : 70-90k EUR/an (demande plus élevée)
À long terme : ABAP Cloud souvent moins cher grâce à :
- Moins d’effort de maintenance
- Mises à jour automatiques
- Coûts d’infrastructure réduits (Cloud)
12. Résumé : Matrice de décision
| Critère | ABAP classique | ABAP Cloud | Gagnant |
|---|---|---|---|
| Barrière à l’entrée | Basse | Haute | Classique |
| Maintenabilité à long terme | Moyenne | Haute | Cloud |
| Performance | Bonne | Très bonne | Cloud |
| Stabilité des mises à jour | Faible | Très haute | Cloud |
| Flexibilité | Très haute | Moyenne | Classique |
| Prêt pour le Cloud | Non | Oui | Cloud |
| Modernité UI | Moyenne (Dynpro ancien) | Haute (Fiori uniquement) | Cloud |
| Expérience développeur | Bonne | Très bonne (ADT) | Cloud |
| Communauté/Ressources | Très large | En croissance | Classique |
| Pérennité | Moyenne | Très haute | Cloud |
Conclusion :
- Court terme : ABAP classique plus rapide et flexible
- Long terme : ABAP Cloud plus maintenable et pérenne
Ressources complémentaires
Sur abapcloud.com :
- Guide de migration ABAP Cloud
- Feuille de route développeur ABAP Cloud 2025
- Aide-mémoire ABAP Cloud 2025
- 10 erreurs ABAP Cloud les plus fréquentes
- Série tutoriel RAP
Ressources externes :
Votre avis ?
- Développez-vous avec ABAP classique ou ABAP Cloud ?
- Planifiez-vous une migration ?
- Qu’est-ce qui vous manque dans ABAP Cloud ?
Partagez votre expérience dans les commentaires !
Bonne chance dans votre décision !