Clean Core Measurement
An ABAP application for a central ATC system that imports Clean Core check results and reports them per system as Level A to D KPIs, technical debt scores and documented assignments.
Installs into the system the Central ATC runs on and turns what an ATC run produced into a measurement: it imports the results of a Custom Code Analysis project, scores each object's technical debt from the Information, Warning and Error messages at weights set in Business Configuration, and counts Level A and Key User objects per system. Twelve Fiori apps sit on the ABAP back end — a landscape dashboard, object, message and API lists, and the Document, Cluster and Assign apps that record who owns a finding and which product, team, group or company it belongs to. It runs no checks of its own: the default check variant is ABAP_CLEAN_CORE_READINESS, the Custom Code Analysis project and its recurring Application Job are planned per object provider by hand, and CCM reads the results afterwards. The ABAP sources come in through abapGitabapGitA Git client written in ABAP that runs inside the system, so objects are cloned, pulled and pushed without leaving it; with no package manager in ABAP, a cloned repository is how code is distributed.community org, abap into a software component such as ZBC_CCM, and each of the twelve Fiori apps is deployed separately from its own repository, because the abapGit plugin does not carry BSP applications. Level A and Key User counts from a connected on-premise system need the function module Z_CA_ATC_LEVEL_A_OBJECTS installed there, enabled for RFC, listed in the Cloud ConnectorCloud ConnectorSAP's on-premises agent that links SAP BTP applications to systems in a customer's own network, as a reverse invoke proxy that exposes only the systems and resources it is configured to allow.sap official, btp and reached through a Communication Arrangement per backend system.
Facts
Where it sits
Who is behind it
In the atlas: maintains 7, contributes to 8@Xexermaintainer
What it declares
Every artifact
- Type
- App
- Origin
- Independently maintained
As an app
- Where it runs
- Inside the system it serves
- Distributed through
- abapGit
Connections
Whether code can run in ABAP Cloud, and what to do when it cannot
SAP's on-premises agent linking SAP BTP to customer-network systems
Download
README
quoted from Xexer/abap-ccm under MIT, readClean Core Measurement
General
Introduction
Do you want to track Clean Core metrics and view your KPIs for all systems at a glance? The CCM project provides you with a dashboard and various documentation tools to track your findings. The tool should run on the central ATC to enable process automation and easy access.
Requirements
The project was designed to run on the same system as the Central ATC. We are testing the system in a SAP BTP ABAP environment where the ATC is configured against on-prem systems. Use within an on-prem Central ATC setup was not originally planned, but should be implementable with minimal effort (requiring API adjustments in the code).
Features
The following features are currently available, and some are already planned for upcoming versions:
- Dashboard with KPI (Level A to D, Key User objects, Scores)
- Documentation and Assignment to developments
- Cluster (Product, Team, Group, Company) und assignment
- Detailed Messages, APIs and Objects
- Statistic over different clusters
- Import ATC data for calculation
- Custom KPI with Exemptions and Documentations [Planned]
- KPI and overview for Modifications [Planned]
- Diagram for Trend per system [Planned]
- Different roles, like Admin, Viewer, Developer [Planned]
- Authorization per system [Planned]
- Categories for Clusters for better filters (APIs, General) [Planned]
- Auto approval (ATC) for Clean Core Findings [Planned]
Material
- Clean Core Measurement - Overview
- CCM - Determination of Level A Objects
- CCM - Standard APIs
- CCM - Calculate Key Figures
Installation
Here you find some information, how to install the project in your system. Currently, the installation process is somewhat more complex because the BSP applications are not synchronized using the abapGit plugin.
ABAP sources
Create a Software Component, for example ZBC_CCM, for deployment to you production system or system where you Central ATC runs. Use the abapGit plugin in your system to import the repository along with all its objects. Finally, perform a mass activation to ensure the objects are actively created in the system.
Fiori Apps
Clone the application into Business Application Studio (BAS) or VS Code. Next, create a deployment configuration for your system, using the BSP application name as described below. The deployment target is the package ZBC_CCM_FIORI, which you previously created using abapGit.
| App Name | BSP Name | GitHub Repo |
|---|---|---|
| CCM Area | ZBC_CCM_AREA | https://github.com/Xexer/zbcccmarea |
| CCM Assign | ZBC_CCM_ASSIGN | https://github.com/Xexer/zbcccmassign |
| CCM Checks | ZBC_CCM_CHECK | https://github.com/Xexer/zbcccmchecks |
| CCM Cluster | ZBC_CCM_CLUSTER | https://github.com/Xexer/zbcccmcluster |
| CCM Custom APIs | ZBC_CCM_CUSTOM | https://github.com/Xexer/zbcccmcustom |
| CCM Dashboard | ZBC_CCM_DASHBO | https://github.com/Xexer/zbcccmdashboard |
| CCM Document | ZBC_CCM_DOC | https://github.com/Xexer/zbcccmdocument |
| CCM Objects | ZBC_CCM_OBJECT | https://github.com/Xexer/zbcccmobjects |
| CCM Overview | ZBC_CCM_OVER | https://github.com/Xexer/zbcccmoverview |
| CCM Run | ZBC_CCM_RUN | https://github.com/Xexer/zbcccmrun |
| CCM Setup | ZBC_CCM_SETUP | https://github.com/Xexer/zbcccmsetup |
| CCM Used APIs | ZBC_CCM_USEDAPI | https://github.com/Xexer/zbcccmusedapis |
| CCM Used Messages | ZBC_CCM_USEDMSG | https://github.com/Xexer/zbcccmusedmessage |
On-Prem
If you want to extract numbers automatically, you have to configure the connection and install additional components.
ABAP source
If you want to get the number of Level A and Key User objects from your On-Prem system, you should install the function module Z_CA_ATC_LEVEL_A_OBJECTS in your connected systems and enable RFC for the module.
Authorization
If you have installed the function module(s) for the On-Prem extraction, you should also enhance the role for your technical ATC user in this system. Use the authorization for the function module OR the function group.
Function Module (S_RFC):
- RFC_TYPE - FUNC
- RFC_NAME - Z_CA_ATC_LEVEL_A_OBJECTS
- ACTVT - 16
Function Group (S_RFC):
- RFC_TYPE - FUGR
- RFC_NAME - <YOUR_FUGR>
- ACTVT - 16
Cloud Connector
Add the function modules to the Cloud Connector configuration, so the system can have access to you On-Prem system and the function module. You have to add every FM as "exact":
- Z_CA_ATC_LEVEL_A_OBJECTS - Extract Level A and Key User objects
Communication Arrangement
If you have implemented the function modules On-Prem, you also need an additional Communication Arrangement per backend system. Use the Scenario ID "ZBC_CCM_REMOTE_OBJECTS", set the object provider and reuse the Communication System. The framework will only call backend systems, that have a configured Object Provider to match the system.

