abap-cloud — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited abap-cloud (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 developing with the ABAP Cloud programming model, classifying extensions using the clean core level concept (A–D), and applying clean core principles.
Terminology note: SAP has evolved the former 3-tier extensibility model into the clean core level concept. The 3-tier model (Tier 1/2/3) is superseded — use Levels A, B, C, D instead. Current product naming: SAP Cloud ERP (public), SAP Cloud ERP Private (formerly S/4HANA Cloud Private Edition), SAP Business AI Platform (includes SAP BTP capabilities), SAP Build (pro-code and low-code tooling, includes ABAP Cloud).
SAP classifies extensions into four levels, similar to energy labels. Level A is the target state reflecting the "SAP Business AI Platform first" strategy; Level D must be remediated.
| Level | Name | SAP objects qualifier | Upgrade stability | ATC behavior |
|---|---|---|---|---|
| Level A | Extend with SAP Build | [Released] SAP remote APIs, local APIs, extension points | Guaranteed by stability contract | No finding |
| Level B | Leverage classic APIs | [Classic] SAP APIs and extension points | Nominated by SAP experts, no formal contract | Priority 3 (information) |
| Level C | Access internal objects | [Internal] SAP objects (the default for unclassified objects) | Not upgrade-stable; mitigate via changelog | Priority 2 (warning) |
| Level D | Not recommended | [Not recommended] SAP objects, extension points, techniques | High risk, significant technical debt | Priority 1 (error) |
Clean core status: Level A = clean core · Levels B and C = conditional clean core · Level D = not clean core.
Only publicly released interfaces and extension points with a stability contract.
"Level A: ABAP Cloud class using only released APIs
CLASS zcl_my_extension DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS zcl_my_extension IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
"Released CDS view — no direct table access
SELECT FROM I_BusinessPartner
FIELDS BusinessPartner, BusinessPartnerName
INTO TABLE @DATA(partners)
UP TO 10 ROWS.
out->write( partners ).
ENDMETHOD.
ENDCLASS.Well-established, documented, SAP-nominated classic APIs and classic frameworks. No formal stability contract, but a long history of reliable use and SAP internal quality assurance.
BAPI_* function modules, CL_GUI_ALV_GRID, non-released BAdIs, user/customer exits, SAP GUI and ALV frameworksobjectClassifications_SAP.json (Cloudification Repository) and SAP Note 3578329 for framework classificationHOMESAP internal objects that are technically accessible but not released, not nominated, not documented, and not supported for customer use. This is the default classification for any SAP object not otherwise classified.
internalAPI in the Cloudification RepositoryHighest risk, highest technical debt. Remediate immediately.
noAPI in the Cloudification Repository (e.g., RFC_READ_TABLE)EXEC SQL, DB hints, report/Dynpro generation, nametab import/export)Two coexisting on-stack development models in SAP Cloud ERP Private:
| Aspect | ABAP Cloud development | Classic ABAP development |
|---|---|---|
| Clean core | Level A | Level B (or C/D if internal/not-recommended objects used) |
| Language version | ABAP for Cloud Development | Standard ABAP |
| Default choice | Yes — for all new ABAP-based extensions | Only where no released API exists or UI is classic |
| Leading model | RAP | Classic frameworks (SAP GUI, ALV, Web Dynpro, SEGW, BOPF) |
| Enforcement | Syntax check + runtime check | ABAP test cockpit (ATC) governance |
| Software component | Component with language version ABAP for Cloud Development | HOME or existing classic component |
| IDE | ADT (mandatory) | ADT or SAP GUI |
| Developer role | SAP_BC_ABAP_DEVELOPER_5 template | Standard developer role |
ABAP Cloud objects may access only:
Classic ABAP objects should access only:
Authorization object S_ABPLNGVS controls whether a developer may create objects in Standard ABAP or only in ABAP for Cloud Development. Use it to create a dedicated ABAP Cloud developer role.
CALL TRANSACTION, SUBMIT, AUTHORITY-CHECK (use CL_ABAP_AUTHORIZATION)EXEC SQL or native SQL (use ABAP SQL or AMDP)INCLUDE programsWRITE or classic list outputif_oo_adt_classrun for console outputWhen a required API is not released, build a wrapper in a classic ABAP software component and release it for ABAP Cloud development. The consuming ABAP Cloud code stays clean; the wrapper localizes the level violation to a single place.
Wrapper level classification (from the whitepaper):
"Classic ABAP software component: wrapper class released for ABAP Cloud
"Wrapping BAPI_PO_CREATE1 (a classic API) → Level B
CLASS zcl_wrapper_material DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES zif_material_reader.
"Release with C1 contract in ADT → API State tab
ENDCLASS.
CLASS zcl_wrapper_material IMPLEMENTATION.
METHOD zif_material_reader~get_material.
"Access non-released API internally
SELECT SINGLE * FROM mara
WHERE matnr = @iv_matnr
INTO @DATA(ls_mara).
"Map to released structure
rs_material = VALUE #(
matnr = ls_mara-matnr
mtart = ls_mara-mtart
matkl = ls_mara-matkl ).
ENDMETHOD.
ENDCLASS.TYPES declarations in the wrapper's public section so only the wrapper needs releasing.SU22 data for the wrapper when releasing it and create SU22 variants per designated usage."Side-by-side consumer calls a released RFC wrapper
DATA(lo_dest) = cl_rfc_destination_provider=>create_by_comm_arrangement(
comm_scenario = 'Z_MY_COMM_SCENARIO'
service_id = 'Z_MY_OUTBOUND_SRV' ).
CALL FUNCTION 'Z_WRAPPER_FM'
DESTINATION lo_dest->get_destination_name( )
EXPORTING iv_param = lv_value
IMPORTING ev_result = lv_result.| Method | Description |
|---|---|
| Cloudification Repository | objectClassifications_SAP.json — classic APIs, noAPI, internalAPI classifications |
| Cloudification API Viewer | Browse at https://sap.github.io/abap-atc-cr-cv-s4hc/ |
| SAP Business Accelerator Hub | Released remote and local APIs with stability contracts |
| ADT: Released Object Search | Search with api: prefix (e.g., api:cl_*), or Project Explorer → Released Objects |
| ATC clean core checks | SYCM_USAGE_OF_APIS, SYCM_ALLOWED_ENH_TECHNOLOGY, CI_SEARCH_CUST_MODIFICATIONS |
| SAP Note 3578329 | Classification of classic technologies, reuse services, application frameworks |
| SAP Note 3565942 | Delivers the Usage of APIs and Allowed Enhancement Technologies ATC checks |
| released-abap-classes skill | Common released classes for ABAP Cloud |
| XCO Library | XCO_CP_* classes provide cloud-ready alternatives |
Classic API classifications are provided for these object types: function modules (FUNC), classes (CLAS), interfaces (INTF), CDS views (STOB), BO interfaces (BDEF). DDIC objects used as data types are not classified or checked; only SQL access to SAP tables is checked.
| Non-released (Level C/D) | Released alternative (Level A) |
|---|---|
AUTHORITY-CHECK | CL_ABAP_AUTHORIZATION=>check_authorization() |
sy-uname | cl_abap_context_info=>get_user_technical_name() |
sy-datum / sy-uzeit | cl_abap_context_info=>get_system_date/time() |
cl_gui_frontend_services | Not available — use Fiori UI instead |
CALL TRANSACTION | RAP action or Fiori navigation |
SUBMIT ... AND RETURN | Background job via CL_APJ_RT_API |
Direct SAP table SELECT | Released CDS view (I_* views) |
CONVERSION_EXIT_* | CL_ABAP_CONV_CODEPAGE, domain fixed values |
BAPI_* function modules | Released APIs or RAP BO consumption (else Level B) |
RFC_READ_TABLE (noAPI) | Released CDS view or released remote API |
Classic MESSAGE statement | RAP messages via REPORTED |
| Category | Use case | Level |
|---|---|---|
| Extensions | Custom field via released extension include | A |
| Extensions | Implementation of a released SAP BAdI | A |
| Extensions | Custom field via non-released extension include | B |
| Extensions | Custom field on DB table via classic append | C |
| Extensions | Implementation of user/customer exit (e.g., SAPMV45A) | B |
| Extensions | Implementation of a non-released SAP BAdI | B |
| Extensions | Implementation of a BAdI flagged SAP-internal | D |
| Extensions | Extension of a RAP-based SAP Fiori app | A |
| Extensions | Extension of an SEGW / BOPF / UI5 SAP Fiori app | B |
| Extensions | Extension of an SAP GUI transaction | B |
| Custom applications | Custom RAP-based SAP Fiori app (core scope) | A |
| Custom applications | Custom SEGW / BOPF / UI5 app | B (prefer RAP) |
| Custom applications | Legacy UI app (ABAP report with ALV, Web Dynpro) | B (should be prevented) |
| Custom applications | SE54-based BC UI | B (prefer RAP-based BC app) |
| Wrapper | Wrapper class around non-released SAP object (e.g., BAPI) | B if wrapped object is classic API, else C |
| Wrapper | Wrapper CDS view for non-released SAP table or CDS view | B if wrapped object is classic API, else C |
| Modifications | SAP Note with manual corrections | D (reset once in core) |
| Modifications | Business-driven modification | D (exceptional cases only) |
Both are Level A when they use released extension points:
SEEA / the extension registry to find registered extension points.HOME for classicWhen helping with ABAP Cloud / clean core topics, structure responses as:
## ABAP Cloud Guidance
### Context
- Clean core level: [A / B / C / D] (classified by the lowest level used)
- Development model: [ABAP Cloud / Classic ABAP]
- Language version: [ABAP for Cloud Development / Standard ABAP]
- Target platform: [SAP Cloud ERP / SAP Cloud ERP Private / SAP Business AI Platform]
### Recommendation
[Guidance on the approach and how to reach a higher level]
### Code Example
[ABAP code following clean core principles]
### Released API References
- [List of relevant released or classic APIs used]
### Expected ATC Findings
- [Priority and check name, if any]references/clean-core-levels.md for a full level-by-level comparison, decision matrix, governance setup, and remediation prioritiesSU22 handling~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.