Le concept de niveau Clean Core (A-D) est la derniere approche de SAP pour la classification et la modernisation du code ABAP. Il remplace le modele 3-Tier plus complexe par un systeme base sur des niveaux plus simple. Cet article explique les quatre niveaux, montre l’integration ATC et offre des aides pratiques a la decision pour la modernisation.
Pourquoi un nouveau concept de niveau ?
Le modele 3-Tier s’est avere complexe en pratique. La separation claire en TIER-1, TIER-2 et TIER-3 etait theoriquement propre, mais difficile a maintenir dans les projets reels. SAP a reagi et introduit une approche plus pragmatique avec le concept de niveau :
- Classification plus simple sans separation stricte en couches
- Detection automatique par les verifications ATC
- Transitions fluides entre les niveaux
- Focus sur l’utilisation des APIs plutot que sur les couches d’architecture
Les quatre niveaux en apercu
┌─────────────────────────────────────────────────────────────┐│ Niveau A : Released APIs ││ ────────────────────── ││ • Uniquement des APIs SAP approuvees (C1-Contract) ││ • Compatibilite Cloud complete ││ • Perenne et stable aux mises a jour ││ • Conforme Clean Core │└──────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐│ Niveau B : Classic APIs ││ ────────────────────── ││ • APIs classiques stables (BAPIs, RFC) ││ • Non released pour Cloud, mais documentees ││ • Risque de mise a jour modere ││ • Modernisation recommandee │└──────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐│ Niveau C : Unclassified ││ ────────────────────── ││ • Acces a des objets non classifies ││ • Pas de contrat SAP, pas de garantie de stabilite ││ • Risque de mise a jour eleve ││ • Modernisation necessaire │└──────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐│ Niveau D : noAPI (acces directs) ││ ────────────────────── ││ • Acces directs aux tables (SELECT sur tables SAP) ││ • Modules de fonction non publics ││ • Risque de mise a jour maximal ││ • Modernisation immediate necessaire │└──────────────────────────────────────────────────────────────┘Niveau A : Released APIs
Le niveau A est l’objectif de toute modernisation. Le code a ce niveau utilise exclusivement des APIs SAP approuvees avec un contrat stable (C1).
Caracteristiques du niveau A
- Contrat API : C1 (Released for Cloud Development)
- Stabilite de mise a jour : Garantie par SAP
- Cloud-Readiness : Entierement compatible
- Documentation : Documentation officielle SAP disponible
Exemple : Code niveau A
CLASS zcl_flight_booking_a DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION. METHODS get_user_info RETURNING VALUE(rs_user) TYPE cl_abap_context_info=>ty_context_info.
METHODS get_current_date RETURNING VALUE(rv_date) TYPE d.
METHODS read_flights RETURNING VALUE(rt_flights) TYPE zt_flights.
ENDCLASS.
CLASS zcl_flight_booking_a IMPLEMENTATION. METHOD get_user_info. " ✅ Niveau A: Released API pour info utilisateur rs_user-user_id = cl_abap_context_info=>get_user_technical_name( ). rs_user-user_alias = cl_abap_context_info=>get_user_alias( ). rs_user-system_date = cl_abap_context_info=>get_system_date( ). ENDMETHOD.
METHOD get_current_date. " ✅ Niveau A: Released API pour date rv_date = cl_abap_context_info=>get_system_date( ). ENDMETHOD.
METHOD read_flights. " ✅ Niveau A: Acces a sa propre table Z (toujours autorise) SELECT * FROM zflight_book INTO TABLE @rt_flights. ENDMETHOD.ENDCLASS.APIs niveau A frequemment utilisees
| Classe/Interface | Objectif |
|---|---|
CL_ABAP_CONTEXT_INFO | Informations utilisateur et systeme |
XCO_CP_* | Extension Components (DDIC, CDS, Repository) |
CL_ABAP_RANDOM_* | Nombres aleatoires |
CL_ABAP_CONV_* | Conversion de jeu de caracteres |
IF_ABAP_BEHV_MESSAGE | Messages RAP |
Niveau B : Classic APIs
Le niveau B comprend les APIs classiques stables comme les BAPIs et les modules de fonction RFC. Ceux-ci sont documentes et relativement stables, mais non released pour le Cloud.
Caracteristiques du niveau B
- Contrat API : Stable, mais pas C1
- Stabilite de mise a jour : Generalement donnee, mais non garantie
- Cloud-Readiness : Pas directement, wrapper necessaire
- Documentation : Disponible (BAPI Explorer, doc Module de fonction)
Exemple : Code niveau B
" ⚠️ Niveau B: BAPI - stable mais non releasedDATA: lt_return TYPE TABLE OF bapiret2.
CALL FUNCTION 'BAPI_CUSTOMER_GETDETAIL2" EXPORTING customerno = lv_customer_id IMPORTING customerdata = ls_customer TABLES return = lt_return.
" ⚠️ Niveau B: Module de fonction devises classiqueCALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY" EXPORTING date = sy-datum foreign_amount = lv_amount foreign_currency = 'USD" local_currency = 'EUR" IMPORTING local_amount = lv_result.Objets niveau B typiques
- BAPIs (modules de fonction BAPI_*)
- Modules de fonction RFC
- Elements de donnees et domaines documentes
Niveau C : Unclassified
Le niveau C contient des acces a des objets SAP non classifies. Ceux-ci n’ont pas de contrat API et peuvent changer lors des mises a jour.
Caracteristiques du niveau C
- Contrat API : Aucun
- Stabilite de mise a jour : Non garantie
- Cloud-Readiness : Non donnee
- Documentation : Souvent uniquement interne
Exemple : Code niveau C
" ❌ Niveau C: Classe non-releasedDATA(lo_flight_srv) = NEW cl_flight_service( ).DATA(lt_schedule) = lo_flight_srv->get_connections( lv_carrier ).
" ❌ Niveau C: Utilisation de classes GUI (non compatibles Cloud)DATA(lo_alv) = NEW cl_gui_alv_grid( i_parent = lo_container ).lo_alv->set_table_for_first_display( CHANGING it_outtab = lt_data ).Niveau D : noAPI (acces directs)
Le niveau D est le niveau le plus critique. Le code a ce niveau accede directement aux structures internes SAP et presente le risque le plus eleve lors des mises a jour.
Caracteristiques du niveau D
- Contrat API : Aucun, implementation interne
- Stabilite de mise a jour : Non donnee
- Cloud-Readiness : Exclue
- Documentation : Aucune publique
Exemple : Code niveau D
" ❌❌ Niveau D: Acces direct a une table interne SAPSELECT SINGLE * FROM mara WHERE matnr = @lv_matnr INTO @ls_material.
" ❌❌ Niveau D: Acces a un module de fonction non publicCALL FUNCTION 'SD_SALES_DOCUMENT_READ_INT" EXPORTING document_number = lv_vbeln IMPORTING sales_header = ls_header.Comparaison : Concept de niveau vs. modele 3-Tier
| Aspect | Modele 3-Tier | Concept de niveau (A-D) |
|---|---|---|
| Classification | Par couche d’architecture | Par utilisation d’API |
| Complexite | Elevee (wrapper necessaires) | Faible (classification directe) |
| Automatisation | Classification manuelle | Automatisee par ATC |
| Transitions | Strictement separees | Fluides |
| Focus | Encapsulation | Modernisation |
| Objectif | Atteindre TIER-1 | Atteindre niveau A |
Mapping entre les modeles
Modele 3-Tier Concept de niveau─────────────────────────────────────TIER-1 (ABAP Cloud) → Niveau ATIER-2 (API-Wrapper) → Niveau A + B (selon contenu du wrapper)TIER-3 (Classic) → Niveau B, C ou D (selon utilisation API)Integration ATC pour la surveillance des niveaux
L’ATC (ABAP Test Cockpit) detecte automatiquement quel niveau a un objet de developpement.
Variante de verification ATC pour Clean Core
Variante de verification: Z_CLEAN_CORE_LEVELS─────────────────────────────────────Verifications:├── ABAP Cloud Readiness│ ├── Released API Usage (Niveau A)│ ├── Classic API Detection (Niveau B)│ ├── Unclassified Objects (Niveau C)│ └── Direct Table Access (Niveau D)│├── Priorites:│ ├── Findings Niveau D: Priorite 1 (Erreur)│ ├── Findings Niveau C: Priorite 2 (Avertissement)│ └── Findings Niveau B: Priorite 3 (Info)│└── Exceptions: └── Tables Z: toujours Niveau A (objets propres)Interpreter les resultats ATC
" Finding ATC: Niveau D - Acces direct a la table" ────────────────────────────────────────────────" Objet: ZCL_FLIGHT_LEGACY" Ligne: 45" Finding: SELECT FROM MARA (table non-released)" Priorite: 1 (Erreur)" Recommandation: Utilisez la CDS View I_Product ou BAPI
" Finding ATC: Niveau C - Objet non classifie" ────────────────────────────────────────────────" Objet: ZCL_CUSTOMER_SERVICE" Ligne: 78" Finding: Utilisation de CL_GUI_ALV_GRID" Priorite: 2 (Avertissement)" Recommandation: Migrez vers Fiori/RAP
" Finding ATC: Niveau B - Classic API" ────────────────────────────────────────────────" Objet: ZCL_ORDER_PROCESSOR" Ligne: 112" Finding: CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2"" Priorite: 3 (Info)" Recommandation: Verifiez l'alternative Released APIStrategie pratique de modernisation
Phase 1 : Inventaire
- Effectuer une analyse ATC avec la variante de verification pour Clean Core
- Determiner la repartition par niveau et compter les objets par niveau
- Identifier les objets niveau D critiques
Phase 2 : Priorisation
| Priorite | Migration | Mesures |
|---|---|---|
| 1 (Haute) | D → A/B | Remplacer les acces directs aux tables |
| 2 (Moyenne) | C → A/B | Moderniser les objets non classifies |
| 3 (Basse) | B → A | Remplacer les BAPIs par des Released APIs |
Phase 3 : Mise en oeuvre
" AVANT: Code niveau DSELECT SINGLE * FROM mara WHERE matnr = @lv_matnr INTO @ls_material.
" APRES: Code niveau ASELECT SINGLE Product, ProductType, BaseUnit FROM I_Product WHERE Product = @lv_matnr INTO @ls_material.Aide a la decision : Quel niveau pour quel cas d’utilisation
Matrice de decision
| Exigence | Niveau recommande | Justification |
|---|---|---|
| Nouvelle application RAP | Niveau A | Cloud-ready des le depart |
| Integration avec Standard | Niveau A/B | Selon l’API disponible |
| Modernisation legacy | Niveau B → A | Migration progressive |
| Quick Fix (temporaire) | Niveau B | Avec ticket de modernisation |
| Logique specifique client | Niveau A | Les objets propres sont libres |
Bonnes pratiques pour Clean Core niveau A
Do’s
- Utilisez
CL_ABAP_CONTEXT_INFOpour les infos systeme/utilisateur - Utilisez les librairies XCO pour l’acces aux metadonnees
- Appuyez-vous sur les CDS Views (I_*) pour les donnees SAP
- Implementez la nouvelle logique dans les RAP Business Objects
- Utilisez les Released Exceptions (CX_*)
Don’ts
- Pas de SELECT direct sur les tables SAP (MARA, VBAK, …)
- Pas de SY-UNAME, SY-DATUM pour le code Cloud
- Pas d’appels de modules de fonction non-released
- Pas d’utilisation des classes CL_GUI_*
- Pas de CALL TRANSACTION ou SUBMIT REPORT
Conclusion
Le concept de niveau Clean Core (A-D) simplifie considerablement la modernisation du code ABAP :
- Niveau A : L’objectif - entierement Cloud-ready
- Niveau B : Solution de transition acceptable avec les APIs classiques
- Niveau C : Besoin de modernisation identifiable
- Niveau D : Action immediate necessaire
Compare au modele 3-Tier, le concept de niveau offre une approche plus pragmatique qui peut etre surveillee automatiquement par l’integration ATC. L’accent est mis sur l’utilisation des APIs plutot que sur des couches d’architecture rigides.
Pour la mise en pratique d’une strategie Clean Core, voir Strategie de niveau Clean Core - Et maintenant ?. Plus d’informations sur les Released APIs sous Definition ABAP Cloud.