En tant que responsable S/4HANA, vous etes souvent confronte a la question : Une extension doit-elle etre realisee via Key User Extensibility ou Developer Extensibility ? Cet article fournit des criteres de decision clairs, montre les limites des deux approches et explique a quoi ressemble une bonne gouvernance d’extensibilite.
Le modele d’extensibilite dans S/4HANA
SAP a introduit avec S/4HANA Cloud un modele d’extension a trois niveaux, resume sous le terme Clean Core :
┌────────────────────────────────────────────────────────┐│ Clean Core │├────────────────────────────────────────────────────────┤│ ││ ┌────────────────────────────────────────────────┐ ││ │ In-Stack Extensibility │ ││ │ ┌──────────────────┐ ┌────────────────────┐ │ ││ │ │ Key User │ │ Developer │ │ ││ │ │ Extensibility │ │ Extensibility │ │ ││ │ │ (No-Code) │ │ (ABAP Cloud) │ │ ││ │ └──────────────────┘ └────────────────────┘ │ ││ └────────────────────────────────────────────────┘ ││ ││ ┌────────────────────────────────────────────────┐ ││ │ Side-by-Side Extensibility │ ││ │ (BTP ABAP Environment, CAP, etc.) │ ││ └────────────────────────────────────────────────┘ ││ │└────────────────────────────────────────────────────────┘Les trois niveaux d’extensibilite
| Niveau | Description | Scenarios typiques |
|---|---|---|
| Key User Extensibility | Extensions no-code via applications Fiori | Custom Fields, logique simple, rapports |
| Developer Extensibility | Extensions ABAP Cloud dans la pile S/4HANA | Logique complexe, BAdIs, Behavior Extensions |
| Side-by-Side Extensibility | Applications separees sur BTP | Nouvelles apps, integrations, microservices |
Cet article se concentre sur les deux premiers niveaux, car ils sont realises directement dans le systeme S/4HANA.
Key User Extensibility en detail
Key User Extensibility permet des extensions sans connaissances en programmation directement dans les applications Fiori.
Outils Key User disponibles
| Outil | Application Fiori | Fonction |
|---|---|---|
| Custom Fields and Logic | F1481 | Ajouter des champs et une logique simple |
| Custom CDS Views | F2170 | Creer des vues analytiques |
| Custom Business Objects | F1366 | Definir ses propres objets metier |
| Custom Analytical Queries | F2217 | Creer des analyses ad-hoc |
| Adapt UI | F5434 | Adapter les layouts UI |
| Configure Launchpad | - | Configurer apps et tuiles |
Forces de Key User Extensibility
- Mise en oeuvre rapide : Extensions en heures au lieu de jours
- Pas de ressources developpeur : Le metier peut realiser lui-meme
- Transport automatique : Integre dans le systeme de transport SAP
- Securise pour les mises a jour : Points d’extension supportes par SAP
- Peu sujet aux erreurs : Interface utilisateur guidee
Limites de Key User Extensibility
| Restriction | Details |
|---|---|
| Pas de logique complexe | Pas de boucles, pas de traitement de tables |
| Pas d’appels externes | Pas de HTTP, RFC ou OData Consumption |
| Performance limitee | Non adapte aux donnees de masse |
| Types de champs limites | Types predefinis, pas de domaines personnalises |
| Pas de tests unitaires | Uniquement des tests manuels possibles |
| Declencheurs limites | Moments predefinis (On Save, On Modify) |
Developer Extensibility en detail
Developer Extensibility utilise ABAP Cloud pour des extensions professionnelles avec une liberte de programmation complete.
Outils Developer disponibles
| Type d’extensibilite | Outil | Utilisation |
|---|---|---|
| Extension Include | ADT | Champs pour les tables standard |
| BAdI Implementation | ADT | Integrer la logique metier |
| CDS View Extension | ADT | Etendre les vues avec champs/associations |
| Behavior Extension | ADT | Etendre le comportement RAP |
| Service Extension | ADT | Etendre les services OData |
Forces de Developer Extensibility
- Flexibilite maximale : Programmation ABAP complete
- Performance : Implementations optimisees possibles
- Testabilite : Tests unitaires ABAP
- Reutilisabilite : Modularisation et Clean Code
- Integration externe : Appels API, RFC, HTTP possibles
- Versionnement : Integration Git/gCTS
Ce que Developer Extensibility permet
" Exemple : Determination de prix complexe avec service externeMETHOD calculate_special_pricing. " Appeler une API externe DATA(lo_http_client) = cl_web_http_client_manager=>create_by_http_destination( i_destination = cl_http_destination_provider=>create_by_comm_arrangement( comm_scenario = 'Z_PRICING_SERVICE' ) ).
" Calcul complexe sur plusieurs tables SELECT FROM I_SalesOrderItem AS item INNER JOIN I_ProductValuation AS val ON item~Product = val~Product WHERE item~SalesOrder = @iv_sales_order INTO TABLE @DATA(lt_items).
LOOP AT lt_items ASSIGNING FIELD-SYMBOL(<item>). " Algorithme avec plusieurs facteurs <item>-custom_price = calculate_tiered_price( iv_quantity = <item>-quantity iv_base_price = <item>-net_price iv_customer = <item>-customer ). ENDLOOP.ENDMETHOD.Criteres de decision : Key User vs. Developer
La matrice suivante aide a la decision :
Matrice de decision principale
| Critere | Key User Extensibility | Developer Extensibility |
|---|---|---|
| Complexite | Simple a moyenne | Complexe |
| Duree de realisation | Heures a jours | Jours a semaines |
| Ressources | Metier | Developpeurs ABAP |
| Couts | Faibles | Moyens a eleves |
| Testabilite | Manuelle | Automatisee |
| Maintenabilite | Simple | Necessite des developpeurs |
| Performance | Limitee | Optimisable |
| Systemes externes | Non possible | Completement |
| Donnees de masse | Non adapte | Adapte |
Decisions par cas d’utilisation
| Scenario | Recommandation | Justification |
|---|---|---|
| Nouveau champ sans logique | Key User | Simple extension de champ |
| Valeur par defaut a la creation | Key User | Determination “On Create” |
| Verification simple de champ obligatoire | Key User | Validation “On Save” |
| Validation croisee complexe | Developer | Plusieurs objets impliques |
| Calcul sur les positions | Developer | Logique de table requise |
| Integration avec systeme tiers | Developer | Appels HTTP/RFC |
| Rapport de donnees de masse | Developer | Performance critique |
| Controle UI dynamique | Developer | Feature Control dans RAP |
| Extension de workflow | Developer | Events bases sur BAdI |
| Quick wins en prototypage | Key User | Validation rapide |
Arbre de decision
Repondez a ces questions dans l’ordre :
1. L'exigence est-elle un simple Custom Field ? → OUI : Key User Extensibility (App Custom Fields) → NON : passer a la question 2
2. La logique se limite-t-elle a un seul enregistrement ? → OUI : passer a la question 3 → NON : Developer Extensibility (logique de table)
3. La logique peut-elle etre representee par des regles SI/ALORS ? → OUI : Key User Extensibility (Custom Logic) → NON : Developer Extensibility (code ABAP)
4. Un systeme externe doit-il etre appele ? → OUI : Developer Extensibility (HTTP Client) → NON : passer a la question 5
5. Des developpeurs ABAP sont-ils disponibles ? → OUI : Developer Extensibility (meilleure maintenabilite) → NON : Key User Extensibility (approche pragmatique)Clean Core et Extensibilite
L’approche Clean Core de SAP definit des regles claires pour les extensions :
Principes Clean Core
| Principe | Signification pour l’extensibilite |
|---|---|
| Pas de modifications | Le code standard n’est pas modifie |
| Released APIs | Utiliser uniquement les interfaces validees |
| Stabilite des mises a jour | Les extensions survivent aux mises a jour |
| Decouplage | Les extensions sont separees du core |
Comment les deux modeles d’extensibilite supportent Clean Core
Key User Extensibility :
- Utilise uniquement les points d’extension valides par SAP
- Verification de compatibilite automatique
- Pas de possibilite d’extensions “sales”
Developer Extensibility :
- La version ABAP Cloud Language empeche les APIs critiques
- Seuls les Released Objects utilisables
- Behavior Extensions au lieu de modifications BAdI
Verification de conformite Clean Core
✓ Les deux modeles sont conformes Clean Core✓ Pas de modification des objets standard✓ APIs stables garanties par SAP✓ Tests de mise a jour automatiques par SAPGouvernance : Piloter correctement l’extensibilite
Une gouvernance claire est decisive pour des systemes maintenables a long terme.
Processus de gouvernance d’extensibilite
┌─────────────────────────────────────────────────────────┐│ EXIGENCE │└───────────────────────┬─────────────────────────────────┘ ▼┌─────────────────────────────────────────────────────────┐│ 1. EVALUATION (Comite Extensibilite) ││ • L'extension est-elle necessaire ? (verifier standard)││ • Quel type d'extensibilite convient ? ││ • Ressources et planning │└───────────────────────┬─────────────────────────────────┘ ▼┌─────────────────────────────────────────────────────────┐│ 2. DECISION ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ││ │ Key User │ │ Developer │ │ Side-by-Side│ ││ │Extensibility│ │Extensibility│ │ (BTP) │ ││ └─────────────┘ └─────────────┘ └─────────────┘ │└───────────────────────┬─────────────────────────────────┘ ▼┌─────────────────────────────────────────────────────────┐│ 3. IMPLEMENTATION ││ • Selon standards et conventions de nommage ││ • Avec documentation ││ • Avec tests │└───────────────────────┬─────────────────────────────────┘ ▼┌─────────────────────────────────────────────────────────┐│ 4. GESTION DU CYCLE DE VIE ││ • Revues regulieres ││ • Preparation aux mises a jour ││ • Retrait des extensions obsoletes │└─────────────────────────────────────────────────────────┘Comite d’extensibilite
Un Comite d’Extensibilite devrait decider pour chaque demande d’extension :
| Role | Responsabilite |
|---|---|
| Metier | Definition des exigences |
| Architecture IT | Evaluation technique |
| Basis/Operations | Impact operationnel |
| Developpement | Evaluation de la realisation |
Conventions de nommage
Key User Extensibility:├── Attribue automatiquement: YY1_*, ZZ1_*└── Pas d'influence manuelle
Developer Extensibility:├── Namespace: Z* ou /CLIENT/*├── Extension Structures: ZZ1_<OBJET>_EXT├── BAdI Classes: ZCL_<DOMAINE>_<FONCTION>├── CDS Extensions: ZE_<BASE>_<OBJECTIF>└── Behavior Extensions: ZBP_<ENTITE>_EXTStandards de documentation
Chaque extension doit documenter :
| Champ de documentation | Exemple |
|---|---|
| ID d’exigence | REQ-2024-0815 |
| Business Owner | Direction des ventes |
| Nom technique | ZZ1_CUSTOMER_PRIORITY |
| Description | Priorisation des clients pour le pilotage commercial |
| Dependances | Utilise dans le rapport ZSALES01 |
| Cas de test | TC-001: Nouveau client recoit Default “C” |
| Evaluation des risques | Faible - pas de processus critiques |
Gestion du cycle de vie des extensions
Revues regulieres
Verification trimestrielle de toutes les extensions:├── L'extension est-elle encore utilisee ?├── Correspond-elle encore aux exigences ?├── Y a-t-il des problemes de performance ?├── La documentation est-elle a jour ?└── SAP prevoit-elle une release affectant l'extension ?Preparation aux mises a jour
Avant chaque mise a jour S/4HANA :
- Creer l’inventaire des extensions : Lister tous les Custom Fields et BAdIs
- Verifier les Release Notes : Identifier les APIs depreciees
- Preparer les tests : Cas de test pour les extensions critiques
- Planifier le repli : Que faire si une extension ne fonctionne plus ?
Migration : Key User → Developer
Quand Key User Extensibility atteint ses limites :
Phase 1: Preparation├── Documenter les exigences├── Analyser la Key User Logic└── Creer le concept Developer
Phase 2: Implementation├── Creer BAdI ou Behavior Extension├── Implementer la logique en ABAP Cloud└── Ecrire les tests unitaires
Phase 3: Migration├── Fonctionnement parallele (les deux actifs, Key User uniquement logging)├── Validation des resultats└── Desactiver la Key User Logic
Phase 4: Cloture├── Mettre a jour la documentation├── Former les metiers└── Supprimer la Key User Logic (optionnel)Scenarios hybrides
En pratique, les deux modeles d’extensibilite sont souvent combines.
Scenario hybride typique
Priorisation des clients:
1. Custom Field (Key User) └── YY1_CUSTOMER_PRIORITY: Priorite A/B/C/D
2. Logique simple (Key User) └── Default a la creation: "C"
3. Calcul complexe (Developer) └── Recalcul automatique base sur: • CA des 12 derniers mois • Comportement de paiement • Taux de reclamation
4. Integration (Developer) └── Sync avec systeme CRM externeRepartition des taches
| Phase | Responsabilite | Type d’extensibilite |
|---|---|---|
| Creer le champ | Key User | App Custom Fields |
| Integrer dans l’UI | Key User | Adapt UI |
| Defaults simples | Key User | Custom Logic |
| Calcul complexe | Developer | BAdI/Behavior Extension |
| Integration | Developer | ABAP Cloud + HTTP |
| Reporting | Key User | Custom CDS Views |
| Rapports de performance | Developer | CDS optimise + ALV |
Exemples pratiques
Exemple 1 : Attribut client supplementaire
Exigence : Les clients doivent avoir une “classification sectorielle”.
Evaluation :
- Champ dropdown simple ✓
- Pas de logique complexe ✓
- Pas de systeme externe ✓
Recommandation : Key User Extensibility
App: Custom Fields and Logic (F1481)Business Context: Business Partner - CustomerField: Industry ClassificationType: Code List (Automotive, Retail, Manufacturing, ...)Exemple 2 : Verification de solvabilite a la saisie de commande
Exigence : A la saisie de commande, la solvabilite doit etre verifiee aupres d’un fournisseur externe.
Evaluation :
- Appel HTTP externe requis ✗
- Gestion des erreurs complexe ✗
- Plusieurs objets (client, commande) ✗
Recommandation : Developer Extensibility
CLASS zcl_credit_check_badi IMPLEMENTATION. METHOD check_credit. " Recuperer le rating de credit externe DATA(lo_client) = get_http_client( ). DATA(lv_rating) = lo_client->get_credit_rating( iv_customer = is_order-sold_to_party ).
IF lv_rating < minimum_rating( is_order-net_amount ). RAISE EXCEPTION TYPE zcx_credit_block MESSAGE e001(zcredit) WITH is_order-sold_to_party. ENDIF. ENDMETHOD.ENDCLASS.Exemple 3 : Categorisation automatique
Exigence : Les notifications de service doivent etre automatiquement categoriees en fonction de mots-cles.
Evaluation :
- Analyse de texte sur plusieurs mots-cles ✗
- Pattern Matching requis ✗
- Mais : Pas d’integration externe ✓
Recommandation : Developer Extensibility (cas limite)
Pour seulement 5-10 mots-cles simples, Key User pourrait aussi suffire, mais pour une maintenabilite propre, Developer est recommande.
Exemple 4 : Tableau de bord avec indicateurs de CA
Exigence : Le directeur commercial a besoin d’un tableau de bord avec CA par region.
Evaluation :
- Base sur des CDS Views standard ✓
- Pas de calcul complexe ✓
- Aggregation et groupement ✓
Recommandation : Key User Extensibility
App: Custom CDS Views (F2170)Base: I_SalesOrderChamps: Region, Sum(NetAmount), Count(SalesOrder)Groupement: Par RegionFiltre: Exercice en coursEviter les erreurs courantes
Anti-Pattern 1 : Developer pour tout
Probleme : L’IT insiste sur Developer Extensibility pour toutes les exigences Consequence : Longs delais d’attente, frustration du metier Solution : Permettre les quick wins via Key User
Anti-Pattern 2 : Key User sans gouvernance
Probleme : Les metiers creent des extensions sans controle Consequence : Shadow IT, incoherences, problemes de mise a jour Solution : Etablir un comite d’extensibilite
Anti-Pattern 3 : Ignorer la migration
Probleme : La Key User Logic depasse ses limites Consequence : Solutions de contournement, problemes de performance, fragilite Solution : Migrer vers Developer a temps
Anti-Pattern 4 : Pas de documentation
Probleme : Extensions sans description ni proprietaire Consequence : Apres un changement de personnel, personne n’est responsable Solution : Imposer des standards de documentation
Conclusion
La decision entre Key User Extensibility et Developer Extensibility n’est pas un choix binaire :
| Utilisez Key User Extensibility pour… | Utilisez Developer Extensibility pour… |
|---|---|
| Custom Fields simples | Logique metier complexe |
| Valeurs par defaut et validations | Integrations systemes externes |
| Prototypes rapides | Traitement de donnees de masse |
| Modifications pilotees par le metier | Fonctionnalites critiques pour la performance |
| Rapports ad-hoc | Composants reutilisables |
La meilleure strategie combine les deux approches :
- Commencez avec Key User pour des resultats rapides
- Migrez vers Developer quand les limites sont atteintes
- Etablissez la gouvernance pour une maintenabilite a long terme
- Documentez tout pour la securite des mises a jour
Votre prochaine etape :
- Inventaire : Quelles extensions existent deja ?
- Etablir (ou reactiver) un comite d’extensibilite
- Documenter le processus de gouvernance
- Formation : Sensibiliser Key Users et Developers
Articles connexes
- Key User Extensibility : Extensions sans acces developpeur - Guide detaille pour les outils Key User
- Developer Extensibility : Custom Logic dans les apps standard - ABAP Cloud Extensibility en detail
- Strategie Clean Core : Developpement SAP perenne - La vision d’ensemble
- SAP Build vs. ABAP Cloud - Decision technologique connexe