badi-enhancement — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited badi-enhancement (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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 checkSYCM_ALLOWED_ENH_TECHNOLOGYreportsENHOenhancements built on any other technology as a priority 1 (Level D) finding.
SE18/SE19)| Technique | Level | Guidance |
|---|---|---|
| Key user extensibility | A | Start here for tightly coupled extensions — custom fields, custom logic, custom CDS views |
| Released BAdI | A | Preferred code-based extension point |
| Released extension include | A | Preferred technique for custom fields on DB tables and CDS views |
| Released extension point / RAP BO | A | Use for extending RAP-based SAP Fiori apps |
| CDS extends / metadata extensions | A/B | Extend SAP CDS views rather than modifying them |
| Non-released BAdI | B | Good choice for classic extensions even when not released for cloud development. Monitor for release |
User exits (VOFM, SAPMV45A) | B | Predefined SAP coding parts are stable and typically survive upgrades. Technically a modification |
| Customer exits (SMOD/CMOD) | B | Predecessor of BAdIs. Use only where no BAdI exists — likely to be replaced in future releases |
| Non-released extension include | B | Acceptable; monitor when a released extension include becomes available |
| DDIC appends (CI / EEW includes) | B | Append fields via customer includes or extension includes |
| Domain value appends, search help appends/exits | B | Acceptable classic extension techniques |
| OData service redefinition | B | Redefine rather than modify |
| Classic append on DB table | C | Monitor when an extension include becomes available and adapt accordingly |
| Explicit enhancement spots | B/D | Exceptional cases only, to include a custom BAdI. Do not place extension code directly in the spot |
| Implicit enhancement spots | D | Similar to a modification — do not use |
| Source code plug-ins | D | ATC priority 1 finding — delete and use a BAdI |
| SAP-internal-flagged BAdI | D | Exceptional cases only |
| Modifications | D | Avoid 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 check | Technical name | Reports |
|---|---|---|
| Allowed enhancement technologies | SYCM_ALLOWED_ENH_TECHNOLOGY | ENHO enhancements on non-allowed technology — only BAdIs are recommended |
| Search customer modifications | CI_SEARCH_CUST_MODIFICATIONS | Modified 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.
| Aspect | New BAdI Framework | Classic BAdI Framework |
|---|---|---|
| Transactions | ADT or SE18/SE19 | SE18/SE19 |
| Enhancement Spot | Required container | Not applicable |
| Multiple Use | Always multiple-use | Configurable |
| Filter | Filter types supported | Filter values |
| Fallback Class | Supported | Not available |
| ABAP Cloud | Supported (released BAdIs only) | Not available |
| Clean core level | A if released, else B | B (or D if SAP-internal-flagged) |
| Recommendation | Use for all new development | Maintain existing only |
ADT: New → Other ABAP Repository Object → Enhancements → Enhancement Spot
Name: Z_ENH_SPOT_TRAVELINTERFACE zif_badi_travel_validate
PUBLIC.
METHODS validate
IMPORTING
is_travel TYPE zstravel
CHANGING
ct_messages TYPE bapiret2_t
RAISING
cx_badi_not_implemented.
ENDINTERFACE.In the enhancement spot, add a BAdI definition:
| Property | Value |
|---|---|
| BAdI Name | ZBADI_TRAVEL_VALIDATE |
| Interface | ZIF_BADI_TRAVEL_VALIDATE |
| Multiple Use | Yes (allows multiple implementations) |
| Fallback Class | ZCL_BADI_TRAVEL_FALLBACK (optional) |
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."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."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.Methods to find a BAdI:
CL_BADI_INTERNAL_FACTORY=>GET_BADI to find BAdIs called during a processADT: New → Other ABAP Repository Object → Enhancements → Enhancement Implementation
Name: Z_ENH_IMPL_TRAVEL_CHECK
Enhancement Spot: Z_ENH_SPOT_TRAVEL (or SAP's spot)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.In ABAP for Cloud Development, BAdIs follow a specific pattern:
api:badiSELECT SINGLE *
FROM i_apistateofrepositoryobject
WHERE ObjectType = 'SXSD' "BAdI definition
AND ObjectName = 'MY_BADI'
AND ReleaseState = 'RELEASED'
INTO @DATA(ls_state)."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 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.Beyond BAdIs, the enhancement framework supports the techniques below. Note the clean core level of each — most are Level D and must be avoided.
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.
"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."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 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.
If a modification cannot be prevented:
CI_SEARCH_CUST_MODIFICATIONS ATC checkRemediation: check whether a released or classic BAdI can replace the modification.
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.Beyond business logic, these techniques extend SAP data structures and services:
No-code/low-code extension capabilities available via SAP Fiori. This is the starting point for tightly coupled extensions.
| Capability | Description |
|---|---|
| Custom Fields | Add fields to standard business objects |
| Custom Logic | Add validation/determination logic via BRF+ |
| Custom CDS Views | Create simple analytical views |
| Custom Business Objects | Create simple transactional objects |
| Custom Analytical Queries | Build 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.
| Existing Level D technique | Replacement |
|---|---|
| Modification | Released BAdI → classic BAdI → key user extensibility |
| Implicit enhancement | Released BAdI → classic BAdI |
| Explicit enhancement with inline code | Move the code into a custom BAdI called from the enhancement |
| Source code plug-in | Released or classic BAdI |
| SAP-internal-flagged BAdI implementation | Find an alternative released or classic extension point |
| SAP Note manual correction | Reset the modification once the correction ships in the core |
Remediation workflow:
SYCM_ALLOWED_ENH_TECHNOLOGY and CI_SEARCH_CUST_MODIFICATIONSapi:badi in ADT)When helping with BAdI/enhancement topics, structure responses as:
## 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]SYCM_ALLOWED_ENH_TECHNOLOGYreferences/badi-patterns.md for implementation patterns, filters, fallback classes, and testingSYCM_ALLOWED_ENH_TECHNOLOGY governance~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.