Concept de niveau Clean Core (A-D) : La voie moderne vers ABAP Cloud

Catégorie
ABAP Cloud
Publié
Auteur
Johannes

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/InterfaceObjectif
CL_ABAP_CONTEXT_INFOInformations 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_MESSAGEMessages 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 released
DATA: 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 classique
CALL 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-released
DATA(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 SAP
SELECT SINGLE *
FROM mara
WHERE matnr = @lv_matnr
INTO @ls_material.
" ❌❌ Niveau D: Acces a un module de fonction non public
CALL FUNCTION 'SD_SALES_DOCUMENT_READ_INT"
EXPORTING
document_number = lv_vbeln
IMPORTING
sales_header = ls_header.

Comparaison : Concept de niveau vs. modele 3-Tier

AspectModele 3-TierConcept de niveau (A-D)
ClassificationPar couche d’architecturePar utilisation d’API
ComplexiteElevee (wrapper necessaires)Faible (classification directe)
AutomatisationClassification manuelleAutomatisee par ATC
TransitionsStrictement separeesFluides
FocusEncapsulationModernisation
ObjectifAtteindre TIER-1Atteindre niveau A

Mapping entre les modeles

Modele 3-Tier Concept de niveau
─────────────────────────────────────
TIER-1 (ABAP Cloud) → Niveau A
TIER-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 API

Strategie pratique de modernisation

Phase 1 : Inventaire

  1. Effectuer une analyse ATC avec la variante de verification pour Clean Core
  2. Determiner la repartition par niveau et compter les objets par niveau
  3. Identifier les objets niveau D critiques

Phase 2 : Priorisation

PrioriteMigrationMesures
1 (Haute)D → A/BRemplacer les acces directs aux tables
2 (Moyenne)C → A/BModerniser les objets non classifies
3 (Basse)B → ARemplacer les BAPIs par des Released APIs

Phase 3 : Mise en oeuvre

" AVANT: Code niveau D
SELECT SINGLE * FROM mara WHERE matnr = @lv_matnr INTO @ls_material.
" APRES: Code niveau A
SELECT 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

ExigenceNiveau recommandeJustification
Nouvelle application RAPNiveau ACloud-ready des le depart
Integration avec StandardNiveau A/BSelon l’API disponible
Modernisation legacyNiveau B → AMigration progressive
Quick Fix (temporaire)Niveau BAvec ticket de modernisation
Logique specifique clientNiveau ALes objets propres sont libres

Bonnes pratiques pour Clean Core niveau A

Do’s

  • Utilisez CL_ABAP_CONTEXT_INFO pour 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.