Als S/4HANA-Verantwortlicher stehst du oft vor der Frage: Soll eine Erweiterung per Key User Extensibility oder per Developer Extensibility umgesetzt werden? Dieser Artikel liefert klare Entscheidungskriterien, zeigt die Grenzen beider Ansätze auf und erklärt, wie eine gute Extensibility-Governance aussieht.
Das Extensibility-Modell in S/4HANA
SAP hat mit S/4HANA Cloud ein dreistufiges Erweiterungsmodell eingeführt, das unter dem Begriff Clean Core zusammengefasst wird:
┌────────────────────────────────────────────────────────┐│ Clean Core │├────────────────────────────────────────────────────────┤│ ││ ┌────────────────────────────────────────────────┐ ││ │ In-Stack Extensibility │ ││ │ ┌──────────────────┐ ┌────────────────────┐ │ ││ │ │ Key User │ │ Developer │ │ ││ │ │ Extensibility │ │ Extensibility │ │ ││ │ │ (No-Code) │ │ (ABAP Cloud) │ │ ││ │ └──────────────────┘ └────────────────────┘ │ ││ └────────────────────────────────────────────────┘ ││ ││ ┌────────────────────────────────────────────────┐ ││ │ Side-by-Side Extensibility │ ││ │ (BTP ABAP Environment, CAP, etc.) │ ││ └────────────────────────────────────────────────┘ ││ │└────────────────────────────────────────────────────────┘Die drei Extensibility-Ebenen
| Ebene | Beschreibung | Typische Szenarien |
|---|---|---|
| Key User Extensibility | No-Code-Erweiterungen über Fiori Apps | Custom Fields, einfache Logik, Reports |
| Developer Extensibility | ABAP Cloud-Erweiterungen im S/4HANA Stack | Komplexe Logik, BAdIs, Behavior Extensions |
| Side-by-Side Extensibility | Separate Anwendungen auf BTP | Neue Apps, Integrationen, Microservices |
Dieser Artikel konzentriert sich auf die ersten beiden Ebenen, da sie direkt im S/4HANA-System umgesetzt werden.
Key User Extensibility im Detail
Key User Extensibility ermöglicht Erweiterungen ohne Programmierkenntnisse direkt in Fiori Apps.
Verfügbare Key User Tools
| Tool | Fiori App | Funktion |
|---|---|---|
| Custom Fields and Logic | F1481 | Felder und einfache Logik hinzufügen |
| Custom CDS Views | F2170 | Analytische Views erstellen |
| Custom Business Objects | F1366 | Eigene Geschäftsobjekte definieren |
| Custom Analytical Queries | F2217 | Ad-hoc-Analysen erstellen |
| Adapt UI | F5434 | UI-Layouts anpassen |
| Configure Launchpad | - | Apps und Kacheln konfigurieren |
Stärken von Key User Extensibility
- Schnelle Umsetzung: Erweiterungen in Stunden statt Tagen
- Keine Entwicklerressourcen: Fachbereich kann selbst umsetzen
- Automatisches Transport: Integriert in SAP-Transportwesen
- Upgrade-sicher: Von SAP unterstützte Erweiterungspunkte
- Wenig Fehleranfällig: Geführte Benutzeroberfläche
Grenzen von Key User Extensibility
| Einschränkung | Details |
|---|---|
| Keine komplexe Logik | Keine Schleifen, keine Tabellenverarbeitung |
| Keine externen Aufrufe | Kein HTTP, RFC oder OData Consumption |
| Begrenzte Performance | Nicht für Massendaten geeignet |
| Eingeschränkte Feldtypen | Vordefinierte Typen, keine Custom Domains |
| Kein Unit Testing | Nur manuelle Tests möglich |
| Limitierte Trigger | Vordefinierte Zeitpunkte (On Save, On Modify) |
Developer Extensibility im Detail
Developer Extensibility nutzt ABAP Cloud für professionelle Erweiterungen mit voller Programmierfreiheit.
Verfügbare Developer Tools
| Extensibility-Typ | Werkzeug | Verwendung |
|---|---|---|
| Extension Include | ADT | Felder zu Standard-Tabellen |
| BAdI Implementation | ADT | Geschäftslogik einbinden |
| CDS View Extension | ADT | Views um Felder/Assoziationen erweitern |
| Behavior Extension | ADT | RAP-Verhalten erweitern |
| Service Extension | ADT | OData-Services erweitern |
Stärken von Developer Extensibility
- Maximale Flexibilität: Volle ABAP-Programmierung
- Performance: Optimierte Implementierungen möglich
- Testbarkeit: ABAP Unit Tests
- Wiederverwendbarkeit: Modularisierung und Clean Code
- Externe Integration: API-Aufrufe, RFC, HTTP möglich
- Versionierung: Git/gCTS-Integration
Was Developer Extensibility ermöglicht
" Beispiel: Komplexe Preisfindung mit externem ServiceMETHOD calculate_special_pricing. " Externe API aufrufen 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' ) ).
" Komplexe Berechnung über mehrere Tabellen 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>). " Algorithmus mit mehreren Faktoren <item>-custom_price = calculate_tiered_price( iv_quantity = <item>-quantity iv_base_price = <item>-net_price iv_customer = <item>-customer ). ENDLOOP.ENDMETHOD.Entscheidungskriterien: Key User vs. Developer
Die folgende Matrix hilft bei der Entscheidung:
Primäre Entscheidungsmatrix
| Kriterium | Key User Extensibility | Developer Extensibility |
|---|---|---|
| Komplexität | Einfach bis mittel | Komplex |
| Umsetzungsdauer | Stunden bis Tage | Tage bis Wochen |
| Ressourcen | Fachbereich | ABAP-Entwickler |
| Kosten | Niedrig | Mittel bis hoch |
| Testbarkeit | Manuell | Automatisiert |
| Wartbarkeit | Einfach | Erfordert Entwickler |
| Performance | Begrenzt | Optimierbar |
| Externe Systeme | Nicht möglich | Vollständig |
| Massendaten | Nicht geeignet | Geeignet |
Anwendungsfall-Entscheidungen
| Szenario | Empfehlung | Begründung |
|---|---|---|
| Neues Feld ohne Logik | Key User | Einfache Felderweiterung |
| Defaultwert bei Anlage | Key User | Determination “On Create” |
| Einfache Pflichtfeldprüfung | Key User | Validation “On Save” |
| Komplexe Crossvalidierung | Developer | Mehrere Objekte beteiligt |
| Berechnung über Positionen | Developer | Tabellenlogik erforderlich |
| Integration mit Drittsystem | Developer | HTTP/RFC-Aufrufe |
| Massendaten-Report | Developer | Performance-kritisch |
| Dynamische UI-Steuerung | Developer | Feature Control in RAP |
| Workflow-Erweiterung | Developer | BAdI-basierte Events |
| Quick Wins im Prototyping | Key User | Schnelle Validierung |
Entscheidungsbaum
Beantworte diese Fragen der Reihe nach:
1. Ist die Anforderung ein einfaches Custom Field? → JA: Key User Extensibility (Custom Fields App) → NEIN: weiter zu Frage 2
2. Beschränkt sich die Logik auf einen einzelnen Datensatz? → JA: weiter zu Frage 3 → NEIN: Developer Extensibility (Tabellenlogik)
3. Ist die Logik mit IF/THEN-Regeln abbildbar? → JA: Key User Extensibility (Custom Logic) → NEIN: Developer Extensibility (ABAP-Code)
4. Muss ein externes System aufgerufen werden? → JA: Developer Extensibility (HTTP Client) → NEIN: weiter zu Frage 5
5. Sind ABAP-Entwickler verfügbar? → JA: Developer Extensibility (bessere Wartbarkeit) → NEIN: Key User Extensibility (pragmatischer Ansatz)Clean Core und Extensibility
Der Clean Core-Ansatz von SAP definiert klare Regeln für Erweiterungen:
Clean Core Prinzipien
| Prinzip | Bedeutung für Extensibility |
|---|---|
| Keine Modifikationen | Standard-Code wird nicht verändert |
| Released APIs | Nur freigegebene Schnittstellen nutzen |
| Upgrade-Stabilität | Erweiterungen überstehen Upgrades |
| Entkopplung | Erweiterungen sind vom Core getrennt |
Wie beide Extensibility-Modelle Clean Core unterstützen
Key User Extensibility:
- Verwendet nur SAP-freigegebene Extension Points
- Automatische Kompatibilitätsprüfung
- Keine Möglichkeit für “schmutzige” Erweiterungen
Developer Extensibility:
- ABAP Cloud Language Version verhindert kritische APIs
- Nur Released Objects verwendbar
- Behavior Extensions statt BAdI-Modifikationen
Clean Core Compliance-Check
✅ Beide Modelle sind Clean Core-konform✅ Keine Modifikation von Standard-Objekten✅ Stabile APIs durch SAP garantiert✅ Automatische Upgrade-Tests durch SAPGovernance: Extensibility richtig steuern
Eine klare Governance ist entscheidend für langfristig wartbare Systeme.
Extensibility-Governance-Prozess
┌─────────────────────────────────────────────────────────┐│ ANFORDERUNG │└───────────────────────┬─────────────────────────────────┘ ▼┌─────────────────────────────────────────────────────────┐│ 1. BEWERTUNG (Extensibility Board) ││ • Ist Erweiterung nötig? (Standard prüfen) ││ • Welcher Extensibility-Typ passt? ││ • Ressourcen und Timeline │└───────────────────────┬─────────────────────────────────┘ ▼┌─────────────────────────────────────────────────────────┐│ 2. ENTSCHEIDUNG ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ││ │ Key User │ │ Developer │ │ Side-by-Side│ ││ │Extensibility│ │Extensibility│ │ (BTP) │ ││ └─────────────┘ └─────────────┘ └─────────────┘ │└───────────────────────┬─────────────────────────────────┘ ▼┌─────────────────────────────────────────────────────────┐│ 3. IMPLEMENTIERUNG ││ • Nach Standards und Namenskonventionen ││ • Mit Dokumentation ││ • Mit Tests │└───────────────────────┬─────────────────────────────────┘ ▼┌─────────────────────────────────────────────────────────┐│ 4. LIFECYCLE-MANAGEMENT ││ • Regelmäßige Reviews ││ • Upgrade-Vorbereitung ││ • Stilllegung obsoleter Extensions │└─────────────────────────────────────────────────────────┘Extensibility Board
Ein Extensibility Board sollte bei jeder Erweiterungsanfrage entscheiden:
| Rolle | Verantwortung |
|---|---|
| Fachbereich | Anforderungsdefinition |
| IT-Architektur | Technische Bewertung |
| Basis/Operations | Betriebsimpact |
| Entwicklung | Umsetzungsbewertung |
Namenskonventionen
Key User Extensibility:├── Automatisch vergeben: YY1_*, ZZ1_*└── Keine manuelle Einflussnahme
Developer Extensibility:├── Namensraum: Z* oder /KUNDE/*├── Extension Structures: ZZ1_<OBJEKT>_EXT├── BAdI Classes: ZCL_<BEREICH>_<FUNKTION>├── CDS Extensions: ZE_<BASIS>_<ZWECK>└── Behavior Extensions: ZBP_<ENTITÄT>_EXTDokumentationsstandards
Jede Erweiterung muss dokumentieren:
| Dokumentationsfeld | Beispiel |
|---|---|
| Anforderungs-ID | REQ-2024-0815 |
| Business Owner | Vertriebsleitung |
| Technischer Name | ZZ1_CUSTOMER_PRIORITY |
| Beschreibung | Priorisierung von Kunden für Vertriebssteuerung |
| Abhängigkeiten | Wird in Report ZSALES01 verwendet |
| Testfälle | TC-001: Neuer Kunde erhält Default “C” |
| Risikobewertung | Niedrig - keine kritischen Prozesse |
Lifecycle-Management für Extensions
Regelmäßige Reviews
Quartalsmäßige Überprüfung aller Extensions:├── Wird die Extension noch genutzt?├── Entspricht sie noch den Anforderungen?├── Gibt es Performance-Probleme?├── Ist die Dokumentation aktuell?└── Plant SAP einen Release, der die Extension betrifft?Upgrade-Vorbereitung
Vor jedem S/4HANA-Upgrade:
- Extension-Inventar erstellen: Alle Custom Fields und BAdIs auflisten
- Release Notes prüfen: Deprecated APIs identifizieren
- Tests vorbereiten: Testfälle für kritische Extensions
- Fallback planen: Was tun, wenn Extension nicht funktioniert?
Migration: Key User → Developer
Wenn Key User Extensibility an Grenzen stößt:
Phase 1: Vorbereitung├── Anforderungen dokumentieren├── Key User Logic analysieren└── Developer-Konzept erstellen
Phase 2: Implementierung├── BAdI oder Behavior Extension erstellen├── Logik in ABAP Cloud implementieren└── Unit Tests schreiben
Phase 3: Migration├── Parallelbetrieb (beide aktiv, Key User nur Logging)├── Validierung der Ergebnisse└── Key User Logic deaktivieren
Phase 4: Abschluss├── Dokumentation aktualisieren├── Schulung der Fachbereiche└── Key User Logic löschen (optional)Hybride Szenarien
In der Praxis werden oft beide Extensibility-Modelle kombiniert.
Typisches Hybrid-Szenario
Kundenpriorisierung:
1. Custom Field (Key User) └── YY1_CUSTOMER_PRIORITY: Priorität A/B/C/D
2. Simple Logic (Key User) └── Default bei Anlage: "C"
3. Complex Calculation (Developer) └── Automatische Neuberechnung basierend auf: • Umsatz letzte 12 Monate • Zahlungsverhalten • Reklamationsquote
4. Integration (Developer) └── Sync mit externem CRM-SystemArbeitsteilung
| Phase | Verantwortung | Extensibility-Typ |
|---|---|---|
| Feld anlegen | Key User | Custom Fields App |
| UI einbinden | Key User | Adapt UI |
| Einfache Defaults | Key User | Custom Logic |
| Komplexe Berechnung | Developer | BAdI/Behavior Extension |
| Integration | Developer | ABAP Cloud + HTTP |
| Reporting | Key User | Custom CDS Views |
| Performance-Reports | Developer | Optimierte CDS + ALV |
Praxisbeispiele
Beispiel 1: Zusätzliches Kundenmerkmal
Anforderung: Kunden sollen eine “Branchenzuordnung” erhalten.
Bewertung:
- Einfaches Dropdown-Feld ✓
- Keine komplexe Logik ✓
- Kein externes System ✓
Empfehlung: Key User Extensibility
App: Custom Fields and Logic (F1481)Business Context: Business Partner - CustomerField: Industry ClassificationType: Code List (Automotive, Retail, Manufacturing, ...)Beispiel 2: Bonitätsprüfung bei Auftragserfassung
Anforderung: Bei Auftragserfassung soll die Bonität beim externen Provider geprüft werden.
Bewertung:
- Externer HTTP-Aufruf erforderlich ✗
- Komplexe Fehlerbehandlung ✗
- Mehrere Objekte (Kunde, Auftrag) ✗
Empfehlung: Developer Extensibility
CLASS zcl_credit_check_badi IMPLEMENTATION. METHOD check_credit. " Externes Credit Rating abrufen 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.Beispiel 3: Automatische Kategorisierung
Anforderung: Servicemeldungen sollen basierend auf Keywords automatisch kategorisiert werden.
Bewertung:
- Textanalyse über mehrere Keywords ✗
- Pattern Matching erforderlich ✗
- Aber: Keine externe Integration ✓
Empfehlung: Developer Extensibility (Grenzfall)
Bei nur 5-10 einfachen Keywords könnte auch Key User reichen, aber für saubere Wartbarkeit ist Developer empfohlen.
Beispiel 4: Dashboard mit Umsatzkennzahlen
Anforderung: Vertriebsleiter braucht ein Dashboard mit Umsatz pro Region.
Bewertung:
- Basiert auf Standard-CDS-Views ✓
- Keine komplexe Berechnung ✓
- Aggregation und Gruppierung ✓
Empfehlung: Key User Extensibility
App: Custom CDS Views (F2170)Basis: I_SalesOrderFelder: Region, Sum(NetAmount), Count(SalesOrder)Gruppierung: Nach RegionFilter: Aktuelles GeschäftsjahrHäufige Fehler vermeiden
Anti-Pattern 1: Developer für alles
Problem: IT besteht auf Developer Extensibility für alle Anforderungen Folge: Lange Wartezeiten, Frustration im Fachbereich Lösung: Quick Wins per Key User ermöglichen
Anti-Pattern 2: Key User ohne Governance
Problem: Fachbereiche erstellen unkontrolliert Extensions Folge: Schatten-IT, Inkonsistenzen, Upgrade-Probleme Lösung: Extensibility Board etablieren
Anti-Pattern 3: Migration ignorieren
Problem: Key User Logic wächst über ihre Grenzen hinaus Folge: Workarounds, Performance-Probleme, Fehleranfälligkeit Lösung: Frühzeitig zu Developer migrieren
Anti-Pattern 4: Keine Dokumentation
Problem: Extensions ohne Beschreibung und Owner Folge: Nach Personalwechsel niemand zuständig Lösung: Dokumentationsstandards durchsetzen
Fazit
Die Entscheidung zwischen Key User Extensibility und Developer Extensibility ist keine Entweder-Oder-Frage:
| Nutze Key User Extensibility für… | Nutze Developer Extensibility für… |
|---|---|
| Einfache Custom Fields | Komplexe Geschäftslogik |
| Defaultwerte und Validierungen | Externe Systemintegrationen |
| Schnelle Prototypen | Massendatenverarbeitung |
| Business-getriebene Änderungen | Performance-kritische Features |
| Ad-hoc-Reports | Wiederverwendbare Komponenten |
Die beste Strategie kombiniert beide Ansätze:
- Starte mit Key User für schnelle Ergebnisse
- Migriere zu Developer wenn Grenzen erreicht sind
- Etabliere Governance für langfristige Wartbarkeit
- Dokumentiere alles für Upgrade-Sicherheit
Dein nächster Schritt:
- Bestandsaufnahme: Welche Extensions existieren bereits?
- Extensibility Board etablieren (oder reaktivieren)
- Governance-Prozess dokumentieren
- Schulung: Key User und Developer sensibilisieren
Weiterführende Artikel
- Key User Extensibility: Erweiterungen ohne Entwicklerzugriff - Detaillierte Anleitung für Key User Tools
- Developer Extensibility: Custom Logic in Standard-Apps - ABAP Cloud Extensibility im Detail
- Clean Core Strategie: Zukunftssichere SAP-Entwicklung - Das große Bild
- SAP Build vs. ABAP Cloud - Verwandte Technologieentscheidung