Badi Enhancement logo

Badi Enhancement

Community
likweitan
badi-enhancement

Help with BAdI (Business Add-In) development, the ABAP enhancement framework, and the clean core level classification of enhancement techniques. Covers new BAdIs, fallback classes, filter-based BAdIs, enhancement spots, enhancement implementations, key user extensibility, classic BAdIs, allowed vs. non-allowed enhancement technologies, and replacing modifications and implicit enhancements. Use when users ask about BAdI, BAdIs, Business Add-In, enhancement spot, enhancement implementation, enhancement framework, BAdI filter, BAdI fallback, BAdI definition, BAdI implementation, key user extensibility, custom logic injection, enhancement point, implicit enhancement, explicit enhancement, allowed enhancement technologies, user exit, customer exit, modification, or extending SAP standard code. Triggers include "create a BAdI", "implement a BAdI", "enhancement spot", "find a BAdI", "BAdI filter", "fallback class", "key user extensibility", "extend standard", "enhancement framework", "replace modification", "implicit enhancement", or "which level is this enhancement".

Overview

Publisherlikweitan
Repositoryabap-skills
Skill namebadi-enhancement
Stars
64
Forks
15
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by likweitan on GitHub. Read the source before you install it.

Installation

Install the Badi Enhancement AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/likweitan/abap-skills.git /tmp/abap-skills
mkdir -p .claude/skills
cp -r /tmp/abap-skills/skills/badi-enhancement .claude/skills/badi-enhancement
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Badi Enhancement in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Badi Enhancement on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Badi Enhancement is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

BAdI & Enhancement Framework

Guide for using BAdIs (Business Add-Ins) and the ABAP enhancement framework to extend SAP standard functionality, with clean core level classification for each technique.

BAdIs are the only recommended enhancement technology under the clean core level concept. The ATC check SYCM_ALLOWED_ENH_TECHNOLOGY reports ENHO enhancements built on any other technology as a priority 1 (Level D) finding.

Workflow

  1. Determine the user's goal:

    • Finding an existing BAdI to implement
    • Creating a custom BAdI definition
    • Implementing a BAdI
    • Replacing a modification or implicit enhancement with a BAdI
    • Understanding classic vs. new enhancement framework
    • Using key user extensibility
    • Classifying an enhancement's clean core level
  2. Identify the framework:

    • New BAdI framework (preferred, ABAP Cloud compatible)
    • Classic BAdI framework (legacy, SE18/SE19)
    • Enhancement spots and implementations
    • Key user extensibility (no-code)
  3. Classify the clean core level using the table below

  4. Guide implementation toward the highest applicable level

Clean Core Level by Enhancement Technique

TechniqueLevelGuidance
Key user extensibilityAStart here for tightly coupled extensions — custom fields, custom logic, custom CDS views
Released BAdIAPreferred code-based extension point
Released extension includeAPreferred technique for custom fields on DB tables and CDS views
Released extension point / RAP BOAUse for extending RAP-based SAP Fiori apps
CDS extends / metadata extensionsA/BExtend SAP CDS views rather than modifying them
Non-released BAdIBGood choice for classic extensions even when not released for cloud development. Monitor for release
User exits (VOFM, SAPMV45A)BPredefined SAP coding parts are stable and typically survive upgrades. Technically a modification
Customer exits (SMOD/CMOD)BPredecessor of BAdIs. Use only where no BAdI exists — likely to be replaced in future releases
Non-released extension includeBAcceptable; monitor when a released extension include becomes available
DDIC appends (CI / EEW includes)BAppend fields via customer includes or extension includes
Domain value appends, search help appends/exitsBAcceptable classic extension techniques
OData service redefinitionBRedefine rather than modify
Classic append on DB tableCMonitor when an extension include becomes available and adapt accordingly
Explicit enhancement spotsB/DExceptional cases only, to include a custom BAdI. Do not place extension code directly in the spot
Implicit enhancement spotsDSimilar to a modification — do not use
Source code plug-insDATC priority 1 finding — delete and use a BAdI
SAP-internal-flagged BAdIDExceptional cases only
ModificationsDAvoid completely. If unavoidable, use the modification assistant and govern via ATC

General rule: no modifications to SAP objects. Where a modification exists, check whether a released or classic BAdI can replace it.

ATC governance

