Ir al contenido
Programación ABAP

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.

NivelQué usaRecomendaciónAviso del ATC
AABAP Cloud y APIs públicas liberadas, o extensiones en SAP BTPEl objetivoNinguno
BAPIs clásicas estables aunque no estén liberadas, como las BAPIAceptableInformación (prioridad 3)
CObjetos internos de SAPSolo si no hay opción A ni B; hay que vigilar sus cambiosAdvertencia (prioridad 2)
DModificaciones, escritura directa en tablas de SAP, ampliaciones implícitas u objetos marcados como noAPIEvitarError (prioridad 1)
AABAP Cloud y APIs liberadasExtensiones on-stack con ABAP Cloud o side-by-side en BTPObjetivoBAPIs clásicas establesBAPI y otras interfaces clásicas que SAP mantieneAceptableCObjetos internos de SAPFuncionan, pero pueden cambiar con cada actualizaciónVigilarDModificaciones y accesos no permitidosModificar el estándar, escribir en tablas de SAP, ampliaciones implícitasEvitar
El objetivo es tener todo en el nivel A. En sistemas on-premise o Private Edition se aceptan B y C mientras se migra; en S/4HANA Cloud Public Edition solo se puede programar en el nivel A.

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.

Antes
" ABAP clásico: lectura directa de la tabla
SELECT SINGLE name1 FROM kna1
  WHERE kunnr = @lv_kunnr
  INTO @DATA(lv_nombre).
Ahora
" 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

FormaDóndePara qué
Key userEn el propio S/4HANA, desde apps FioriCampos, lógica y formularios sencillos sin programar
Developer (on-stack)En el propio S/4HANA, con ABAP CloudLógica que necesita estar cerca de los datos
Side-by-sideEn SAP BTPAplicaciones nuevas que se conectan al ERP por API o eventos
SAP S/4HANAKey userapps Fiori, sin programarDeveloper on-stackABAP Cloud en el sistemaAPIs liberadas: vistas I_*, BAdIs, objetos RAPNúcleo estándar de SAPse actualiza sin romper tus extensionesSide-by-sideen SAP BTPCAP · ABAP env · BuildAPI✗ Modificar el estándar
Las tres formas usan solo APIs liberadas. Lo que queda fuera es modificar el estándar.

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.

ContratoSignifica que puedes…
C0Ampliarlo: añadir campos a una vista o tabla, implementar un BAdI
C1Usarlo dentro del sistema: llamar a la clase, leer la vista CDS (el más habitual en ABAP Cloud)
C2Usarlo como API remota: servicios OData o SOAP publicados
  1. En ADT, abre el objeto (por ejemplo la vista I_Customer) y mira la pestaña Properties › API State.
  2. En el Project Explorer busca el nodo Released Objects: lista todo lo liberado, ordenado por tipo.
  3. Si un objeto clásico no está liberado, consulta su sucesor en el Cloudification Repository de SAP en GitHub. Por ejemplo, el sucesor de KNA1 es I_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.

ABAP (Standard ABAP)
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.
  1. Crea la clase en un paquete con versión de lenguaje Standard ABAP.
  2. Usa en su interfaz pública solo tipos que ABAP Cloud entienda (aquí, tablas de string), no tipos internos como TLINE.
  3. En Properties › API State, libera la clase con el contrato C1 y marca Use in Cloud Development.
  4. 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 FioriPara qué
Custom FieldsAñadir campos a pantallas, informes, formularios y APIs estándar
Custom LogicEscribir pequeñas reglas en ABAP Cloud dentro de BAdIs preparados
Custom CDS ViewsCrear vistas a partir de vistas liberadas para informes o APIs
Custom Business ObjectsCrear tablas propias con su app de mantenimiento
Adapt UIOcultar, mover o renombrar campos en una pantalla Fiori

Un plan para limpiar el núcleo, paso a paso

  1. Haz inventario. La app Custom Code Migration o el ATC te dan la lista de desarrollos propios y su nivel.
  2. 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.
  3. Corrige primero el nivel D. Modificaciones y escrituras directas en tablas de SAP son lo que más duele en cada actualización.
  4. Desarrolla todo lo nuevo en nivel A. Configura el ATC para que avise al liberar transportes.
  5. Migra lo existente cuando lo toques. No hace falta reescribir todo a la vez: aprovecha cada cambio funcional.

Cómo revisar tu código

  1. Ejecuta el ATC con la variante ABAP_CLOUD_READINESS: indica qué no cumple ABAP Cloud.
  2. Consulta el Cloudification Repository para ver qué objetos están liberados y cuál es el sucesor de los que no lo están.
  3. Revisa en SAP Cloud ALM el nivel de cada extensión de tus sistemas.
  4. Prioriza: elimina primero lo de nivel D y pasa a nivel A lo que vayas a tocar.

Fuentes