Key User Extensibility vs. Developer Extensibility : Quand utiliser quoi ?

Catégorie
ABAP Cloud
Publié
Auteur
Johannes

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

NiveauDescriptionScenarios typiques
Key User ExtensibilityExtensions no-code via applications FioriCustom Fields, logique simple, rapports
Developer ExtensibilityExtensions ABAP Cloud dans la pile S/4HANALogique complexe, BAdIs, Behavior Extensions
Side-by-Side ExtensibilityApplications separees sur BTPNouvelles 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

OutilApplication FioriFonction
Custom Fields and LogicF1481Ajouter des champs et une logique simple
Custom CDS ViewsF2170Creer des vues analytiques
Custom Business ObjectsF1366Definir ses propres objets metier
Custom Analytical QueriesF2217Creer des analyses ad-hoc
Adapt UIF5434Adapter les layouts UI
Configure Launchpad-Configurer apps et tuiles

Forces de Key User Extensibility

  1. Mise en oeuvre rapide : Extensions en heures au lieu de jours
  2. Pas de ressources developpeur : Le metier peut realiser lui-meme
  3. Transport automatique : Integre dans le systeme de transport SAP
  4. Securise pour les mises a jour : Points d’extension supportes par SAP
  5. Peu sujet aux erreurs : Interface utilisateur guidee

Limites de Key User Extensibility

RestrictionDetails
Pas de logique complexePas de boucles, pas de traitement de tables
Pas d’appels externesPas de HTTP, RFC ou OData Consumption
Performance limiteeNon adapte aux donnees de masse
Types de champs limitesTypes predefinis, pas de domaines personnalises
Pas de tests unitairesUniquement des tests manuels possibles
Declencheurs limitesMoments 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’extensibiliteOutilUtilisation
Extension IncludeADTChamps pour les tables standard
BAdI ImplementationADTIntegrer la logique metier
CDS View ExtensionADTEtendre les vues avec champs/associations
Behavior ExtensionADTEtendre le comportement RAP
Service ExtensionADTEtendre les services OData

Forces de Developer Extensibility

  1. Flexibilite maximale : Programmation ABAP complete
  2. Performance : Implementations optimisees possibles
  3. Testabilite : Tests unitaires ABAP
  4. Reutilisabilite : Modularisation et Clean Code
  5. Integration externe : Appels API, RFC, HTTP possibles
  6. Versionnement : Integration Git/gCTS

Ce que Developer Extensibility permet

" Exemple : Determination de prix complexe avec service externe
METHOD 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

CritereKey User ExtensibilityDeveloper Extensibility
ComplexiteSimple a moyenneComplexe
Duree de realisationHeures a joursJours a semaines
RessourcesMetierDeveloppeurs ABAP
CoutsFaiblesMoyens a eleves
TestabiliteManuelleAutomatisee
MaintenabiliteSimpleNecessite des developpeurs
PerformanceLimiteeOptimisable
Systemes externesNon possibleCompletement
Donnees de masseNon adapteAdapte

Decisions par cas d’utilisation

ScenarioRecommandationJustification
Nouveau champ sans logiqueKey UserSimple extension de champ
Valeur par defaut a la creationKey UserDetermination “On Create”
Verification simple de champ obligatoireKey UserValidation “On Save”
Validation croisee complexeDeveloperPlusieurs objets impliques
Calcul sur les positionsDeveloperLogique de table requise
Integration avec systeme tiersDeveloperAppels HTTP/RFC
Rapport de donnees de masseDeveloperPerformance critique
Controle UI dynamiqueDeveloperFeature Control dans RAP
Extension de workflowDeveloperEvents bases sur BAdI
Quick wins en prototypageKey UserValidation 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

PrincipeSignification pour l’extensibilite
Pas de modificationsLe code standard n’est pas modifie
Released APIsUtiliser uniquement les interfaces validees
Stabilite des mises a jourLes extensions survivent aux mises a jour
DecouplageLes 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 SAP

Gouvernance : 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 :

RoleResponsabilite
MetierDefinition des exigences
Architecture ITEvaluation technique
Basis/OperationsImpact operationnel
DeveloppementEvaluation 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>_EXT

Standards de documentation

Chaque extension doit documenter :

Champ de documentationExemple
ID d’exigenceREQ-2024-0815
Business OwnerDirection des ventes
Nom techniqueZZ1_CUSTOMER_PRIORITY
DescriptionPriorisation des clients pour le pilotage commercial
DependancesUtilise dans le rapport ZSALES01
Cas de testTC-001: Nouveau client recoit Default “C”
Evaluation des risquesFaible - 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 :

  1. Creer l’inventaire des extensions : Lister tous les Custom Fields et BAdIs
  2. Verifier les Release Notes : Identifier les APIs depreciees
  3. Preparer les tests : Cas de test pour les extensions critiques
  4. 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 externe

Repartition des taches

PhaseResponsabiliteType d’extensibilite
Creer le champKey UserApp Custom Fields
Integrer dans l’UIKey UserAdapt UI
Defaults simplesKey UserCustom Logic
Calcul complexeDeveloperBAdI/Behavior Extension
IntegrationDeveloperABAP Cloud + HTTP
ReportingKey UserCustom CDS Views
Rapports de performanceDeveloperCDS 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 - Customer
Field: Industry Classification
Type: 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_SalesOrder
Champs: Region, Sum(NetAmount), Count(SalesOrder)
Groupement: Par Region
Filtre: Exercice en cours

Eviter 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 simplesLogique metier complexe
Valeurs par defaut et validationsIntegrations systemes externes
Prototypes rapidesTraitement de donnees de masse
Modifications pilotees par le metierFonctionnalites critiques pour la performance
Rapports ad-hocComposants reutilisables

La meilleure strategie combine les deux approches :

  1. Commencez avec Key User pour des resultats rapides
  2. Migrez vers Developer quand les limites sont atteintes
  3. Etablissez la gouvernance pour une maintenabilite a long terme
  4. Documentez tout pour la securite des mises a jour

Votre prochaine etape :

  1. Inventaire : Quelles extensions existent deja ?
  2. Etablir (ou reactiver) un comite d’extensibilite
  3. Documenter le processus de gouvernance
  4. Formation : Sensibiliser Key Users et Developers

Articles connexes