Clean Core
Mantener el núcleo de SAP S/4HANA lo más estándar posible: extenderlo sin modificarlo, para que cada actualización sea rápida y no rompa tu código.
- Apartados
- 9
- Revisado
- Octubre de 2026
- Fuentes
- 4 enlaces
Qué significa Clean Core
Un sistema con el núcleo limpio no tiene modificaciones del estándar y sus desarrollos usan solo interfaces estables de SAP. Así, las actualizaciones y el paso a la nube cuestan mucho menos.
SAP aplica la idea a cinco ámbitos: procesos, extensiones, datos, integración y operaciones. En desarrollo, lo que más importa son las extensiones.
Los niveles A, B, C y D
En 2025 SAP sustituyó el antiguo modelo de tres capas (3-tier) por cuatro niveles. Cada extensión se clasifica por la tecnología menos recomendable que use.
| Nivel | Qué usa | Recomendación | Aviso del ATC |
|---|---|---|---|
| A | ABAP Cloud y APIs públicas liberadas, o extensiones en SAP BTP | El objetivo | Ninguno |
| B | APIs clásicas estables aunque no estén liberadas, como las BAPI | Aceptable | Información (prioridad 3) |
| C | Objetos internos de SAP | Solo si no hay opción A ni B; hay que vigilar sus cambios | Advertencia (prioridad 2) |
| D | Modificaciones, escritura directa en tablas de SAP, ampliaciones implícitas u objetos marcados como noAPI | Evitar | Error (prioridad 1) |
ABAP Cloud: el nivel A
ABAP Cloud es el modelo de desarrollo que cumple el nivel A: versión de lenguaje «ABAP for Cloud Development», solo objetos liberados por SAP, CDS y RAP. Se usa en BTP, en S/4HANA Cloud y también en S/4HANA on-premise.
" ABAP clásico: lectura directa de la tabla
SELECT SINGLE name1 FROM kna1
WHERE kunnr = @lv_kunnr
INTO @DATA(lv_nombre)." ABAP Cloud: vista CDS liberada por SAP
SELECT SINGLE CustomerName FROM I_Customer
WHERE Customer = @lv_cliente
INTO @DATA(lv_nombre).Tres formas de extender sin modificar
| Forma | Dónde | Para qué |
|---|---|---|
| Key user | En el propio S/4HANA, desde apps Fiori | Campos, lógica y formularios sencillos sin programar |
| Developer (on-stack) | En el propio S/4HANA, con ABAP Cloud | Lógica que necesita estar cerca de los datos |
| Side-by-side | En SAP BTP | Aplicaciones nuevas que se conectan al ERP por API o eventos |
Cómo saber si un objeto está liberado
SAP marca cada objeto que se puede usar con un contrato de estabilidad. Si un objeto está liberado, SAP se compromete a no cambiarlo de forma incompatible.
| Contrato | Significa que puedes… |
|---|---|
| C0 | Ampliarlo: añadir campos a una vista o tabla, implementar un BAdI |
| C1 | Usarlo dentro del sistema: llamar a la clase, leer la vista CDS (el más habitual en ABAP Cloud) |
| C2 | Usarlo como API remota: servicios OData o SOAP publicados |
- En ADT, abre el objeto (por ejemplo la vista
I_Customer) y mira la pestaña Properties › API State. - En el Project Explorer busca el nodo Released Objects: lista todo lo liberado, ordenado por tipo.
- Si un objeto clásico no está liberado, consulta su sucesor en el Cloudification Repository de SAP en GitHub. Por ejemplo, el sucesor de
KNA1esI_Customer.
Qué hacer si no hay API liberada: el patrón wrapper
A veces necesitas una función que SAP aún no ha liberado. En sistemas on-premise o Private Edition puedes envolverla en una clase escrita en ABAP clásico y liberar tú esa clase para usarla desde ABAP Cloud. Así el código no limpio queda en un solo sitio, fácil de sustituir cuando SAP publique la API.
CLASS zcl_texto_wrapper DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES tt_lineas TYPE STANDARD TABLE OF string WITH EMPTY KEY.
METHODS leer
IMPORTING iv_objeto TYPE char10
iv_nombre TYPE char70
iv_id TYPE char4
iv_idioma TYPE spras DEFAULT sy-langu
RETURNING VALUE(rt_lineas) TYPE tt_lineas.
ENDCLASS.
CLASS zcl_texto_wrapper IMPLEMENTATION.
METHOD leer.
DATA lt_tline TYPE STANDARD TABLE OF tline.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = iv_id
language = iv_idioma
name = iv_nombre
object = iv_objeto
TABLES
lines = lt_tline
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 0.
rt_lineas = VALUE #( FOR ls IN lt_tline ( CONV string( ls-tdline ) ) ).
ENDIF.
ENDMETHOD.
ENDCLASS.- Crea la clase en un paquete con versión de lenguaje Standard ABAP.
- Usa en su interfaz pública solo tipos que ABAP Cloud entienda (aquí, tablas de
string), no tipos internos comoTLINE. - En Properties › API State, libera la clase con el contrato C1 y marca Use in Cloud Development.
- Llámala desde tu código ABAP Cloud. El ATC la clasificará como nivel B o C según lo que use por dentro.
Extensiones sin programar (key user)
Muchas necesidades se resuelven desde apps Fiori, sin abrir el editor. Lo hace un usuario funcional con permisos de administración y todo queda dentro de los límites de Clean Core.
| App Fiori | Para qué |
|---|---|
| Custom Fields | Añadir campos a pantallas, informes, formularios y APIs estándar |
| Custom Logic | Escribir pequeñas reglas en ABAP Cloud dentro de BAdIs preparados |
| Custom CDS Views | Crear vistas a partir de vistas liberadas para informes o APIs |
| Custom Business Objects | Crear tablas propias con su app de mantenimiento |
| Adapt UI | Ocultar, mover o renombrar campos en una pantalla Fiori |
Un plan para limpiar el núcleo, paso a paso
- Haz inventario. La app Custom Code Migration o el ATC te dan la lista de desarrollos propios y su nivel.
- Elimina lo que no se usa. Activa la monitorización de uso (transacción
SCMON) unos meses: es habitual descubrir que una buena parte del código propio ya no se ejecuta. - Corrige primero el nivel D. Modificaciones y escrituras directas en tablas de SAP son lo que más duele en cada actualización.
- Desarrolla todo lo nuevo en nivel A. Configura el ATC para que avise al liberar transportes.
- Migra lo existente cuando lo toques. No hace falta reescribir todo a la vez: aprovecha cada cambio funcional.
Cómo revisar tu código
- Ejecuta el ATC con la variante
ABAP_CLOUD_READINESS: indica qué no cumple ABAP Cloud. - Consulta el Cloudification Repository para ver qué objetos están liberados y cuál es el sucesor de los que no lo están.
- Revisa en SAP Cloud ALM el nivel de cada extensión de tus sistemas.
- Prioriza: elimina primero lo de nivel D y pasa a nivel A lo que vayas a tocar.