SAP transaction codeObjectSE19ModuleABAP

SE19 — BAdI Implementation Builder

SE19 is the transaction used to create, edit and activate implementations of Business Add-Ins, the customer-facing counterpart to BAdI definitions maintained in SE18. It handles two different generations of the same mechanism - classic filter-dependent BAdIs and enhancement-spot-based BAdIs - each with its own activation and conflict rules, which is the source of most confusion around it.

This page covers SE19, the transaction consultants and developers use to implement a BAdI hook that already exists in standard SAP code. It focuses on the practical differences between classic and enhancement-spot BAdIs, the activation and filter mistakes that cause an implementation to silently never fire, and where the boundary sits between functional, ABAP and Basis responsibility.

Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 1,156 words

Purpose

SE19 is the BAdI Builder transaction used to create, edit and activate BAdI implementations, the customer- or partner-facing counterpart to BAdI definitions maintained in SE18. Every BAdI defines a hook point in standard code; SE19 is where that hook is filled in with a concrete implementing class and method logic. The structural fact that causes most confusion: SE19 handles two generations of the same mechanism side by side - classic BAdIs, which are filter-dependent and historically limited to one active implementation per filter value, and enhancement-spot-based ('new' or kernel) BAdIs, which support several simultaneously active implementations with an explicit execution order. Same transaction, two different activation and conflict rules depending on which tab is used to open the object.

When it is used

Reached for whenever custom logic needs to be injected into a standard SAP process without modifying the standard object itself - pricing, output determination, partner determination, workflow triggers, IDoc processing, and the screen exits that migrated from classic user-exits to BAdI style. A functional consultant identifies the hook point, often from SE18 documentation or a where-used search on the standard code, then hands the exit or enhancement spot name to ABAP development, who does the actual work in SE19. It is not the tool for adjusting configuration-driven behavior; if the requirement can be met through a customizing table, SM30 or SM31 is the right transaction, not a new BAdI implementation. It is also not used to define new hooks - that belongs to SE18.

How to use it in practice

  • Confirm whether the BAdI is classic or enhancement-spot based, using SE18 documentation or a search on the standard code.
  • In SE19, select the matching option - 'Classic BAdI' or 'Enhancement Spot' - and enter the definition or spot name.
  • Create a new implementation, give it a name, assign a package and transport request.
  • Assign or create the implementing class; SAP generates the interface method stubs.
  • Write the method logic, save, and explicitly activate the implementation - creation alone leaves it inactive.
  • For filter-dependent BAdIs, maintain the required filter values under the implementation's filter tab before activation.
  • Test by running the standard process end to end, or by placing a debugger breakpoint inside the method.

Key data objects

  • SXC_EXIT - classic BAdI definition: exit name, filter type, whether the BAdI is filter-dependent.
  • SXC_ATTR - implementation header for classic BAdIs: implementation name, assigned class, active flag, filter dependency.
  • SXC_CLASS - filter-dependent class assignment: which class fires for which filter value under a given implementation.
  • TADIR - repository object entry for the implementation, driving transport and package assignment for both classic and enhancement-spot BAdIs.

How to prove it in the data

Pull SXC_ATTR filtered on the exit name to list every classic implementation with its class and active flag; a 'my custom code never runs' complaint is very often an active flag that was never set, or an implementation sitting in a client different from the one being tested. Cross-check SXC_CLASS for the same exit and implementation name to see which filter value the class is tied to; if the actual business data carries a filter value with no matching row, the implementation is skipped with no error raised anywhere. For enhancement-spot BAdIs, check status directly inside SE19 rather than through table lookups, since that generation's storage is split across enhancement framework tables that are not routinely queried directly.

ECC vs S/4HANA

SE18 and SE19 continue to work the same way on S/4HANA; the BAdI mechanism itself is unchanged. What does change is scrutiny during a conversion project: custom BAdI implementations against objects that were removed, restructured, or replaced by the simplified data model need to be checked with the custom code check tooling, since an implementation that compiled cleanly in the old release can still reference a field or structure that no longer exists afterward. There is no Fiori app for BAdI implementation maintenance; this remains a SAP GUI developer transaction.

Common pitfalls and how to diagnose them

  • Not activated - the most common cause: implementation created and saved but activation was never pressed. The method never fires. Check the active flag before suspecting anything else.
  • Filter value mismatch - a filter-dependent classic BAdI implementation is created for one filter value while the actual transaction data carries a different one. The standard call finds no matching implementation and does nothing silently, with no exception raised.
  • Multiple active implementations conflict - classic filter-independent BAdIs allow only one active implementation at a time. A second developer activating another implementation deactivates or errors against the first. Check SXC_ATTR and SXC_CLASS for duplicate active entries before assuming the standard code is at fault.
  • Wrong generation, wrong tab - editing an enhancement-spot BAdI as if it were classic, or the reverse, so the transaction appears to show nothing because the object is being sought in the wrong storage category. Confirm the generation in SE18 documentation first.
  • Empty or stub method body - the implementation is active and the filter matches, but the method contains only the generated stub with no logic. Easily mistaken for 'the BAdI is broken' when it was simply never coded.
  • Transport scope gaps - implementation created and activated in one client, often a sandbox or golden client, and never transported. Works in development, absent in QA or production. Check the transport request contents rather than runtime behavior.
  • Non-deterministic execution order - enhancement-spot BAdIs with several active implementations run in an order that is not guaranteed unless explicitly sequenced. Unexpected interaction between two independently developed implementations is a frequent late-stage defect.

Whose problem this is

ABAP development owns SE19 end to end - creation, coding, activation, transport. Functional consultants own identifying the correct hook point and specifying the business logic to be implemented; Basis owns transport routing only if the landscape is unusual. A clean handover from functional to ABAP names the exact BAdI or enhancement spot, the business scenario and filter values involved, and the expected outcome, not just a description of the desired end-user behavior.

Related SAP objects

Reviewed pages this object connects to in the ERPClimb knowledge graph.

Source: ERPClimb — https://erpclimb.com/sap-tcodes/se19ERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.