SAP

Clean core en la letra: cuando el in-app se estira de más

Forzar lógica compleja en extensibilidad in-app cumple la letra del clean core y erosiona el upgrade. Señales y salida para utilities en LATAM.

CVSA
EvoTech Consulting Company

· 12 min de lectura

Analista de facturación de una empresa de servicios públicos revisa indicadores junto a un consultor senior en la sala de operaciones

Hay un riesgo del que casi no se habla en los proyectos de clean core. No es el del desarrollador que se salta las reglas y modifica el estándar: ese ya lo detecta cualquier auditoría. Es el opuesto, y es más difícil de ver porque llega disfrazado de buena práctica. Un requerimiento crece, el equipo decide resolverlo igual dentro del modelo in-app, y el resultado pasa todos los controles técnicos mientras acumula fragilidad que nadie mide hasta la siguiente actualización.

En una comercializadora de energía, un distribuidor de agua o una empresa de gas, ese requerimiento suele nacer pequeño: una validación en la contratación, un atributo adicional en el punto de suministro, un ajuste en el tratamiento de un caso de aclaración. La extensibilidad in-app existe exactamente para eso. El problema empieza cuando lo pequeño deja de serlo y la decisión de dónde construirlo ya se tomó.

El límite del modelo in-app es un contrato, no un obstáculo

El contrato de estabilidad
Los límites que el modelo in-app no deja cruzar
🔒
Lenguaje restringido para key user
No permite acceso directo a tablas de base de datos ni sentencias de creación, actualización o borrado, y obliga a leer a través de vistas CDS liberadas.
SAP Community, 2020
🚫
Frameworks clásicos descartados
La versión restringida del lenguaje descarta frameworks clásicos como reports y dynpros.
SAP Community, 2020
🛡️
ABAP Cloud aplica la misma lógica
En la capa de desarrollador bloquea sentencias obsoletas y el acceso directo a tablas no liberadas para asegurar la estabilidad del sistema.
Saptutorials.in, 2026
🎯
El punto de extensión acota la semántica
La extensión side-by-side no agrega puntos de extensión nuevos al estándar: toda extensión sigue acotada por los parámetros de entrada y salida que expone la interfaz del BAdI.
SAP Learning

La extensibilidad de key user opera con una versión restringida del lenguaje: no permite acceso directo a tablas de base de datos ni sentencias de creación, actualización o borrado, obliga a leer a través de vistas CDS liberadas y descarta frameworks clásicos como reports y dynpros (SAP Community, 2020). ABAP Cloud, en la capa de desarrollador, aplica la misma lógica: bloquea sentencias obsoletas y el acceso directo a tablas no liberadas para asegurar la estabilidad del sistema (Saptutorials.in, 2026).

Conviene leer esas restricciones como lo que son: un contrato de estabilidad. Cada cosa que el modelo in-app no deja hacer es una cosa que el upgrade no tendrá que revisar. Cuando un requerimiento choca contra ese muro, el muro está informando algo — que el requerimiento pertenece a otro nivel de la arquitectura, no que haya que buscarle la vuelta.

Hay una restricción adicional que suele pasarse por alto en el diseño: la extensión side-by-side no agrega puntos de extensión nuevos al estándar, y toda extensión sigue acotada por los parámetros de entrada y salida que expone la interfaz del BAdI (SAP Learning, s. f.). Es decir, el límite no es solo de lenguaje. Es de semántica: el punto de extensión fue diseñado para una intención concreta.

Los síntomas del in-app estirado

Lo que aparece en revisión de código
Cinco síntomas del in-app estirado
🔁
Wrappers que multiplican
Existe un camino documentado para sortear una limitación —implementar el BAdI en lenguaje de key user y consumir una clase liberada para uso en la herramienta de key user—, legítimo y a veces necesario. Cuando se vuelve el patrón por defecto, la dependencia con objetos no liberados sigue ahí: solo cambió de lugar.
SAP Community, 2020
🧵
Lógica repartida entre varios puntos de extensión
Porque ninguno solo alcanza para el caso, con estado transportado en campos personalizados que actúan como mensajería informal entre implementaciones.
📊
Volumen mal ubicado
Una validación que corre bien en un contrato individual se comporta de otro modo dentro de una ejecución masiva de facturación o de un ciclo de lectura completo: el punto de extensión no fue dimensionado para eso.
📎
Duplicación sin reutilización
El modelo in-app no ofrece las mismas herramientas de modularización, prueba y depuración que el entorno de desarrollo profesional.
🧪
Ausencia de prueba automatizada
Sobre lógica que ya decide montos facturados o resultados de reclamos.