Configuration
Here you find important points to configure your system to use the project.
Authorization
To use the Business Configuration and the apps, you need to create a Business Role in the system and add the following Business Catalogs:
- ZBC_CCM_ADMIN - All authorizations for CCM including Configuration and Apps
- SAP_CORE_BC_BCT_MBC_PC - Use Business Configuration in the system
- SAP_CORE_BC_CCM - Custom Code Migration App
Add also the default Launchpad Space "ZBC_CCM_SPACE" that we deliver with the ABAP project or create a custom one. Search in the Custom Business Configuration App for "CCM" to find available configuration options.

Configuration: Settings
First configure the settings to enable standard proccess in the system.
| Setting | Options | Description |
|---|---|---|
| Default ATC Variant | ABAP_CLEAN_CORE_READINESS | Configure the ATC variant you run to do the Clean Core checks against the systems |
| Period (W/M) | M = Month or W = Weekly | How often your measurement should run and for the output period |
| Level B (Score) | 1 | Points to calculate the technical debt in the system for all Information messages from ATC |
| Level C (Score) | 5 | Points to calculate the technical debt in the system for all Warning messages from ATC |
| Level D (Score) | 10 | Points to calculate the technical debt in the system for all Error messages from ATC |
| Level C for Clean Core | X | When set to 'X', also the Level C findings count to the Upgrade-Stable KPI |
| Mail: Sender | [Mail] | Sender of the notification mail, if you use a fixed one |
| Mail: Receiver | [Mail] | All receivers that will get an e-mail, after the job created a new scoring |
| Test Mode | X | When set to 'X', you can run the job to fill the tables with test data to test the functionallity |
Configuration: Object Provider
Create the object providers, by synchronizing the ATC systems to this configuration table. After the sync you should configure you systems to use them in the dashboard and all other apps.
- Use action "Sync Providers" to synchronize all configured object providers from ATC. Base is here the Communication Scenario "SAP_COM_0464" and all configured Communication Arrangements.
- Group you systems, if one or more are in the same system landscape.
- Activate or deactivate a system. A deactivated system is not visible in the CCM.
- Set a display name for the system. It's visible in all apps instead of the System ID/Object Provider ID.
- Set "Only Scores", if you don't want to save objects in the system. Only the scores are calculated than.
- Custom Code Analysis Project ID, you will get in the next step (ATC Automation).
ATC Automation
To automate your Clean Core Measurement process, you have to plan the Clean Core checks for every Object Provider for your own. Due to missing APIs the project could not generate the project nor start the run.
Custom Code Analysis
Go to the app "Custom Code Migration" an create a new "Custom Code Analysis Project".

