ABAP for Key Users: what key user objects are and where they fit in Clean Core
The third ABAP language version, the one used by the Fiori extensibility apps. What each app generates, what this code can use and do, how it is transported and how it appears in the Clean Core levels.
When people talk about Clean Core, the conversation usually stays between classic ABAP and ABAP Cloud. There is a third language version, less discussed and present in almost every S/4HANA system: ABAP for Key Users. It holds the code created by the Fiori extensibility apps, such as Custom Logic and Custom CDS Views. Many companies already have dozens of these objects, with the ZZ1_ prefix, without really knowing what they are or how they count on the dashboard.
What ABAP for Key Users is
SAP defines three language versions for ABAP in S/4HANA:
| Version | What it is for | Where it is written |
|---|---|---|
| Standard ABAP | Classic ABAP, without restrictions | SAP GUI or ADT |
| ABAP for Cloud Development | Development with cloud rules: released APIs only | ADT |
| ABAP for Key Users | Extensions made by key users, within what SAP offers as extension points | Fiori extensibility apps |
ABAP for Key Users is a much more restricted version than ABAP Cloud. The code always lives inside methods, and the version is set by the apps themselves: nobody chooses ABAP for Key Users in ADT for a productive object. It exists in SAP BTP, in S/4HANA Cloud Public Edition and, since 2022, in S/4HANA on-premise and Private Edition.
The apps and what each one generates
| App | What it creates |
|---|---|
| Custom Fields | New fields in SAP tables, screens, CDS views, services and forms |
| Custom Logic | The implementation of a released BAdI, with code written by the key user |
| Custom CDS Views | CDS views on top of released SAP CDS views or other Key User objects, for reporting, APIs or reuse |
| Custom Business Objects | A business object of your own: tables, OData service, user interface and validation logic |
| Custom Analytical Queries | Analytical queries on analytical CDS views |
One detail that matters for Clean Core: not every object generated by these apps is in ABAP for Key Users. In an S/4HANA 2023 system, the CDS views from Custom CDS Views and the classes from Custom Logic were in ABAP for Key Users. The CDS views generated by Custom Business Objects, by Custom Analytical Queries and by custom fields, however, were in Standard ABAP, in the old CDS format. For the dashboard, what counts is the object's language version, not the app that created it.
The ZZ1_ and YY1_ prefixes
Key User objects are created with a prefix of their own. In S/4HANA on-premise and Private Edition, it is configured in transaction S_ATO_SETUP, together with the target packages, and the most common one is ZZ1_. Sandbox drafts use another prefix, such as ZZ9_. In S/4HANA Cloud Public Edition, the prefix that usually appears is YY1_.
What a key user object can use
The rule is narrower than in ABAP Cloud. An object in ABAP for Key Users can only use:
- objects released with C1 and the Use in Key User Apps visibility;
- objects created by the Key User apps and flagged for use by other Key User apps.
In an S/4HANA 2023 system, the syntax check gave these results:
| Key User code reads... | Result |
|---|---|
CDS view released for Key User and for Cloud (I_Product) |
Accepted |
CDS view released for Key User only (I_BudgetEntryDocumentType) |
Accepted |
CDS view released for Cloud only (ICA_FiscalYearVariant) |
Rejected: "The use of CDS Entity ... is not permitted" |
Class released for Cloud only (CL_BALI_LOG) |
Rejected |
Unreleased table with a successor (T001) |
Rejected, with the hint "Use CDS Entity I_COMPANYCODE instead" |
| Object generated by another Key User app (read by a Custom Logic class) | Accepted |
| CDS view in ABAP for Key Users created in ADT, for testing only, not released | Rejected |
The last row shows a difference from ABAP Cloud. In ABAP Cloud, Z objects in the same software component see each other without a contract. In ABAP for Key Users, they do not: even in the same package, an object created outside the apps must be released for Key User. The ABAP Cloud software component rule is described in Software components in ABAP Cloud: who can call whom, and the visibilities in API release contracts: what C0, C1, C2, C3 and C4 guarantee.
The opposite direction also has a limit: an ABAP Cloud class that tries to read a CDS view released only for Key User is rejected. SAP describes the two layers as separate, and with SAP objects that is how it works. With the company's own Key User objects, in S/4HANA on-premise, an ABAP Cloud object in the same software component read them without a release; from another software component, the C1 rule applies. ABAP Cloud objects can be released for Key User, but not the other way round, with one exception: custom fields can be used by ABAP Cloud code.
What the language allows
ABAP for Key Users has a short list of statements, published by SAP:
- allowed: declarations (
DATA,TYPES,CONSTANTS,FIELD-SYMBOLS), flow control (IF,CASE,DO,WHILE,LOOP), exception handling (TRY,CATCH) and string operations (CONCATENATE,SPLIT,REPLACE,FIND); - restricted:
SELECTonly on permitted objects;INSERT,MODIFY,DELETE,READandSORTonly on internal tables;MESSAGEonly withINTO;RAISEonlyEXCEPTION; - system fields: only
sy-subrc,sy-tabix,sy-index,sy-dbcntandsy-fdpos, and only for reading.
Left out, among others: calling a function module, AUTHORITY-CHECK, COMMIT WORK, CREATE OBJECT, writing to a database table, calling a BAdI, dynamic programming and list output. The syntax check message is direct, for example "AUTHORITY-CHECK" is not allowed in the current ABAP language version. or Access to the field "SY-UNAME" is not permitted in the current ABAP language version.
Some expressions, such as VALUE, NEW, CONV and COND, as well as JOIN and FOR ALL ENTRIES, were accepted by the syntax check, although the language elements table in the 7.58 documentation marks them as outside ABAP for Key Users. When in doubt, what counts is the system's syntax check and the statement list in SAP Help, not that table.
In BAdI logic, there is also a second barrier: the BAdI's own transactional contract. In a BAdI classified as functional, even a SELECT raises a transactional contract violation warning, and a write raises an error, even before the language version rule applies.
Transport
In S/4HANA on-premise and Private Edition, Key User extensibility is activated through S_ATO_SETUP (Adaptation Transport Organizer):
- items are created in a local package, which is not transported;
- the Configure Software Packages app defines the development package and the target request;
- the Register Extensions for Transport app registers each item in the package and the request. The key user does not create the request: someone in IT creates it for them;
- in the request, the item travels as an object of its own (for example
R3TR SCBOfor a Custom Business Object), together with the generated objects.
In S/4HANA Cloud Public Edition, transport is done through the Export Software Collection and Import Collection apps.
Key User and the Clean Core levels
SAP's Clean Core white paper (August 2026 edition) places Key User extensibility at Level A: an extension is Level A when it uses only released APIs and extension points, built with the Key User or developer tools, each in its own language version. The same document recommends starting with the Key User options for extensions coupled to the system.
On the dashboard, the picture is not yet that simple:
- the SAP Cloud ALM help describes Level A objects as those built in ABAP for Cloud Development;
- the white paper itself warns, in a note, that the Level A objects indicator on the RISE with SAP dashboard does not yet consider Key User objects;
- the ATC classifies Key User items as not cloud-ready. SAP Note 3593439 excludes them from the ATC by default, but only as of S/4HANA 2023 SPS04;
- the objects generated in Standard ABAP (the CDS views of Custom Business Objects, fields and queries) follow the Standard ABAP rule: with no findings, they stay at Level B.
Before counting a Key User object as Level A, it is worth checking how it appears in the Cloud ALM export of your own system.
There is also a practical use for the Clean Core adaptation of classic code. A program in Standard ABAP that reads a CDS view released only for Key User gets a Level C finding, because for that program the CDS view is an internal object. A Custom CDS View on top of the same CDS view, created in the Custom CDS Views app and transported through the Adaptation Transport Organizer, does not generate a finding: the API usage check does not analyze objects in ABAP for Key Users. Read by the classic program, it is a Z object, and calls between Z objects do not score points. When the released alternative to an SAP table exists only for Key User, this path removes the C finding from the program instead of just moving it somewhere else.
When to use each version
| Need | Path |
|---|---|
| New field in an SAP process | Custom Fields |
| Simple rule at an SAP extension point (validation, default value, mandatory field) | Custom Logic, if the BAdI is released for Key User |
| Report or API on SAP data | Custom CDS Views, or a CDS view in ABAP Cloud when the logic grows |
| API calls, writing, authorization, integration, background processing | ABAP Cloud in ADT |
| SAP GUI screen interface | Classic ABAP, capped at Level B (see Why a program with a classic screen stops at Level B) |
ABAP for Key Users handles small, process-related needs well. When the rule needs something the language does not allow, the next step is ABAP Cloud. The differences are covered in ABAP Cloud: what changes compared to classic ABAP.
Sources
- SAP Help, ABAP Keyword Documentation 7.58: ABAP Language Versions, ABAP Language Versions, Release Contracts and Released APIs, glossary entry ABAP for Key Users and Language Elements in ABAP Versions.
- SAP Help, SAP S/4HANA Cloud Public Edition: Key User Extensibility, Custom Logic, Custom CDS Views, Custom Business Objects, Custom Analytical Queries, Custom Fields and Statements in ABAP for Key Users.
- SAP Help, SAP Cloud ALM: Extensibility (System View).
- SAP, Extend SAP S/4HANA in the cloud and on premise with ABAP based extensions (ABAP Extensibility Guide), version 2.3, August 2025.
- SAP, Clean core extensibility (white paper), August 2026 edition, sections 3.3.4 and 4.3.3 and note 29.
- Thomas Schneider (SAP), ABAP Language Versions – FAQs, SAP Community.
- Syntax check tests and queries on the Key User object tables in SAP S/4HANA 2023 (SAP_BASIS 758).