ATC checkTechnical nameReports
Allowed enhancement technologiesSYCM_ALLOWED_ENH_TECHNOLOGYENHO enhancements on non-allowed technology — only BAdIs are recommended
Search customer modificationsCI_SEARCH_CUST_MODIFICATIONSModified objects (one finding per object); checks ABAP Cloud object type support

Both produce priority 1 (error) findings, corresponding to Level D. Implement SAP Note 3565942 if these checks are unavailable.

BAdI Framework Overview

New vs. Classic BAdIs

AspectNew BAdI FrameworkClassic BAdI Framework
TransactionsADT or SE18/SE19SE18/SE19
Enhancement SpotRequired containerNot applicable
Multiple UseAlways multiple-useConfigurable
FilterFilter types supportedFilter values
Fallback ClassSupportedNot available
ABAP CloudSupported (released BAdIs only)Not available
Clean core levelA if released, else BB (or D if SAP-internal-flagged)
RecommendationUse for all new developmentMaintain existing only

Creating a Custom BAdI

Step 1: Create Enhancement Spot

ADT: New → Other ABAP Repository Object → Enhancements → Enhancement Spot
Name: Z_ENH_SPOT_TRAVEL

Step 2: Define the BAdI Interface

abap
INTERFACE zif_badi_travel_validate
  PUBLIC.
  METHODS validate
    IMPORTING
      is_travel       TYPE zstravel
    CHANGING
      ct_messages     TYPE bapiret2_t
    RAISING
      cx_badi_not_implemented.
ENDINTERFACE.

Step 3: Define the BAdI in Enhancement Spot

In the enhancement spot, add a BAdI definition:

PropertyValue
BAdI NameZBADI_TRAVEL_VALIDATE
InterfaceZIF_BADI_TRAVEL_VALIDATE
Multiple UseYes (allows multiple implementations)
Fallback ClassZCL_BADI_TRAVEL_FALLBACK (optional)

Step 4: Create Fallback Class (Optional)

abap
CLASS zcl_badi_travel_fallback DEFINITION
  PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES zif_badi_travel_validate.
ENDCLASS.

CLASS zcl_badi_travel_fallback IMPLEMENTATION.
  METHOD zif_badi_travel_validate~validate.
    "Default behavior when no implementation is active
  ENDMETHOD.
ENDCLASS.

Step 5: Call the BAdI in Your Code

abap
"Get BAdI handle
DATA lo_badi TYPE REF TO zif_badi_travel_validate.

GET BADI lo_badi.

"Call BAdI — loops through all active implementations
CALL BADI lo_badi->validate
  EXPORTING is_travel   = ls_travel
  CHANGING  ct_messages = lt_messages.

With Filters

abap
"Define BAdI with filter
"In Enhancement Spot: add filter type COUNTRY (type LAND1)

"Get BAdI with filter
GET BADI lo_badi
  FILTERS country = ls_travel-country.

CALL BADI lo_badi->validate
  EXPORTING is_travel   = ls_travel
  CHANGING  ct_messages = lt_messages.

Implementing an Existing BAdI

Step 1: Find the BAdI

Methods to find a BAdI:

  • ADT search: Search for BAdI name or enhancement spot
  • Transaction SE18: Browse BAdI definitions
  • Breakpoint on GET BADI: Set breakpoint at CL_BADI_INTERNAL_FACTORY=>GET_BADI to find BAdIs called during a process
  • Documentation: Check SAP documentation or community for BAdI names

Step 2: Create Enhancement Implementation

ADT: New → Other ABAP Repository Object → Enhancements → Enhancement Implementation
Name: Z_ENH_IMPL_TRAVEL_CHECK
Enhancement Spot: Z_ENH_SPOT_TRAVEL (or SAP's spot)

Step 3: Create BAdI Implementation Class

abap
CLASS zcl_badi_impl_travel_check DEFINITION
  PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES zif_badi_travel_validate.
ENDCLASS.

CLASS zcl_badi_impl_travel_check IMPLEMENTATION.
  METHOD zif_badi_travel_validate~validate.
    "Custom validation logic
    IF is_travel-begin_date < cl_abap_context_info=>get_system_date( ).
      APPEND VALUE #(
        type       = 'E'
        id         = 'Z_TRAVEL'
        number     = '001'
        message_v1 = 'Travel begin date must be in the future'
      ) TO ct_messages.
    ENDIF.
  ENDMETHOD.
ENDCLASS.

BAdIs in ABAP Cloud / RAP

In ABAP for Cloud Development, BAdIs follow a specific pattern:

Released BAdIs — Level A

  • Only SAP-released BAdIs can be implemented in ABAP Cloud
  • Search for released BAdIs in ADT: api:badi
  • Common in RAP scenarios for extending standard RAP BOs
  • Verify release state programmatically:
abap
SELECT SINGLE *
  FROM i_apistateofrepositoryobject
  WHERE ObjectType   = 'SXSD'          "BAdI definition
    AND ObjectName   = 'MY_BADI'
    AND ReleaseState = 'RELEASED'
  INTO @DATA(ls_state).

RAP BAdI Pattern

abap
"BAdI for extending SAP Fiori apps / RAP BOs
"Implement the released BAdI interface
CLASS zcl_my_rap_badi DEFINITION
  PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_some_released_badi.
ENDCLASS.

CLASS zcl_my_rap_badi IMPLEMENTATION.
  METHOD if_some_released_badi~some_method.
    "Custom logic
  ENDMETHOD.
ENDCLASS.

Dynamic BAdI Calls

abap
"Dynamic GET BADI with BAdI name in variable
DATA lo_badi TYPE REF TO cl_badi_base.
DATA(lv_badi_name) = 'ZBADI_MY_BADI'.

GET BADI lo_badi TYPE (lv_badi_name).

"Dynamic CALL BADI with method name in variable
CALL BADI lo_badi->('VALIDATE')
  EXPORTING is_data = ls_data.

Enhancement Spots and Implementations

Beyond BAdIs, the enhancement framework supports the techniques below. Note the clean core level of each — most are Level D and must be avoided.

Explicit Enhancement Points — Level B/D

SAP defines explicit points in standard code where custom logic can be inserted. These were mainly created to enable industry-specific adaptations.

Guidance: use only in exceptional cases, and only to include a custom-defined BAdI into the SAP core. Do not place extension code directly in the enhancement spot.

abap
"In SAP standard code:
ENHANCEMENT-POINT z_enh_point SPOTS z_enh_spot.

"In your enhancement implementation:
ENHANCEMENT z_my_enhancement.
  "Preferred: delegate to a custom BAdI rather than inlining logic
  DATA lo_badi TYPE REF TO zif_badi_my_logic.
  GET BADI lo_badi.
  CALL BADI lo_badi->process CHANGING cs_data = ls_data.
ENDENHANCEMENT.

Explicit Enhancement Sections — Level B/D

abap
"SAP code with replaceable section:
ENHANCEMENT-SECTION z_section SPOTS z_enh_spot.
  "Default code (can be replaced)
  lv_result = lv_a + lv_b.
END-ENHANCEMENT-SECTION.

"Your replacement:
ENHANCEMENT z_my_section_impl.
  "Custom replacement code
  lv_result = lv_a * lv_b.
ENDENHANCEMENT.

Implicit Enhancements — Level D, do not use

Implicit enhancement points (at the start/end of methods, forms, programs) are technically equivalent to modifications. SYCM_ALLOWED_ENH_TECHNOLOGY reports them as priority 1 (error) findings.

Remediation: delete the enhancement implementation and use a released or classic BAdI instead.

Modifications — Level D, avoid completely

If a modification cannot be prevented:

  • Use the modification assistant so post-upgrade adjustment stays manageable
  • Govern via the CI_SEARCH_CUST_MODIFICATIONS ATC check
  • Reset modifications from SAP Notes once the correction is part of the core

Remediation: check whether a released or classic BAdI can replace the modification.

User Exits and Customer Exits — Level B

  • User exits (VOFM, SAPMV45A): predefined SAP coding parts (form routines, includes) in an SAP namespace. Stable and typically survive upgrades, though technically treated as modifications. Monitor whether a released BAdI can replace them.
  • Customer exits (SMOD/CMOD): the predecessor technology to BAdIs. Usable in exceptional cases where no BAdI exists yet; most will be replaced in upcoming releases.

Structural Extension Techniques

Beyond business logic, these techniques extend SAP data structures and services:

DDIC — Level A/B/C

  • Released extension includes (EEW) → Level A, preferred
  • Customer includes (CI includes) on non-released structures/tables → Level B
  • Classic appends on DB tables → Level C; monitor for a released extension include
  • Domain value appends, search help appends, search help exits → Level B

CDS — Level A/B

  • Use CDS extends rather than modifying SAP CDS views
  • Use CDS metadata extensions for UI annotation changes