Chosse a name for the Analysis and set you check variant. The default is ABAP_CLEAN_CORE_READINESS and the variant should match your configuration. Set the system to "In remote system" and configure the Object Provider.

You can adjust the "Advanced Configuration" if you want to include or exclude additional packages. Remove the flag from "Start Analysis at Project Creation", so that the project is only created in the system. After creation you can navigate into the project and find the Project ID in the URL. Copy only the GUID between the Quotation marks and insert it in the provider configuration (Step 6). Here an example of the URL:
/sycm_aps_c_project(project_id=guid'b65d2e89-1408-1fd0-a3e7-de558b9f5cb1',IsActiveEntity=true)
Automation (Analysis)
After project creation go to the app "Application Jobs" and create a reccuring job for the Custom Code Analysis. Plan it for the period you have configured (week or month). The runtime depends on the size of the system. You can get a number, after running a system for the first time and if you check the logs.

Automation (CCM)
To calculate the results and create you base data, you have to plan at the end the scheduler for CCM. You create a job, when you think that all runs are finished and are ready to import the result. The job will calculate the results, refresh the tables and create a notification for you, if you have configured an e-mail.

Test Data
We also deliver some test data, to test and see the functionallity in the project. To load the data you have to set the "Test Mode" flag in the Business Configuration. After you have set this flag you can run the Application Job "CCM: Preview Data" with the flags:
- Delete data - Delete all data form the tables, could also be used to clean up the tables at the end of the test period.
- Insert data - Create demo data in all tables with it's own model and usage.
Demo
The screenshot are made with the test data we also deliver with the implementation, if you want to take a look.
Launchpad Space
If you use the default space, you will find all applications under "CCM". Here you can navigate to all relevant applications. The example screenshot is with all apps as an administrator.

Dashboard
The Dashboard is the heart of your analysis. Here you get a quick overview over your whole landscape and you can quickcheck the KPIs for the system. You can switch between the different calculation methods, the standard is the raw view on your system.

In the details you get more information, how you score and the numbers have changed after the last run. Here you also get more details about numbers for Key User objects.

