Steampunk vs. Embedded Steampunk : Comparaison des architectures ABAP Cloud

Catégorie
ABAP Cloud
Publié
Auteur
Johannes

Steampunk et Embedded Steampunk sont deux architectures pour le developpement ABAP Cloud. Toutes deux utilisent le meme langage de programmation ABAP Cloud, mais different fondamentalement en termes de deploiement, de stockage des donnees et de cas d’utilisation. Cet article explique les differences et aide a choisir le bon modele.

Clarification des termes

SAP utilise differentes denominations pour ses environnements ABAP Cloud :

TermeDenomination officielleEnvironnement
SteampunkSAP BTP ABAP EnvironmentInstance BTP autonome
Embedded SteampunkS/4HANA Cloud ABAP EnvironmentPartie de S/4HANA Cloud

Le nom “Steampunk” est apparu comme nom de code interne chez SAP et s’est etabli dans la communaute.

Vue d’ensemble des architectures

Steampunk (BTP ABAP Environment)

┌─────────────────────────────────────────────────────────┐
│ SAP Business Technology Platform │
├─────────────────────────────────────────────────────────┤
│ ┌────────────────────────────────────────────────────┐ │
│ │ BTP ABAP Environment │ │
│ │ ┌────────────────┬───────────────────────────┐ │ │
│ │ │ ABAP Runtime │ SAP HANA Database │ │ │
│ │ │ │ (dedie) │ │ │
│ │ │ - RAP │ │ │ │
│ │ │ - CDS │ ┌─────────────────┐ │ │ │
│ │ │ - ABAP Cloud │ │ Donnees propres│ │ │ │
│ │ │ │ │ (pas de S/4) │ │ │ │
│ │ └────────────────┴────┴─────────────────┴────┘ │ │
│ └────────────────────────────────────────────────────┘ │
│ │ │
│ OData / REST APIs │
│ │ │
│ ┌────────────────────────▼────────────────────────────┐│
│ │ S/4HANA (optionnel) ││
│ │ (Integration via APIs) ││
│ └─────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────┘

Caracteristiques principales :

  • Environnement ABAP completement autonome
  • Base de donnees HANA propre sans donnees S/4HANA
  • Integration avec S/4HANA uniquement via APIs (Side-by-Side)
  • Cycles de release independants
  • Multi-Cloud (AWS, Azure, GCP)

Embedded Steampunk (S/4HANA Cloud ABAP Environment)

┌─────────────────────────────────────────────────────────┐
│ S/4HANA Cloud System │
├─────────────────────────────────────────────────────────┤
│ ┌────────────────────────────────────────────────────┐ │
│ │ Standard S/4HANA │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ SAP Standard Code │ │ │
│ │ │ (Financials, Logistics, etc.) │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ┌────────────────────▼─────────────────────────┐ │ │
│ │ │ ABAP Cloud Environment (Embedded) │ │ │
│ │ │ │ │ │
│ │ │ ┌──────────────────────────────────────┐ │ │ │
│ │ │ │ Custom Code (ABAP Cloud) │ │ │ │
│ │ │ │ - Released APIs uniquement │ │ │ │
│ │ │ │ - RAP Extensions │ │ │ │
│ │ │ │ - BAdI Implementations │ │ │ │
│ │ │ └──────────────────────────────────────┘ │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ┌────────────────────▼─────────────────────────┐ │ │
│ │ │ Base de donnees HANA partagee │ │ │
│ │ │ (Donnees S/4HANA + Tables personnalisees) │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘

Caracteristiques principales :

  • Partie du systeme S/4HANA Cloud
  • Acces direct aux donnees S/4HANA via Released APIs
  • Extension On-Stack du standard
  • Mises a jour et releases gerees par SAP
  • Pas de licence supplementaire requise

Comparaison detaillee

Architecture et deploiement

AspectSteampunkEmbedded Steampunk
DeploiementInstance BTP autonomePartie de S/4HANA Cloud
Base de donneesInstance HANA propreBD S/4HANA partagee
IsolationCompletement isoleDans la stack S/4HANA
ScalabiliteScalable independammentScale avec S/4HANA
Multi-CloudAWS, Azure, GCP, SAP DCDatacenters SAP