Ninguno de estos patrones dispara una alerta en un control automático. Todos aparecen en revisiones de código de proyectos que se declaran clean core:

  • Wrappers que multiplican. Existe un camino documentado para sortear una limitación: implementar el BAdI con la versión de lenguaje de key user y consumir una clase creada con herramientas estándar y liberada para uso en la herramienta de key user (SAP Community, 2020). Es legítimo y a veces necesario. Cuando se vuelve el patrón por defecto, la dependencia con objetos no liberados sigue ahí — solo cambió de lugar.
  • Lógica repartida entre varios puntos de extensión porque ninguno solo alcanza para el caso, con estado transportado en campos personalizados que actúan como mensajería informal entre implementaciones.
  • Volumen mal ubicado. Una validación que corre bien en un contrato individual se comporta de otro modo dentro de una ejecución masiva de facturación o de un ciclo de lectura completo. El punto de extensión no fue dimensionado para eso.
  • Duplicación sin reutilización, porque el modelo in-app no ofrece las mismas herramientas de modularización, prueba y depuración que el entorno de desarrollo profesional.
  • Ausencia de prueba automatizada sobre lógica que ya decide montos facturados o resultados de reclamos.

El costo no aparece en una factura. Aparece en la ventana de actualización, cuando hay que retestear manualmente algo que debía ser transparente — justo el escenario que el clean core existía para evitar.

Cumplir la letra no equivale a proteger el upgrade

Diagnóstico, no calificación
La letra del clean core y lo que realmente protege el upgrade
Lo que un chequeo favorable dice — y lo que no dice
Lo que se asume
Lo que establece la guía
El custom code se clasifica en binario: clean core o no clean core, gobernado por chequeos de ABAP Test Cockpit.
El propio SAP reconoció que esa clasificación resultaba demasiado restrictiva y poco aplicable a sistemas con volumen relevante de código clásico, y evolucionó hacia un modelo más flexible por niveles (SAP Community, 2025).
Un veredicto técnico favorable dice si el diseño era el adecuado para el problema.
Describe qué tecnología se usó; no dice si el diseño era el adecuado para el problema.
La gradación por niveles es una calificación que se aprueba.
Es una herramienta de diagnóstico: la pregunta de gobierno no es «¿pasó el chequeo?», sino «¿esta lógica sigue siendo pequeña?».
El Nivel A corresponde a extensiones construidas con ABAP Cloud sobre APIs liberadas; el Nivel B admite APIs clásicas ampliamente documentadas y recomendadas, incluidos los wrappers sobre APIs clásicas que habilitan su consumo desde aplicaciones de Nivel A (SAP Learning).
¿Conversamos sobre su caso?

El propio SAP reconoció que la clasificación binaria del custom code entre “clean core” y “no clean core”, gobernada por chequeos de ABAP Test Cockpit, resultaba demasiado restrictiva y poco aplicable a sistemas con volumen relevante de código clásico, y evolucionó hacia un modelo más flexible (SAP Community, 2025). El modelo por niveles reconoce grados: el Nivel A corresponde a extensiones construidas con ABAP Cloud sobre APIs liberadas; el Nivel B admite APIs clásicas ampliamente documentadas y recomendadas —incluidos los wrappers sobre APIs clásicas que habilitan su consumo desde aplicaciones de Nivel A—, con buenas prácticas de estabilidad de upgrade (SAP Learning, s. f.).

Esa gradación es una herramienta de diagnóstico, no una calificación que se aprueba. Un veredicto técnico favorable describe qué tecnología se usó; no dice si el diseño era el adecuado para el problema. La pregunta de gobierno no es “¿pasó el chequeo?”, sino “¿esta lógica sigue siendo pequeña?”.