Objects
In the objects you can navigate to the details for all system or per system. The list is ordered by Technical Debt Score and you get also the classification for an object. If you have configured Documentations or Clusters, the objects will assign to them, to give you a better understanding of relations and responsibility.

Video
Actual preview of the development status of the project.
Changelog
| Date | Description |
|---|---|
| 08/03/2026 | New app for Custom APIs, added video |
| 07/24/2026 | Added new article as reference, SWC creation |
Others providing
Compare all 11 on the ABAP Cloud readiness page →- abap-cloud-guiabap-cloud-guiA report-style programming model for abap2UI5: one class produces a selection screen with a WRITE list or an ALV grid, running as a UI5 app on ABAP Cloud as well as on NetWeaver 7.02.independent, abapReport-style programming model for abap2UI5 on ABAP Cloudfrom ABAP
- codepagecodepageA polyfill class, ZCL_ABAP_CODEPAGE, that converts strings to binary and back behind one interface, where Clean Core blocks CL_ABAP_CODEPAGE and older systems lack CL_ABAP_CONV_CODEPAGE.independent, abapPolyfill for CL_ABAP_CODEPAGE under Clean Corefrom ABAP
- Modernization Agents for SAP on AWSModernization Agents for SAP on AWSAWS's suite of agents for SAP modernisation work: custom ABAP converted for S/4HANA, PI/PO interfaces moved to Integration Suite, BW objects moved to SAP Datasphere, deployed into a customer's own AWS account and reached only after registration.partner, abapAWS agents for ABAP, PI/PO and BW modernisation workfrom ABAP
- ROSAROSAAnswers whether an SAP object is released for ABAP Cloud, and what to use instead when it is not — served from SAP's own Cloudification Repository over MCP and over plain REST.independent, abapMCP server answering whether SAP objects are released for ABAP Cloudfrom ABAP
- Cloudification RepositoryCloudification RepositorySAP's list of released APIs for SAP Cloud ERP, with the successors of the objects that are not released — the content the ABAP test cockpit's cloud readiness and clean core checks are pointed at.sap official, abapSAP's list of released APIs for SAP Cloud ERP with successorsfrom ABAP
- code pal for ABAP — Cloud Editioncode pal for ABAP — Cloud EditionThe same Clean ABAP check set for ABAP Cloud, where the legacy edition cannot run.sap official, abapClean ABAP check set for ABAP Cloudfrom ABAP
- Clean-Core.ioClean-Core.ioA free hosted workspace that reads one piece of custom ABAP, redraws its business process as BPMN with a line anchor on every element, grades the SAP objects it uses Level A–D and ends in a keep, rebuild, move-to-standard or retire decision.independent, abapHosted workspace redrawing custom ABAP as BPMN and grading itfrom ABAP
- ABAP Select ConverterABAP Select ConverterConverts a classic Open SQL SELECT against dictionary tables to the equivalent statement against released Core Data Services entities and their fields.independent, abapConverts classic Open SQL SELECTs to released CDS entitiesfrom ABAP
- abap-system-fieldsabap-system-fieldsAn ABAP Cloud class that wraps SY system fields and calendar-date functions behind an injectable instance, so code that reads them stays stable under unit tests.independent, abapInjectable wrapper for SY fields and date functions in ABAP Cloudfrom ABAP
- Cloudification Repository ViewerCloudification Repository ViewerA browser form over the Cloudification Repository, the list SAP publishes of which standard objects are released for ABAP Cloud and what replaces the ones that are not.independent, abapBrowser form over SAP's Cloudification Repository for ABAP Cloudfrom ABAP
Details
Sources
Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.
Compatibility and provenance
Flavors
“We are testing the system in a SAP BTP ABAP environment where the ATC is configured against on-prem systems.” — Xexer/abap-ccm — README, Requirements
History in the atlas
- First seen.
For your agent
- Ref
artifact:xexer-abap-ccm- JSON
- /artifacts/xexer-abap-ccm.json
- MCP
- Connecting an agent