APIs disponibles et Released Objects

Les deux environnements utilisent le modele ABAP Cloud, mais avec une portee differente :

CLASS zcl_api_comparison DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS zcl_api_comparison IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
" ═══════════════════════════════════════════════════════
" APIs disponibles dans LES DEUX environnements :
" ═══════════════════════════════════════════════════════
" ABAP Basis APIs
DATA(lo_random) = cl_abap_random_int=>create(
seed = cl_abap_random=>seed( )
min = 1
max = 100
).
out->write( |Random: { lo_random->get_next( ) }| ).
" XCO Library
DATA(lo_table) = xco_cp_abap_dictionary=>database_table( 'SFLIGHT' ).
IF lo_table->exists( ).
out->write( 'SFLIGHT existe' ).
ENDIF.
" HTTP Client
DATA(lo_client) = cl_web_http_client_manager=>create_by_http_destination(
cl_http_destination_provider=>create_by_url( 'https://api.example.com' )
).
" ═══════════════════════════════════════════════════════
" APIs UNIQUEMENT dans Embedded Steampunk (S/4HANA) :
" ═══════════════════════════════════════════════════════
" S/4HANA Business Objects (uniquement dans S/4HANA Cloud)
" SELECT * FROM I_SalesOrder WHERE ...
" SELECT * FROM I_BusinessPartner WHERE ...
" SELECT * FROM I_Product WHERE ...
" Ces CDS Views ne sont PAS disponibles dans BTP ABAP Environment
" car il n'y a pas de donnees S/4HANA !
out->write( 'Comparaison API terminee' ).
ENDMETHOD.
ENDCLASS.

Comparaison des Released Objects

CategorieSteampunk (BTP)Embedded Steampunk
ABAP Basis✅ Complet✅ Complet
XCO Library✅ Complet✅ Complet
RAP Runtime✅ Complet✅ Complet
Infrastructure CDS✅ Complet✅ Complet
S/4HANA Business Objects❌ Non disponible✅ Released APIs
I_SalesOrder, I_Customer, etc.
S/4HANA BAdIs✅ Released BAdIs
S/4HANA Behavior Extensions

Systeme de transport et cycle de vie

