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 mitZZ
oderUSEREXIT
im Namen, z. B.MV45AFZZ
), und darin gibt es eine leereFORM 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 leereFORM
-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_PREPAREin
MV45AFZZ) 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.