OData — Level B

  • Use redefinition of OData services rather than modification

Key User Extensibility — Level A

No-code/low-code extension capabilities available via SAP Fiori. This is the starting point for tightly coupled extensions.

CapabilityDescription
Custom FieldsAdd fields to standard business objects
Custom LogicAdd validation/determination logic via BRF+
Custom CDS ViewsCreate simple analytical views
Custom Business ObjectsCreate simple transactional objects
Custom Analytical QueriesBuild queries on existing CDS views

Finding extension points: use the extension registry (transaction SEEA / the extension point registry) to find every extension point registered in the system.

When a requirement is too complex for key user extensibility, move to developer extensibility (ABAP Cloud) — still Level A.

Replacing Level D Enhancements

Existing Level D techniqueReplacement
ModificationReleased BAdI → classic BAdI → key user extensibility
Implicit enhancementReleased BAdI → classic BAdI
Explicit enhancement with inline codeMove the code into a custom BAdI called from the enhancement
Source code plug-inReleased or classic BAdI
SAP-internal-flagged BAdI implementationFind an alternative released or classic extension point
SAP Note manual correctionReset the modification once the correction ships in the core

Remediation workflow:

  1. Run SYCM_ALLOWED_ENH_TECHNOLOGY and CI_SEARCH_CUST_MODIFICATIONS
  2. For each priority 1 finding, search for a released BAdI (api:badi in ADT)
  3. If no released BAdI exists, search for a classic BAdI (Level B)
  4. If neither exists, consider key user extensibility or a custom BAdI in an explicit enhancement spot
  5. Delete the Level D implementation and migrate the logic
  6. Re-run ATC to confirm the finding is resolved

Best Practices

  1. BAdIs are the only recommended enhancement technology — everything else is Level B at best
  2. Prefer released BAdIs (Level A) over non-released BAdIs (Level B)
  3. Prefer new BAdI framework over classic BAdIs
  4. Never use implicit enhancements or modifications (Level D)
  5. Start with key user extensibility (Level A) for tightly coupled extensions
  6. Use filters to scope implementations to specific contexts
  7. Implement fallback classes for default behavior
  8. Keep implementations focused — one concern per implementation
  9. Document the BAdI with clear interface documentation
  10. Test implementations independently using ABAP Unit
  11. In ABAP Cloud, only implement released BAdIs
  12. Govern with ATC — block transport release on priority 1 and 2 findings

Output Format

When helping with BAdI/enhancement topics, structure responses as:

markdown
## BAdI / Enhancement Guidance

### Framework

- Type: [New BAdI / Classic BAdI / Enhancement Spot / Key User]
- Clean core level: [A / B / C / D]
- Context: [ABAP Cloud / Classic ABAP]

### Implementation

[Step-by-step with code examples]

### Expected ATC Findings

- [Check name, priority, and level, if any]

### Testing

[How to verify the enhancement works]

References

Detailed Reference

  • BAdI patterns: Read references/badi-patterns.md for implementation patterns, filters, fallback classes, and testing

Related Skills

  • abap-cloud: Use for clean core level definitions and which BAdIs are released
  • abap-cloud-migration: Use for replacing Level D modifications and enhancements
  • atc-cloudification: Use for configuring SYCM_ALLOWED_ENH_TECHNOLOGY governance
  • rap: Use for implementing released RAP BAdIs for SAP Fiori apps
  • authorization-iam: Use for setting up authorizations for enhanced functionality

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Badi Enhancement AI skill do?

Help with BAdI (Business Add-In) development, the ABAP enhancement framework, and the clean core level classification of enhancement techniques. Covers new BAdIs, fallback classes, filter-based BAdIs, enhancement spots, enhancement implementations, key user extensibility, classic BAdIs, allowed vs. non-allowed enhancement technologies, and replacing modifications and implicit enhancements. Use when users ask about BAdI, BAdIs, Business Add-In, enhancement spot, enhancement implementation, enhancement framework, BAdI filter, BAdI fallback, BAdI definition, BAdI implementation, key user exten...

Why use Badi Enhancement on TypingMind?

Because you install it once and use it with any model. Badi Enhancement is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Badi Enhancement in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/likweitan/abap-skills/tree/main/skills/badi-enhancement. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Badi Enhancement?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Badi Enhancement?

As many as you like. As long as a model supports skills, you can use Badi Enhancement with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Badi Enhancement AI skill free?

Yes. It is published on GitHub by likweitan under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