┌─────────────────────────────────────────────────────────┐
│ Steampunk (BTP ABAP Environment) │
├─────────────────────────────────────────────────────────┤
│ │
│ Git Repository (abapGit / gCTS) │
│ │ │
│ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ DEV │ ─► │ QAS │ ─► │ PRD │ │
│ │(Branch 1│ │(Branch 2│ │(Main) │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ ► Paysage auto-gere │
│ ► Strategie de branches flexible │
│ ► Integration CI/CD possible │
│ ► Cycles de release propres │
│ │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Embedded Steampunk (S/4HANA Cloud) │
├─────────────────────────────────────────────────────────┤
│ │
│ Software Component (ATO) │
│ │ │
│ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ DEV │ ─► │ TST │ ─► │ PRD │ │
│ │ (fixe) │ │ (fixe) │ │ (fixe) │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ ► Paysage gere par SAP │
│ ► Paysage fixe a 3 systemes │
│ ► Mises a jour SAP trimestrielles │
│ ► Transport via ATO (Adaptation Transport Organizer) │
│ │
└─────────────────────────────────────────────────────────┘

Cas d’utilisation

Quand utiliser Steampunk (BTP ABAP Environment) ?

Scenarios ideaux :

  1. Nouvelles applications Cloud-Native

    • Applications metier autonomes
    • Microservices avec backend ABAP
    • APIs pour partenaires externes
  2. Solutions SaaS Multi-Tenant

    • Produits logiciels propres
    • Plateformes cross-clients
  3. Developpement independant de S/4HANA

    • Pas de systeme S/4HANA existant
    • Cycles de release independants requis
  4. Hub d’integration

    • Plateforme d’integration centrale
    • Orchestration d’APIs
CLASS zcl_btp_use_case DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
" Exemple : Application SaaS autonome sur BTP
METHODS process_external_order
IMPORTING
iv_order_json TYPE string
RETURNING
VALUE(rv_result) TYPE string.
ENDCLASS.
CLASS zcl_btp_use_case IMPLEMENTATION.
METHOD process_external_order.
" Logique metier propre - independante de S/4HANA
TRY.
" Parser JSON
DATA(lo_json) = /ui2/cl_json=>deserialize(
json = iv_order_json
jsonx = '' ).
" Utiliser des tables propres (pas S/4HANA)
INSERT INTO zorders VALUES @ls_order.
" Integration avec des backends arbitraires
DATA(lo_client) = cl_web_http_client_manager=>create_by_http_destination(
cl_http_destination_provider=>create_by_url(
'https://erp-backend.example.com/api/orders' )
).
" Traitement...
rv_result = 'SUCCESS'.
CATCH cx_root INTO DATA(lo_error).
rv_result = lo_error->get_text( ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

Quand utiliser Embedded Steampunk (S/4HANA Cloud) ?

Scenarios ideaux :

  1. Extensions S/4HANA

    • Custom Fields et logique
    • Adaptations de processus
    • Implementations BAdI
  2. Integration avec le standard

    • Applications propres avec donnees S/4HANA
    • Extension des processus standard
    • Rapports personnalises sur donnees S/4HANA
  3. Side-by-Side n’est pas une option

    • Processus critiques en latence
    • Volumes de donnees importants
    • Couplage etroit requis
  4. Strategie Clean Core

    • Extensions sans modification
    • Adaptations compatibles avec les mises a jour
CLASS zcl_embedded_use_case DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
" Exemple : Extension S/4HANA
METHODS get_customer_with_orders
IMPORTING
iv_customer TYPE kunnr
RETURNING
VALUE(rs_result) TYPE zts_customer_orders.
ENDCLASS.
CLASS zcl_embedded_use_case IMPLEMENTATION.
METHOD get_customer_with_orders.
" Acces direct aux donnees S/4HANA via Released APIs
SELECT SINGLE
Customer,
CustomerName,
CustomerFullName,
CustomerClassification
FROM I_Customer
WHERE Customer = @iv_customer
INTO @rs_result-customer_data.
" Commandes du client
SELECT
SalesOrder,
SalesOrderType,
SalesOrganization,
NetAmount,
TransactionCurrency
FROM I_SalesOrder
WHERE SoldToParty = @iv_customer
AND OverallSDProcessStatus <> 'C"
INTO TABLE @rs_result-open_orders.
" Combiner avec des tables personnalisees
SELECT
inquiry_id,
subject,
status,
priority
FROM zinquiry
WHERE customer = @iv_customer
INTO TABLE @rs_result-custom_inquiries.
ENDMETHOD.
ENDCLASS.

Matrice de decision

Decision rapide par criteres

CritereSteampunkEmbedded Steampunk
Donnees S/4HANA directement necessaires
Application autonome
Multi-Cloud requis
Etendre le standard (BAdIs)
Releases independants
Maintenir Clean Core
Developper un produit SaaS
Licence S/4HANA Cloud deja acquise

Arbre de decision

┌─────────────────────────┐
│ Avez-vous besoin d'un │
│ acces direct aux │
│ donnees S/4HANA ? │
└───────────┬─────────────┘
┌───────────┴───────────┐
│ │
OUI NON
│ │
┌───────────▼───────────┐ ┌───────▼────────────┐
│ La performance/ │ │ Developpez-vous │
│ latence est-elle │ │ un produit │
│ critique ? │ │ propre ? │
└───────────┬───────────┘ └───────┬────────────┘
│ │
┌───────┴───────┐ ┌───────┴───────┐
│ │ │ │
OUI NON OUI NON
│ │ │ │
▼ │ ▼ ▼
┌───────────────┐ │ ┌───────────┐ ┌──────────────┐
│ Embedded │ │ │ Steampunk │ │ Les deux │
│ Steampunk │ │ │ (BTP) │ │ possibles │
└───────────────┘ │ └───────────┘ │ │
│ │ Facteurs : │
│ │ - Licence │
│ │ - Competences│
│ │ - Strategie │
▼ └──────────────┘
┌───────────────┐
│ Integration │
│ Side-by-Side │
│ avec BTP │
│ Steampunk │
└───────────────┘

Scenarios hybrides

Dans la pratique, de nombreuses entreprises combinent les deux approches :

Exemple d’architecture : Configuration entreprise

┌─────────────────────────────────────────────────────────────┐
│ Architecture entreprise │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────┐ ┌────────────────────────┐ │
│ │ S/4HANA Cloud │ │ BTP │ │
│ │ ┌────────────────┐ │ │ ┌────────────────────┐ │ │
│ │ │Embedded │ │ │ │ Steampunk │ │ │
│ │ │Steampunk │ │◄─────►│ │ (BTP ABAP Env) │ │ │
│ │ │ │ │ API │ │ │ │ │
│ │ │ - Extensions │ │ │ │ - Hub Integration │ │ │
│ │ │ - Custom Fields│ │ │ │ - Portail Partenaire│ │ │
│ │ │ - BAdIs │ │ │ │ - Analytics │ │ │
│ │ └────────────────┘ │ │ └────────────────────┘ │ │
│ └────────────────────┘ └────────────────────────┘ │
│ │ │ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Fiori Launchpad / Work Zone │ │
│ │ (Interface utilisateur unifiee) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

Communication entre les environnements

CLASS zcl_steampunk_integration DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
" BTP Steampunk : Recuperer des donnees de S/4HANA
METHODS fetch_s4_data
IMPORTING
iv_customer TYPE string
RETURNING
VALUE(rs_data) TYPE zts_customer_data.
ENDCLASS.
CLASS zcl_steampunk_integration IMPLEMENTATION.
METHOD fetch_s4_data.
" Dans BTP Steampunk : Appel API vers S/4HANA Cloud
TRY.
" Utiliser Communication Arrangement
DATA(lo_destination) = cl_http_destination_provider=>create_by_comm_arrangement(
comm_scenario = 'Z_S4_CUSTOMER_API"
service_id = 'Z_CUSTOMER_ODATA"
).
DATA(lo_client) = cl_web_http_client_manager=>create_by_http_destination(
lo_destination ).
DATA(lo_request) = lo_client->get_http_request( ).
lo_request->set_uri_path( |/sap/opu/odata/sap/API_BUSINESS_PARTNER/A_Customer('{ iv_customer }')| ).
DATA(lo_response) = lo_client->execute( if_web_http_client=>get ).
DATA(lv_json) = lo_response->get_text( ).
" Traiter JSON
/ui2/cl_json=>deserialize(
EXPORTING json = lv_json
CHANGING data = rs_data
).
CATCH cx_http_dest_provider_error
cx_web_http_client_error INTO DATA(lo_error).
" Gestion des erreurs
ENDTRY.
ENDMETHOD.
ENDCLASS.

Migration entre environnements

De Steampunk vers Embedded Steampunk

Lorsqu’une application BTP doit etre integree dans S/4HANA plus tard :

1. Analyse du code
└─► Quelles APIs sont utilisees ?
└─► Y a-t-il des dependances vers des services specifiques BTP ?
2. Verifier le modele de donnees
└─► Les tables peuvent-elles etre migrees vers S/4HANA ?
└─► Y a-t-il des conflits avec des objets standard ?
3. Configurer le transport
└─► Configurer le repository gCTS sur S/4HANA
└─► Cloner le code
4. Adaptations
└─► Convertir les appels API vers les S/4HANA Released APIs
└─► Simplifier la logique d'integration (acces DB direct)
5. Test & Go-Live
└─► Tests de regression complets
└─► Migration progressive

De Embedded Steampunk vers Steampunk

Lorsqu’une extension S/4HANA doit devenir autonome :

1. Identifier les dependances
└─► Quels CDS Views S/4HANA sont utilises ?
└─► Quels BAdIs sont implementes ?
2. Creer une couche API
└─► Services OData pour l'acces aux donnees S/4HANA
└─► Integration via Destinations
3. Externaliser les donnees
└─► Creer des tables propres
└─► Configurer la replication de donnees (optionnel)
4. Migrer le code
└─► Utiliser gCTS/abapGit
└─► Remplacer les acces DB directs par des appels API
5. Configurer la communication
└─► Communication Arrangements
└─► Destination Configuration

Couts et licences

AspectSteampunkEmbedded Steampunk
Licence de baseLicence BTP separeeInclus dans S/4HANA Cloud
FacturationABAP Compute UnitsPartie de la licence S/4
ScalabilitePay-as-you-go possibleCapacite fixe
Couts de developpementInfrastructure proprePartage avec S/4

Considerations TCO

Steampunk (BTP ABAP Environment) :
├── + Scalabilite flexible
├── + Developpement independant
├── - Couts de licence supplementaires
├── - Administration propre
└── - Effort d'integration pour les donnees S/4
Embedded Steampunk (S/4HANA Cloud) :
├── + Pas de couts supplementaires
├── + Acces direct aux donnees
├── + Infrastructure geree par SAP
├── - Cycles de mise a jour fixes
└── - Moins de flexibilite

Bonnes pratiques

Documenter les criteres de decision

" Documentation de la decision d'architecture
" au format ABAP Doc
"! @title Decision d'architecture : Steampunk vs. Embedded
"!
"! Decision : Embedded Steampunk
"!
"! Raisons :
"! - Acces direct aux donnees de commandes clients requis
"! - Validations critiques en performance
"! - Pas d'infrastructure separee souhaitee
"! - Licence S/4HANA Cloud deja disponible
"!
"! Alternatives evaluees :
"! - BTP Steampunk : Couts d'integration plus eleves
"! - Key User Extensibility : Pas assez flexible
"!
"! Risques :
"! - Dependance aux cycles de mise a jour SAP
"! - Les Released APIs doivent suffire

Valider la disponibilite des APIs

CLASS zcl_api_validator DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS zcl_api_validator IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
" Verifier si les APIs requises sont disponibles dans l'environnement cible
DATA: lt_required_apis TYPE TABLE OF string,
lt_missing_apis TYPE TABLE OF string.
" Liste des APIs requises
lt_required_apis = VALUE #(
( 'I_Customer' )
( 'I_SalesOrder' )
( 'I_Product' )
( 'CL_ABAP_RANDOM' )
( 'CL_WEB_HTTP_CLIENT_MANAGER' )
).
" Verifier la disponibilite
LOOP AT lt_required_apis INTO DATA(lv_api).
" Verifier les CDS Views
IF lv_api CP 'I_*'.
DATA(lo_view) = xco_cp_cds=>view( CONV #( lv_api ) ).
IF NOT lo_view->exists( ).
APPEND lv_api TO lt_missing_apis.
ENDIF.
ELSE.
" Verifier les classes
DATA(lo_class) = xco_cp_abap_repository=>object->clas->for(
CONV #( lv_api ) ).
IF NOT lo_class->exists( ).
APPEND lv_api TO lt_missing_apis.
ENDIF.
ENDIF.
ENDLOOP.
" Afficher le resultat
IF lt_missing_apis IS INITIAL.
out->write( 'Toutes les APIs requises sont disponibles' ).
ELSE.
out->write( 'APIs manquantes :' ).
LOOP AT lt_missing_apis INTO DATA(lv_missing).
out->write( | - { lv_missing }| ).
ENDLOOP.
ENDIF.
ENDMETHOD.
ENDCLASS.

Resume

CritereRecommandation
Etendre S/4HANAEmbedded Steampunk
Application autonomeSteampunk (BTP)
Donnees S/4HANA + cycles de release propresHybride (les deux)
Demarrage rapide avec licence S/4Embedded Steampunk
SaaS Multi-CloudSteampunk (BTP)
Preserver Clean CoreEmbedded Steampunk
Portail partenaire/clientSteampunk (BTP)

Sujets connexes