La migración de Classic ABAP a ABAP Cloud es uno de los mayores desafíos para los desarrolladores SAP en 2025. Esta guía te muestra un plan práctico de 5 pasos con el que puedes migrar sistemáticamente tu base de código personalizado a la Cloud.
Lo que te espera
- Roadmap de migración de 5 pasos con flujo claro
- Resumen de herramientas (ATC, Custom Code Migration, ABAP Test Cockpit)
- Checklists para cada fase
- Planificación temporal realista
- Problemas frecuentes y soluciones
- Mejores prácticas de proyectos reales
Tiempo de lectura estimado: 15 minutos | Tiempo de implementación: 3-12 meses (según base de código)
¿Por qué migrar en absoluto?
Estrategia Clean Core
SAP sigue la estrategia Clean Core: Usar solo Released APIs, sin modificaciones al estándar SAP, desarrollar cloud-ready.
Ventajas:
- ✅ Estabilidad ante upgrades: Actualizaciones sin romper código
- ✅ Cloud-Ready: El código funciona en BTP y S/4HANA Cloud
- ✅ Preparado para el futuro: Nuevas funcionalidades solo en ABAP Cloud
- ✅ Rendimiento: Runtime optimizado
- ✅ Mantenibilidad: APIs limpias y estandarizadas
Desventajas de no migrar:
- ❌ La deuda técnica se acumula
- ❌ Los upgrades se vuelven cada vez más difíciles
- ❌ Sin opciones Cloud (BTP ABAP Environment)
- ❌ Reclutamiento difícil (los desarrolladores modernos quieren Cloud)
Las 5 fases de migración en resumen
| Fase | Duración | Esfuerzo | ¿Crítico? |
|---|---|---|---|
| 1. Análisis | 2-4 semanas | Bajo | ⭐⭐⭐ Muy importante |
| 2. Planificación | 1-2 semanas | Medio | ⭐⭐⭐ Muy importante |
| 3. Adaptación | 4-20 semanas | Alto | ⭐⭐ Importante |
| 4. Testing | 2-6 semanas | Medio | ⭐⭐⭐ Muy importante |
| 5. Go-Live | 1 semana | Bajo | ⭐⭐ Importante |
Duración total: 3-12 meses (dependiendo del tamaño de la base de código)
Fase 1: Análisis de la base de código
Objetivo
Entender cuánto código debe migrarse y qué problemas surgirán.
1.1 Ejecutar Custom Code Migration App
La Custom Code Migration App (Fiori App en S/4HANA) analiza tu código automáticamente.
Acceso:
- Transacción:
/n/SDF/CD_CCA(UI clásico) - Fiori Launchpad: Tile “Custom Code Migration”
Ejecución:
- Iniciar app
- Seleccionar scope: Todos los objetos Z*/Y* o selectivos
- Elegir ATC Check Variant:
ABAP_CLOUD_READINESS - Iniciar análisis (puede tomar 30 min - 2 hrs)
- Evaluar resultados
Output:
- Número de objetos afectados
- Severidad (Error, Warning, Info)
- Top problemas por frecuencia
- Esfuerzo estimado
1.2 Usar ABAP Test Cockpit (ATC) manualmente
Para paquetes/objetos individuales:
En SAP GUI:
Transacción: ATC1. Clic derecho en paquete → Run → ATC Check2. Check Variant: ABAP_CLOUD_READINESS3. Analizar resultadosEn ABAP Development Tools (Eclipse):
1. Clic derecho en Package/Class → Run As → ABAP Test Cockpit2. Check Variant: ABAP_CLOUD_READINESS3. Analizar Findings1.3 Categorizar resultados del análisis
Findings típicos:
| Categoría | Ejemplos | Esfuerzo |
|---|---|---|
| Cambios de sintaxis | FORM/PERFORM, SELECT * | ⭐ Bajo |
| APIs no liberadas | Acceso directo a DB de tablas SAP | ⭐⭐⭐ Alto |
| Dynpro → Fiori | CALL SCREEN, MODULE | ⭐⭐⭐ Muy alto |
| Statements obsoletos | CONCATENATE, MOVE | ⭐ Bajo |
| Enhancement Framework | User Exits → BAdIs | ⭐⭐ Medio |
1.4 Priorización
Clasifica objetos según:
- Criticidad de negocio: ¿Qué tan importante para procesos de negocio?
- Frecuencia de uso: ¿Con qué frecuencia se ejecuta el código?
- Esfuerzo de migración: ¿Qué tan costosa es la adaptación?
Priorización recomendada:
Prio alta: Alta criticidad de negocio + Bajo esfuerzoPrio media: Criticidad media + Esfuerzo medioPrio baja: Baja criticidad + Alto esfuerzo→ Eliminar: ¡Borrar objetos que ya no se usan!✅ Checklist Fase 1
- Custom Code Migration App ejecutada
- ATC Checks ejecutados en paquetes críticos
- Findings categorizados (Sintaxis, APIs, UI, etc.)
- Objetos clasificados por prioridad
- Lista de objetos obsoletos creada (para eliminar)
- Stakeholders informados (Management, PO, etc.)
Resultado: Excel/PDF con todos los findings + estimación de esfuerzo
Fase 2: Planificación de migración
Objetivo
Crear un plan realista con recursos, timeline y riesgos.
2.1 Equipo y recursos
Roles necesarios:
- ABAP Cloud Developer (2-5 FTE según base de código)
- Functional Consultant (para entender lógica de negocio)
- Quality Manager (para Testing)
- Project Manager (para coordinación)
Cerrar brecha de skills:
- Training ABAP Cloud para el equipo (ver Roadmap)
- Workshops de RAP y CDS Views
- Consultores externos para casos complejos
2.2 Elegir estrategia de migración
Opción A: Big Bang (todo a la vez)
- ✅ Go-Live rápido
- ❌ Alto riesgo
- 👉 Para bases de código pequeñas (<500 objetos)
Opción B: Iterativo (paso a paso)
- ✅ Bajo riesgo
- ✅ Aprender de errores tempranos
- ❌ Mayor duración total
- 👉 Para bases de código medianas/grandes (>500 objetos)
Opción C: Híbrido
- Objetos críticos primero (Big Bang)
- Resto iterativamente después
- 👉 Recomendado para la mayoría de proyectos
2.3 Crear timeline
Ejemplo para 1.000 objetos:
Semana 1-4: Fase 1 - Análisis ✓Semana 5-6: Fase 2 - Planificación ✓Semana 7-14: Batch 1 - Objetos críticos (200)Semana 15-22: Batch 2 - Frecuentemente usados (300)Semana 23-30: Batch 3 - Restantes (500)Semana 31-36: Testing y corrección de bugsSemana 37: Go-Live2.4 Gestión de riesgos
Riesgos típicos:
| Riesgo | Probabilidad | Impacto | Mitigación |
|---|---|---|---|
| APIs no liberadas sin alternativa | Alta | Alto | Abrir tickets SAP temprano para liberación de API |
| Migración Dynpro-to-Fiori muy costosa | Media | Alto | Planificar buffer de presupuesto |
| Brecha de skills en el equipo | Alta | Medio | Training antes del inicio del proyecto |
| Dependencias ocultas | Media | Medio | Análisis de código con herramientas (ABAP Dependency Analyzer) |
✅ Checklist Fase 2
- Equipo formado
- Estrategia de migración elegida (Big Bang/Iterativo/Híbrido)
- Timeline registrado en herramienta de proyecto (Jira, Azure DevOps)
- Presupuesto aprobado
- Riesgos documentados con plan de mitigación
- Reunión de stakeholders realizada (Kick-off)
Resultado: Plan de proyecto con timeline, presupuesto, recursos
Fase 3: Adaptación de código (La migración real)
Objetivo
Reescribir código conforme a ABAP Cloud.
3.1 Definir directrices de desarrollo
Directrices de codificación ABAP Cloud:
1. Solo Released APIs/CDS Views2. Sin FORM/PERFORM → Métodos3. Sin SELECT * → Campos explícitos4. String Templates en lugar de CONCATENATE5. Table Expressions en lugar de READ TABLE6. Strict Mode en todos los BDEFs7. Exception Handling en Table Expressions8. EML en lugar de BAPI-Calls (donde sea posible)9. Fiori en lugar de Dynpro10. Unit Tests para lógica crítica¡Distribuir y capacitar al equipo!
3.2 Patrones de migración más frecuentes
Patrón 1: FORM → Método
Antes (Classic):
FORM calculate_total USING pv_amount TYPE p CHANGING pv_total TYPE p. pv_total = pv_amount * '1.19'.ENDFORM.
PERFORM calculate_total USING lv_amount CHANGING lv_total.Después (Cloud):
CLASS lcl_calculator DEFINITION. PUBLIC SECTION. CLASS-METHODS calculate_total IMPORTING iv_amount TYPE p RETURNING VALUE(rv_total) TYPE p.ENDCLASS.
CLASS lcl_calculator IMPLEMENTATION. METHOD calculate_total. rv_total = iv_amount * '1.19'. ENDMETHOD.ENDCLASS.
DATA(lv_total) = lcl_calculator=>calculate_total( lv_amount ).Patrón 2: Tabla SAP → Released CDS View
Antes (Classic):
SELECT matnr, maktx FROM mara INTO TABLE @DATA(lt_materials) WHERE mtart = 'FERT'.Después (Cloud):
SELECT Product, ProductDescription FROM I_Product INTO TABLE @DATA(lt_products) WHERE ProductType = 'FERT'.Encontrar mapping:
- Buscar en SAP API Business Hub
- ADT:
Ctrl+Shift+A→ buscarI_Product - Lista Where-Used de tabla SAP → encontrar CDS Views
Patrón 3: BAPI → RAP/EML
Antes (Classic):
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' EXPORTING order_header_in = ls_header TABLES return = lt_return.Después (Cloud):
MODIFY ENTITIES OF I_SalesOrder ENTITY SalesOrder CREATE FIELDS ( SoldToParty SalesOrderType ) WITH VALUE #( ( %cid = 'ORDER_1' SoldToParty = '0001000000' SalesOrderType = 'OR' ) ) MAPPED DATA(mapped) FAILED DATA(failed) REPORTED DATA(reported).
COMMIT ENTITIES.Patrón 4: Dynpro → Fiori Elements
Esfuerzo: ⭐⭐⭐ Muy alto
Estrategia:
- Análisis: ¿Qué campos/funciones tiene el Dynpro?
- Crear RAP BO: Modelo de datos como CDS View
- Behavior Definition: CRUD + Actions
- Service Binding: OData V4
- Fiori Elements: ¡Generado automáticamente!
- Annotations: Controlar layout UI
3.3 Herramientas para transformación de código
Quick Fixes en ADT:
ADT ofrece Quick Fixes para muchos findings:
1. Clic derecho en ATC Finding2. "Quick Fix" → ADT sugiere solución3. Aceptar → Código adaptado automáticamenteEjemplo: CONCATENATE → String Template
Cambios masivos con ABAP Cleaner:
Herramienta Open-Source: github.com/SAP/abap-cleaner
- Auto-Formatting
- Modernizar sintaxis obsoleta
- Disponible como plugin de Eclipse
3.4 APIs no liberadas: ¿Qué hacer?
Problema: Necesitas una tabla/FM SAP que no está liberada.
Soluciones:
-
Buscar alternativa liberada:
- Buscar en API Business Hub
- Preguntar en SAP Community
Ctrl+Shift+Aen ADT: Buscar CDS Views similares
-
Abrir ticket SAP:
- A través de SAP Support Portal
- Justificar por qué necesitas el objeto
- SAP puede liberar API posteriormente (¡pero toma tiempo!)
-
Crear API wrapped:
- En sistema Classic: Construir API-Wrapper
- Marcar como Released (¡solo en On-Premise!)
- Usar en sistema Cloud
-
Encontrar workaround:
- A menudo hay caminos alternativos vía Released APIs
- Los foros de la comunidad ayudan
Importante: ¡La opción 3 (Wrapped API) funciona SOLO en S/4HANA On-Premise, NO en BTP ABAP Environment!
✅ Checklist Fase 3
- Directrices de codificación comunicadas al equipo
- Trainings de desarrolladores realizados
- Objetos Batch 1 migrados
- Code Reviews realizados
- ATC Checks verdes (sin más Errors)
- Unit Tests escritos para lógica crítica
- Batch 2, 3, … realizados
Resultado: Código conforme a ABAP Cloud, limpio en ATC
Fase 4: Testing
Objetivo
Asegurar que el código migrado sea funcionalmente idéntico.
4.1 Estrategia de testing
Enfoque de testing de 3 niveles:
- Unit Tests (automatizados)
- Integration Tests (manual/automatizados)
- User Acceptance Tests (manual por área funcional)
4.2 Escribir Unit Tests
Para cada método crítico:
CLASS ltc_calculator_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION. METHODS test_calculate_total FOR TESTING.ENDCLASS.
CLASS ltc_calculator_test IMPLEMENTATION. METHOD test_calculate_total. " Given DATA(lv_amount) = 100.
" When DATA(lv_result) = lcl_calculator=>calculate_total( lv_amount ).
" Then cl_abap_unit_assert=>assert_equals( act = lv_result exp = 119 msg = 'Total should be 119 (100 * 1.19)' ). ENDMETHOD.ENDCLASS.Ejecutar Tests:
- ADT:
Ctrl+Shift+F10 - Objetivo: >80% Code Coverage para clases críticas
4.3 Tests de regresión
Comparación Viejo vs. Nuevo:
- Datos de prueba preparar en sistema DEV
- Código Classic ejecutar → guardar output
- Código Cloud ejecutar → guardar output
- Comparación Diff: Outputs deben ser idénticos
Herramientas:
- ABAP Unit para comparaciones automatizadas
- eCATT (Extended Computer Aided Test Tool)
- Scripts de prueba personalizados
4.4 Tests de rendimiento
Importante: El código Cloud puede ser más lento (nuevas APIs, más abstracciones)
Medir:
DATA(lv_start) = cl_abap_context_info=>get_system_time( ).
" Ejecutar código
DATA(lv_end) = cl_abap_context_info=>get_system_time( ).DATA(lv_duration) = lv_end - lv_start.En problemas de rendimiento:
- Optimizar CDS Views (índices, Buffering)
- Agrupar operaciones EML (no en Loop)
- Analizar SQL Trace → Identificar cuellos de botella
4.5 User Acceptance Testing (UAT)
Ejecución:
- Test-Cases definir con área funcional
- Sistema de prueba proporcionar (QAS)
- Key Users prueban (2-3 semanas)
- Feedback recopilar → corregir bugs
- Sign-Off por área funcional
✅ Checklist Fase 4
- Unit Tests escritos para lógica crítica (>80% Coverage)
- Tests de regresión ejecutados (Viejo vs. Nuevo idéntico)
- Tests de rendimiento ejecutados (sin degradación >20%)
- UAT completado (Sign-Off de área funcional)
- Bugs documentados y corregidos
- Informes de prueba creados
Resultado: Código probado y aceptado
Fase 5: Go-Live y Rollout
Objetivo
Llevar código a producción sin interrupciones.
5.1 Estrategia de Go-Live
Opción A: Cutover (fecha de corte)
- Todos los cambios productivos a la vez
- ✅ Corte claro
- ❌ Alto riesgo
Opción B: Parallel Run
- Código viejo + nuevo en paralelo
- Feature Toggles para conmutación
- ✅ Bajo riesgo
- ❌ Doble esfuerzo de mantenimiento
Opción C: Canary Deployment
- Nuevo código para 10% de usuarios → 50% → 100%
- ✅ Validación gradual
- 👉 ¡Recomendado!
5.2 Estrategia de transporte
Transporte estándar:
DEV → QAS → PRDChecks Pre-Go-Live:
- ¿Todos los transportes importados exitosamente en QAS?
- ¿Sin errores de sintaxis en QAS?
- ¿ATC Checks verdes?
- ¿Sign-Off de UAT disponible?
- ¿Plan de rollback listo?
5.3 Checklist de Go-Live
1 semana antes:
- Comunicación de Go-Live a todos los usuarios
- Equipo de soporte informado
- Dashboards de monitoreo configurados
- Procedimiento de rollback probado
En el día del Go-Live:
- Importar transportes a PRD (en ventana de mantenimiento)
- Smoke Tests en PRD (probar funciones críticas)
- Activar monitoreo (ST22, SM21, Application Logs)
- Hotline de soporte lista
Después del Go-Live:
- 1 semana de monitoreo intensivo
- Recopilar feedback de usuarios
- Corregir bugs menores (Hotfixes)
- Review Post-Go-Live (Lessons Learned)
5.4 Plan de Rollback
Cuando algo sale mal:
- Reconocer síntomas: Shortdumps, datos incorrectos, problemas de rendimiento
- Decisión: ¿Hotfix o Rollback?
- Rollback:
- Obtener versión de código antigua de Git
- Crear transporte con código antiguo
- Importar a PRD
- Root Cause Analysis: ¿Qué salió mal?
✅ Checklist Fase 5
- Estrategia de Go-Live definida (Cutover/Parallel/Canary)
- Transportes listos
- Comunicación de Go-Live enviada
- Equipo de soporte informado
- Plan de rollback documentado
- Setup de monitoreo activo
- Go-Live ejecutado exitosamente
- Review Post-Go-Live realizado
Resultado: Código productivo, funcionando establemente
Resumen de herramientas
| Herramienta | Propósito | Disponible en |
|---|---|---|
| Custom Code Migration App | Análisis Custom Code | S/4HANA (Fiori) |
| ABAP Test Cockpit (ATC) | Code-Checks, Findings | SAP GUI, ADT |
| ABAP Development Tools (ADT) | Desarrollo, Quick Fixes | Eclipse |
| ABAP Cleaner | Auto-Modernización | Plugin Eclipse |
| SQL Trace | Análisis de rendimiento | ADT |
| ST22 | Análisis de Shortdumps | SAP GUI |
| ABAP Unit | Unit Testing | ADT, SAP GUI |
| Git | Versionado | ADT (abapGit) |
Estimación de esfuerzo
Regla general:
- Objetos simples (solo sintaxis): 0.5-1 hr/objeto
- Objetos medios (cambios de API): 2-4 hr/objeto
- Objetos complejos (Dynpro → Fiori): 10-40 hr/objeto
Ejemplo: 1.000 objetos
- 700 simples × 1 hr = 700 hr
- 250 medios × 3 hr = 750 hr
- 50 complejos × 20 hr = 1.000 hr
- Total: 2.450 hr = ~14 meses (1 desarrollador) o ~3 meses (5 desarrolladores)
Plus: Análisis, Testing, Gestión de proyecto (+30%) → ~4 meses con 5 desarrolladores
Problemas frecuentes y soluciones
Problema 1: “No se encontró alternativa liberada”
Solución:
- Buscar en SAP API Business Hub: api.sap.com
- Preguntar en SAP Community: community.sap.com
- Abrir ticket de soporte SAP → Solicitar liberación de API
- Workaround vía otras Released APIs
Problema 2: “Migración Dynpro muy costosa”
Solución:
- Opción A: Aumentar presupuesto (realista)
- Opción B: Mantener Dynpro como “Wrapper”, solo Backend en ABAP Cloud
- Opción C: Usar herramientas Low-Code (SAP Build Apps)
Problema 3: “Degradación de rendimiento después de migración”
Solución:
- Optimizar CDS Views (índices, Buffering)
- Agrupar operaciones EML (no en Loop)
- Analizar SQL Trace → Identificar cuellos de botella
Problema 4: “El equipo no tiene skills ABAP Cloud”
Solución:
- Training: SAP Learning Hub, openSAP, capacitaciones externas
- Consultores externos para fase crítica
- Pair Programming: Experimentados + No experimentados juntos
Recursos adicionales
En abapcloud.com:
- Comparación ABAP Cloud vs Classic ABAP
- 10 errores ABAP Cloud más frecuentes
- Roadmap ABAP Cloud Developer
- ABAP Cloud Cheat Sheet
Recursos SAP:
- Clean Core & ABAP Cloud FAQ - Doktor ERP
- ABAP Cloud Migration Example - Software Heroes
- Custom Code Migration Workshops - GitHub
Resumen
La migración ABAP Cloud no es un sprint, sino un maratón. Con este plan de 5 pasos tienes un roadmap claro:
- Análisis: Entender base de código (ATC, Custom Code Migration App)
- Planificación: Timeline realista, equipo, presupuesto
- Adaptación: Reescribir código (FORM→Métodos, APIs→CDS, Dynpro→Fiori)
- Testing: Unit Tests, Tests de regresión, UAT
- Go-Live: Transporte, Monitoreo, Soporte
Factores de éxito más importantes:
- ✅ Análisis exhaustivo (¡no subestimar!)
- ✅ Planificación temporal realista (+30% buffer)
- ✅ Desarrollar skills del equipo (¡Training!)
- ✅ Enfoque iterativo (no Big Bang)
- ✅ Involucrar stakeholders (¡Comunicación!)
¡Mucho éxito en tu migración!
¿Necesitas ayuda? Escríbenos en los comentarios - ¡estamos encantados de ayudar con preguntas concretas de migración!