Cómo reencauzar sin rehacer el proyecto

Cuatro pasos
Cómo reencauzar sin rehacer el proyecto
Paso 1
📋
Inventariar
Listar cada extensión in-app publicada, su punto de extensión y su autor
Paso 2
🔗
Clasificar por dependencia real
Distinguir lo que consume objetos liberados de lo que llega vía wrapper
Paso 3
⚖️
Contrastar con la complejidad
Volumen, orquestación, persistencia propia y llamadas externas cambian el nivel
Paso 4
🚚
Reubicar lo que excede
Mover a extensibilidad de desarrollador o a side-by-side en BTP
Criterios para reubicar
1El editor la acepta igual
Si el requerimiento necesita servicios externos, orquestación entre sistemas, persistencia propia o procesamiento intensivo, ya no es una extensión pequeña, por más que el editor la acepte.
2La conversación cambia de tema
Cuando se empieza a girar sobre cómo esquivar una limitación en lugar de sobre el proceso de facturación o de reclamos que se quería mejorar, la decisión de ubicación ya está equivocada.
SAP Learning; SAP Community, 2025

La corrección rara vez exige reescribirlo todo. Exige mirar el inventario con un criterio distinto del que se usó al construirlo.

Para el inventario existe soporte de producto: la aplicación de inventario de extensibilidad registra las extensiones creadas en el framework, quién realizó el último cambio y su estado de exportación e importación (SAP Learning, s. f.). El criterio para reubicar es de arquitectura: si el requerimiento necesita servicios externos, orquestación entre sistemas, persistencia propia o procesamiento intensivo, ya no es una extensión pequeña, por más que el editor la acepte.

En utilities, además, el terreno se ha ido ampliando por el lado correcto. SAP ha ido habilitando campos y lógica personalizados sobre objetos del negocio de servicios públicos, incluyendo datos maestros del punto de suministro y casos de aclaración, y documenta el panorama de clean core para la industria en la nota SAP 3406389 (SAP Community, 2025). Cuando existe un punto de extensión liberado para el objeto que se quiere extender, forzar el camino artesanal deja de tener justificación técnica.

La regla práctica es de sentido común operativo: la extensibilidad in-app es excelente para lo cotidiano — un campo, una validación corta, una regla de negocio acotada. Cuando la conversación empieza a girar sobre cómo esquivar una limitación en lugar de sobre el proceso de facturación o de reclamos que se quería mejorar, la decisión de ubicación ya está equivocada.

Detectarlo a tiempo es la mitad del trabajo. La otra mitad es dejar registro de por qué se decidió así — el catálogo de extensiones que evita repetir el mismo debate cada trimestre, tema del próximo artículo de esta serie.

Anatomía del riesgo inverso
Cuando lo pequeño deja de serlo y nadie lo mide
📈
El requerimiento crece
Lo que nació pequeño —una validación en la contratación, un atributo adicional en el punto de suministro— deja de serlo.
🧩
Se resuelve igual dentro del in-app
El equipo decide construirlo en el modelo in-app y la decisión de dónde construirlo ya se tomó.
Pasa todos los controles técnicos
El resultado no dispara una alerta en un control automático: llega disfrazado de buena práctica.
⚠️
Acumula fragilidad que nadie mide
La fragilidad se acumula hasta la siguiente actualización.
🧾
El costo aparece en la ventana de actualización
Hay que retestear manualmente algo que debía ser transparente — justo el escenario que el clean core existía para evitar.
El costo no aparece en una factura.

Fuentes

Conversemos 30 minutos

¿Este análisis mapea un mercado donde ya operas o estás evaluando entrar?

Revisamos tu caso específico, mapeamos los riesgos que aplican, y te decimos honestamente si es oportunidad para ti —sin pitch comercial, solo discusión técnica y estratégica.

Al enviar aceptas ser contactado por AGT Consultoría para el assessment solicitado. Tus datos no serán compartidos con terceros ni usados para publicidad.

EvoTech Consulting Company · AGT Consultoría
#clean core #extensibilidad #abap cloud #s/4hana #sap btp #utilities