Key User Extensibility vs. Developer Extensibility: Wann nutze ich was?

kategorie
ABAP Cloud
Veröffentlicht
autor
Johannes

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

EbeneBeschreibungTypische Szenarien
Key User ExtensibilityNo-Code-Erweiterungen über Fiori AppsCustom Fields, einfache Logik, Reports
Developer ExtensibilityABAP Cloud-Erweiterungen im S/4HANA StackKomplexe Logik, BAdIs, Behavior Extensions
Side-by-Side ExtensibilitySeparate Anwendungen auf BTPNeue 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

ToolFiori AppFunktion
Custom Fields and LogicF1481Felder und einfache Logik hinzufügen
Custom CDS ViewsF2170Analytische Views erstellen
Custom Business ObjectsF1366Eigene Geschäftsobjekte definieren
Custom Analytical QueriesF2217Ad-hoc-Analysen erstellen
Adapt UIF5434UI-Layouts anpassen
Configure Launchpad-Apps und Kacheln konfigurieren

Stärken von Key User Extensibility

  1. Schnelle Umsetzung: Erweiterungen in Stunden statt Tagen
  2. Keine Entwicklerressourcen: Fachbereich kann selbst umsetzen
  3. Automatisches Transport: Integriert in SAP-Transportwesen
  4. Upgrade-sicher: Von SAP unterstützte Erweiterungspunkte
  5. Wenig Fehleranfällig: Geführte Benutzeroberfläche

Grenzen von Key User Extensibility

EinschränkungDetails
Keine komplexe LogikKeine Schleifen, keine Tabellenverarbeitung
Keine externen AufrufeKein HTTP, RFC oder OData Consumption
Begrenzte PerformanceNicht für Massendaten geeignet
Eingeschränkte FeldtypenVordefinierte Typen, keine Custom Domains
Kein Unit TestingNur manuelle Tests möglich
Limitierte TriggerVordefinierte 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-TypWerkzeugVerwendung
Extension IncludeADTFelder zu Standard-Tabellen
BAdI ImplementationADTGeschäftslogik einbinden
CDS View ExtensionADTViews um Felder/Assoziationen erweitern
Behavior ExtensionADTRAP-Verhalten erweitern
Service ExtensionADTOData-Services erweitern

Stärken von Developer Extensibility

  1. Maximale Flexibilität: Volle ABAP-Programmierung
  2. Performance: Optimierte Implementierungen möglich
  3. Testbarkeit: ABAP Unit Tests
  4. Wiederverwendbarkeit: Modularisierung und Clean Code
  5. Externe Integration: API-Aufrufe, RFC, HTTP möglich
  6. Versionierung: Git/gCTS-Integration

Was Developer Extensibility ermöglicht

" Beispiel: Komplexe Preisfindung mit externem Service
METHOD 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

KriteriumKey User ExtensibilityDeveloper Extensibility
KomplexitätEinfach bis mittelKomplex
UmsetzungsdauerStunden bis TageTage bis Wochen
RessourcenFachbereichABAP-Entwickler
KostenNiedrigMittel bis hoch
TestbarkeitManuellAutomatisiert
WartbarkeitEinfachErfordert Entwickler
PerformanceBegrenztOptimierbar
Externe SystemeNicht möglichVollständig
MassendatenNicht geeignetGeeignet

Anwendungsfall-Entscheidungen

SzenarioEmpfehlungBegründung
Neues Feld ohne LogikKey UserEinfache Felderweiterung
Defaultwert bei AnlageKey UserDetermination “On Create”
Einfache PflichtfeldprüfungKey UserValidation “On Save”
Komplexe CrossvalidierungDeveloperMehrere Objekte beteiligt
Berechnung über PositionenDeveloperTabellenlogik erforderlich
Integration mit DrittsystemDeveloperHTTP/RFC-Aufrufe
Massendaten-ReportDeveloperPerformance-kritisch
Dynamische UI-SteuerungDeveloperFeature Control in RAP
Workflow-ErweiterungDeveloperBAdI-basierte Events
Quick Wins im PrototypingKey UserSchnelle 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

PrinzipBedeutung für Extensibility
Keine ModifikationenStandard-Code wird nicht verändert
Released APIsNur freigegebene Schnittstellen nutzen
Upgrade-StabilitätErweiterungen überstehen Upgrades
EntkopplungErweiterungen 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 SAP

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

RolleVerantwortung
FachbereichAnforderungsdefinition
IT-ArchitekturTechnische Bewertung
Basis/OperationsBetriebsimpact
EntwicklungUmsetzungsbewertung

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>_EXT

Dokumentationsstandards

Jede Erweiterung muss dokumentieren:

DokumentationsfeldBeispiel
Anforderungs-IDREQ-2024-0815
Business OwnerVertriebsleitung
Technischer NameZZ1_CUSTOMER_PRIORITY
BeschreibungPriorisierung von Kunden für Vertriebssteuerung
AbhängigkeitenWird in Report ZSALES01 verwendet
TestfälleTC-001: Neuer Kunde erhält Default “C”
RisikobewertungNiedrig - 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:

  1. Extension-Inventar erstellen: Alle Custom Fields und BAdIs auflisten
  2. Release Notes prüfen: Deprecated APIs identifizieren
  3. Tests vorbereiten: Testfälle für kritische Extensions
  4. 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-System

Arbeitsteilung

PhaseVerantwortungExtensibility-Typ
Feld anlegenKey UserCustom Fields App
UI einbindenKey UserAdapt UI
Einfache DefaultsKey UserCustom Logic
Komplexe BerechnungDeveloperBAdI/Behavior Extension
IntegrationDeveloperABAP Cloud + HTTP
ReportingKey UserCustom CDS Views
Performance-ReportsDeveloperOptimierte 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 - Customer
Field: Industry Classification
Type: 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_SalesOrder
Felder: Region, Sum(NetAmount), Count(SalesOrder)
Gruppierung: Nach Region
Filter: Aktuelles Geschäftsjahr

Hä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 FieldsKomplexe Geschäftslogik
Defaultwerte und ValidierungenExterne Systemintegrationen
Schnelle PrototypenMassendatenverarbeitung
Business-getriebene ÄnderungenPerformance-kritische Features
Ad-hoc-ReportsWiederverwendbare Komponenten

Die beste Strategie kombiniert beide Ansätze:

  1. Starte mit Key User für schnelle Ergebnisse
  2. Migriere zu Developer wenn Grenzen erreicht sind
  3. Etabliere Governance für langfristige Wartbarkeit
  4. Dokumentiere alles für Upgrade-Sicherheit

Dein nächster Schritt:

  1. Bestandsaufnahme: Welche Extensions existieren bereits?
  2. Extensibility Board etablieren (oder reaktivieren)
  3. Governance-Prozess dokumentieren
  4. Schulung: Key User und Developer sensibilisieren

Weiterführende Artikel