Was sind SAP User Exits? Einfach erklärt (mit Beispielen)

kategorie
General
Veröffentlicht
autor
Johannes

Stell Dir vor, Du benutzt ein Standard-SAP-Programm, zum Beispiel zum Anlegen eines Kundenauftrags (VA01). Das Programm macht genau das, was SAP vorgesehen hat. Aber was ist, wenn Du an einer ganz bestimmten Stelle im Ablauf eine * eigene kleine Zusatzprüfung* oder eine automatische Befüllung eines Feldes einbauen möchtest, die SAP so nicht vorgesehen hat?

Genau dafür gibt es (unter anderem) die User Exits.

Was ist ein User Exit?

Ein User Exit ist im Grunde eine “Tür” oder ein “Haken”, den SAP an einer fest definierten Stelle in einem Standard-ABAP-Programm eingebaut hat. An dieser Stelle ruft das SAP-Programm ein spezielles Unterprogramm (eine FORM -Routine) auf, das in einem separaten, für Kunden vorgesehenen Include-Programm liegt.

  • SAP liefert das Programm mit dem “Haken”: Im Standardcode steht z. B. PERFORM user_exit_sonderpruefung IN PROGRAM sapmv45a.
  • SAP liefert das “leere” Include-Programm: Das Programm sapmv45a enthält ein Include (oft mit ZZ oder USEREXIT im Namen, z. B. MV45AFZZ), und darin gibt es eine leere FORM user_exit_sonderpruefung. ... ENDFORM.
  • Du füllst die Lücke: Als Entwickler:in kannst Du nun in dieses spezielle Include-Programm (z. B. MV45AFZZ) gehen und Deinen eigenen ABAP-Code in die leere FORM-Routine schreiben.

Immer wenn das SAP-Standardprogramm nun an die Stelle mit dem PERFORM-Aufruf kommt, wird Dein Code in der FORM -Routine ausgeführt.

Wofür werden User Exits typischerweise verwendet? (Leicht verständliche Beispiele)

1. Zusätzliche Prüfungen

Beispiel (Kundenauftrag SD): Du möchtest sicherstellen, dass bei Aufträgen für eine bestimmte Kundengruppe immer ein bestimmtes Feld (z. B. ein benutzerdefiniertes Feld ZZ_Sonderinfo) auf Positionsebene gefüllt ist, bevor der Auftrag gespeichert werden kann. Du könntest einen User Exit nutzen, der vor dem Speichern ( USEREXIT_SAVE_DOCUMENT_PREPAREinMV45AFZZ) aufgerufen wird, diese Prüfung durchführt und ggf. eine Fehlermeldung ( MESSAGE E…`) ausgibt, die das Speichern verhindert.

2. Werte vorbelegen oder ändern

  • Beispiel (Kundenauftrag SD): Immer wenn ein bestimmtes Material bestellt wird, soll automatisch ein spezifischer Lieferhinweis in ein Textfeld der Auftragsposition eingetragen werden. Ein User Exit, der nach der Eingabe der Materialnummer läuft (z. B. USEREXIT_MOVE_FIELD_TO_VBAP), könnte das erledigen.
  • Beispiel (Bestellung MM): Wenn eine Bestellung für einen bestimmten Lieferanten angelegt wird, soll automatisch die Einkäufergruppe auf einen Standardwert gesetzt werden, falls sie leer ist. Ein User Exit im Bestellprogramm könnte dies tun.

3. Daten für eigene Tabellen sammeln

Beispiel: Jedes Mal, wenn ein Materialstamm (MM01/MM02) geändert wird, möchtest Du Benutzer, Datum, Uhrzeit und die geänderte Materialnummer in eine eigene Protokolltabelle (Z_MAT_LOG) schreiben. Ein User Exit, der beim Sichern des Materialstamms aufgerufen wird, könnte diese Daten sammeln und speichern.

Wichtige Merkmale von User Exits

  • Prozedural: Sie basieren auf FORM-Routinen (Unterprogrammen).
  • “Quasi-Modifikation”: Du änderst zwar nicht direkt den SAP-Standard-Report, aber Du schreibst Code in ein von SAP ausgeliefertes Include-Programm. Das erfordert in der Regel einen Entwicklerschlüssel (SSCR Key) und wird im System als (vorgesehene) Modifikation registriert. Das ist ein Unterschied zu BAdIs oder Enhancements.
  • Abhängigkeit von globalen Daten: User Exits greifen oft direkt auf globale Variablen des Hauptprogramms zu. Das kann bei Upgrades problematisch werden, wenn SAP diese Variablen ändert.
  • Ältere Technik: User Exits sind eine der älteren Erweiterungstechniken. Neuere Techniken wie Customer Exits ( Funktionsbaustein-Exits über SMOD/CMOD), BAdIs (objektorientiert) und das Enhancement Framework (Enhancement Points/Sections) sind flexibler und oft “sauberer” vom Standard getrennt.
  • Verbreitung: Trotz ihres Alters sind User Exits in vielen Kernmodulen wie SD (Vertrieb), MM (Materialwirtschaft) und teils FI (Finanzwesen) noch sehr verbreitet und oft die einzige Möglichkeit für bestimmte Anpassungen an älteren Stellen.

Fazit

User Exits sind vordefinierte Stellen in SAP-Standardprogrammen, an denen Du eigenen ABAP-Code in Form von FORM -Routinen einfügen kannst, um Standardprozesse zu erweitern oder anzupassen. Sie sind eine ältere, prozedurale Technik, die aber in vielen Modulen noch relevant ist. Für neuere Entwicklungen sind BAdIs oder das Enhancement Framework meist die bevorzugte Wahl.