ABAP Cloud vs ABAP classique : La comparaison complete 2025

Catégorie
Comparaison
Publié
Auteur
Johannes

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

AspectABAP classiqueABAP Cloud
Depuis quand ?Années 19802019 (ABAP Environment)
Disponible dansSAP ECC, S/4HANA On-PremSAP BTP, S/4HANA Cloud
Mode de développementToutes les fonctionnalités ABAPUniquement APIs Released
Technologie UIDynpro, WebDynpro, FioriUniquement Fiori
DéploiementOn-PremiseCloud & On-Premise
Stabilité des mises à jourSouvent ajustements manuelsAutomatique (Clean Core)
Courbe d’apprentissageMoyenneÉ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ée
DATA(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.
" Ou
CONCATENATE 'Bonjour ' lv_name '!' INTO lv_greeting.

ABAP Cloud :

" String Templates
DATA(lv_full_name) = |{ lv_first_name } { lv_last_name }|.
DATA(lv_greeting) = |Bonjour { lv_name }!|.
" Avec formatage
DATA(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 ligne
ls_customer-name = 'Nouveau nom'.
MODIFY TABLE lt_customers FROM ls_customer.

ABAP Cloud :

" Expression de table
TRY.
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 noms
DATA 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 filtre
DATA(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 explicites
SELECT Product, ProductDescription
FROM I_Product
INTO TABLE @DATA(lt_products)
WHERE ProductType = 'FERT'.
" @-Escaping est OBLIGATOIRE

Différence :

  • SELECT * interdit
  • Uniquement APIs Released (CDS Views avec statut Released)
  • @-Escaping obligatoire

1.7 Sous-routines (FORM/PERFORM)

ABAP classique :

" Autorisé en classique
FORM 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 MODULE
CALL 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 Released
SELECT Product, ProductDescription
FROM I_Product
INTO TABLE @DATA(lt_products).
" RAP/EML au lieu de BAPI
READ ENTITIES OF I_Product
ENTITY Product
ALL FIELDS
WITH VALUE #( ( Product = lv_product_id ) )
RESULT DATA(lt_result).

Comment trouver les APIs Released :

  1. ADT : Ctrl+Shift+A → Recherche avec filtre “API State: Released”
  2. SAP API Business Hub : api.sap.com
  3. 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 :

ComposantObjectif
CDS ViewModèle de données
Behavior Definition (BDEF)Logique CRUD, Actions, Validations
Behavior Implementation (BIL)Logique métier en ABAP
Service DefinitionQuelles entités sont exposées ?
Service BindingService OData (V2 ou V4)

Exemple - Scénario Managed :

managed implementation in class zbp_i_book unique;
strict ( 2 );
define behavior for ZI_BOOK alias Book
persistent 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 IDs
SELECT 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-test

Diffé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 :

  1. Bases ABAP (2-4 semaines)
  2. Tables internes, Selects (2 semaines)
  3. Dynpro/Rapports (2-3 semaines)
  4. BAPIs, RFCs (1-2 semaines)

Total : ~3 mois pour être productif

ABAP Cloud

Effort d’apprentissage : Élevé

Démarrage :

  1. Syntaxe ABAP moderne (2 semaines)
  2. CDS Views (3-4 semaines)
  3. RAP (6-8 semaines)
  4. SAP Fiori (4-6 semaines)
  5. 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 Cloud

Outils :

  • 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èreABAP classiqueABAP CloudGagnant
Barrière à l’entréeBasseHauteClassique
Maintenabilité à long termeMoyenneHauteCloud
PerformanceBonneTrès bonneCloud
Stabilité des mises à jourFaibleTrès hauteCloud
FlexibilitéTrès hauteMoyenneClassique
Prêt pour le CloudNonOuiCloud
Modernité UIMoyenne (Dynpro ancien)Haute (Fiori uniquement)Cloud
Expérience développeurBonneTrès bonne (ADT)Cloud
Communauté/RessourcesTrès largeEn croissanceClassique
PérennitéMoyenneTrès hauteCloud

Conclusion :

  • Court terme : ABAP classique plus rapide et flexible
  • Long terme : ABAP Cloud plus maintenable et pérenne

Ressources complémentaires

Sur abapcloud.com :

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 !