Guía Técnica · SAP + Claude AI · 2026

¿Puede Claude generar
apps Fiori y mantener
Web Dynpro?

Respuesta honesta, ejemplos reales y la estrategia correcta para cada caso.

🏗️ Backend RAP completo
📐 CDS Views + OData
🧪 Unit Tests ABAP
🖥️ Fiori Elements UI
🔧 Web Dynpro (mantener)
♻️ WD → Fiori migración
01 — diagnóstico

Lo que Claude puede y no puede hacer

✓ Sí, completo

Backend Fiori (RAP Stack)

Claude genera la pila completa: tabla DDIC, CDS Interface View, CDS Projection View, Metadata Extension, Behavior Definition, Behavior Implementation y Service Binding OData V4. Todo listo para activar.

~ Parcial / Alternativa

Frontend Fiori Elements UI

El HTML/JS de la app en sí se genera en SAP BAS (Business Application Studio) con los wizards de SAP Fiori Tools. Claude genera el proyecto CAP completo con UI5 si usas BTP side-by-side.

✓ Sí, totalmente

Web Dynpro — Mantenimiento

Claude lee, explica, corrige y extiende código Web Dynpro ABAP existente. Entiende Controllers, Views, Context nodes, Actions y Component interfaces. Ideal para bugs y mejoras sin migración.

→ Estrategia recomendada

Web Dynpro → Fiori Migration

Claude analiza tu WD existente y genera el RAP Business Object equivalente + la Fiori Elements app. Es la hoja de ruta que SAP recomienda y Claude la ejecuta paso a paso con contexto de tu negocio.

02 — Fiori App generation

Generación de una App Fiori Completa

💡

Ejemplo real: App "Gestión de Pedidos de Venta" Con un solo prompt en Claude Code conectado al MCP ABAP, Claude genera todos los artefactos backend en secuencia correcta. El flujo completo tarda ~5 minutos en lugar de 2-3 días de desarrollo manual.

Artefactos generados por Claude — Orden de creación
🗃️ 1. DDIC Database Table ZSALESORDER
CREATE
👁️ 2. CDS Interface View Z_I_SalesOrder
EXPOSES
🔭 3. CDS Projection View Z_C_SalesOrder
UI ANNOT
🏷️ 4. CDS Metadata Ext Z_C_SalesOrder_M
📋 5. RAP Behavior Def Z_C_SalesOrder
IMPLEMENTS
⚙️ 6. RAP Behavior Impl ZBP_C_SalesOrder
EXPOSES
🌐 7. OData Service Def ZUI_SalesOrder_O4
BIND
🔗 8. Service Service Binding OData V4 UI

Haz click en cada artefacto para ver el código que Claude genera:

PROMPT Instrucción inicial a Claude Code Claude Code Input
# Con MCP ABAP activo, solo escribes esto: > "Crea una app Fiori de gestión de pedidos de venta. La entidad principal es SalesOrder con campos: OrderID (clave), CustomerID, Status (enum: NEW/OPEN/CLOSED), NetAmount, Currency, CreatedAt. Genera todos los artefactos RAP en el paquete Z_SD_ORDERS: tabla DDIC, CDS Interface View, Projection View con UI annotations para List Report, Metadata Extension con columnas visibles, Behavior Definition managed con draft, Behavior Implementation con validaciones básicas, Service Definition y Service Binding OData V4. Usa naming convention Z_<nombre> y activa todo."
ART 1 Tabla DDIC — ZSALESORDER TABL Object
@EndUserText.label: 'Sales Order' @AbapCatalog.enhancement.category: #NOT_EXTENSIBLE @AbapCatalog.tableCategory: #TRANSPARENT @AbapCatalog.deliveryClass: #A define table zsalesorder { key client : abap.clnt not null; key order_id : abap.char(10) not null; customer_id : abap.char(10); status : abap.char(10); // 'NEW' | 'OPEN' | 'CLOSED' net_amount : abap.curr(13,2); currency : abap.cuky; created_at : abap.utclong; }
ART 2 CDS Interface View — Z_I_SalesOrder DDLS Interface
@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Sales Order - Interface View' define root view entity Z_I_SalesOrder as select from zsalesorder { key order_id as OrderID, customer_id as CustomerID, status as Status, net_amount as NetAmount, currency as Currency, created_at as CreatedAt }
ART 3 CDS Projection View + UI Annotations DDLS Consumption
@EndUserText.label: 'Sales Order - Consumption View' @AccessControl.authorizationCheck: #NOT_REQUIRED @Metadata.allowExtensions: true @UI.headerInfo: { typeName: 'Sales Order', typeNamePlural: 'Sales Orders', title: { type: #STANDARD, value: 'OrderID' } } define root view entity Z_C_SalesOrder provider contract transactional_query as projection on Z_I_SalesOrder { @UI.facet: [{ id:'General', type:#IDENTIFICATION_REFERENCE, label:'General' }] @UI.lineItem: [{ position: 10 }] @UI.identification: [{ position: 10 }] key OrderID, @UI.lineItem: [{ position: 20 }] CustomerID, @UI.lineItem: [{ position: 30 }] @UI.selectionField: [{ position: 10 }] Status, @UI.lineItem: [{ position: 40 }] @Semantics.amount.currencyCode: 'Currency' NetAmount, Currency, CreatedAt }
ART 4 Behavior Definition — Managed + Draft BDEF Object
managed implementation in class ZBP_C_SalesOrder unique; with draft; define behavior for Z_C_SalesOrder alias SalesOrder persistent table zsalesorder draft table zsalesorder_d lock master total etag CreatedAt etag master CreatedAt { // Standard CUD operations create; update; delete; draft action Edit; draft action Activate; draft action Discard; draft determine action Prepare; // Custom actions action CloseOrder result [1] $self; // Validations validation validateStatus on save { field Status; } validation validateCustomer on save { field CustomerID; } // Field control field ( readonly : create, update ) OrderID; field ( mandatory ) CustomerID, Status; mapping for zsalesorder { OrderID = order_id; CustomerID = customer_id; Status = status; NetAmount = net_amount; Currency = currency; CreatedAt = created_at; } }
ART 5 Behavior Implementation — Validaciones + Acción CLAS ABAP Class
CLASS zbp_c_salesorder DEFINITION PUBLIC ABSTRACT FINAL INHERITING FROM cl_abap_behavior_handler. PRIVATE SECTION. "-- Validation: Status must be NEW, OPEN or CLOSED METHODS validate_status FOR VALIDATE ON SAVE IMPORTING keys FOR salesorder~validatestatus. "-- Action: Close the order METHODS close_order FOR MODIFY IMPORTING keys FOR ACTION salesorder~closeorder RESULT result. ENDCLASS. CLASS zbp_c_salesorder IMPLEMENTATION. METHOD validate_status. READ ENTITIES OF z_c_salesorder IN LOCAL MODE ENTITY salesorder FIELDS ( status ) WITH keys RESULT DATA(orders). LOOP AT orders INTO DATA(order). IF order-status NOT IN VALUE #( ( |NEW| ) ( |OPEN| ) ( |CLOSED| ) ). APPEND VALUE #( %tky = order-%tky %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = |Status '{ order-status }' is not valid| ) ) TO failed-salesorder. ENDIF. ENDLOOP. ENDMETHOD. METHOD close_order. MODIFY ENTITIES OF z_c_salesorder IN LOCAL MODE ENTITY salesorder UPDATE FIELDS ( status ) WITH VALUE #( FOR key IN keys ( %tky = key-%tky status = |CLOSED| ) ). READ ENTITIES OF z_c_salesorder IN LOCAL MODE ENTITY salesorder ALL FIELDS WITH keys RESULT result. ENDMETHOD. ENDCLASS.

Resultado: 8 objetos ABAP generados y activados en ~5 minutos Con el MCP ABAP conectado, Claude no solo genera el código — lo crea directamente en el sistema SAP, lo activa, y puede iniciar el preview de la Fiori Elements app desde el Service Binding. El desarrollador solo supervisa y ajusta lógica de negocio específica.

03 — Web Dynpro

Web Dynpro: ¿Qué puede hacer Claude?

⚠️

Contexto importante sobre Web Dynpro SAP Web Dynpro fue introducido en 2003. Sigue siendo soportado en SAP ECC y S/4HANA on-premise, pero no en S/4HANA Cloud ni BTP, y tiene soporte reducido en navegadores modernos. SAP no lo recomienda para desarrollo nuevo. Claude puede mantenerlo y ayudarte a migrar estratégicamente.

🔧 Mantenimiento WD
🔍 Lo que Claude entiende
♻️ Migración WD → Fiori
🚫 Limitaciones Claude + WD
  • No puede crear WD components desde cero via MCP (los metadatos WD son binarios en el sistema)
  • El diseñador visual de WD no es accesible por API — solo el código ABAP subyacente
  • Los cambios en el Context (nodos, atributos) requieren el SE80/Web Dynpro Explorer visualmente
  • Claude no recomienda Web Dynpro para nuevo desarrollo
✓ Lo que SÍ hace Claude con WD
  • Lee y explica Controllers complejos con lógica de negocio embebida
  • Corrige bugs en métodos WDDOINIT, WDDOEXIT, event handlers
  • Refactoriza lógica de negocio a clases ABAP separadas (separación de capas)
  • Optimiza queries SQL dentro de los controllers
  • Genera unit tests para la lógica de negocio extraída
  • Documenta la funcionalidad para planificar la migración
  • Convierte el código WD completo a equivalente RAP + Fiori
🔧 Prompt — Corregir bug en Web Dynpro Controller
"Analiza el método WDDOINIT de la componente ZWD_CUSTOMER_LIST. El método falla con DUMP DBIF_RSQL_INVALID_CURSOR cuando hay más de 500 registros. Aquí está el código: [pega el método]. Corrígelo y explica qué causaba el error."
→ Claude identifica el loop con SELECT dentro, lo refactoriza a una sola query con INTO TABLE, explica el problema de cursor agotado y genera el código corregido.
🔧 Prompt — Extraer lógica de negocio de WD
"El controller ZWD_ORDER_PROC tiene 800 líneas de lógica de negocio mezclada con UI. Extrae toda la lógica de negocio a una clase ABAP ZCL_ORDER_PROCESSOR con OO clean design, dejando el controller solo con llamadas a la clase. Mantén el comportamiento exacto."
Resultado: Claude genera la clase ZCL_ORDER_PROCESSOR limpia y el controller WD refactorizado. El WD sigue funcionando pero ahora la lógica es testeable y reutilizable.
* ── EJEMPLO: Controller WD con lógica mezclada (lo que Claude recibe) METHOD wddoinit. "-- Context binding DATA lo_nd_orders TYPE REF TO if_wd_context_node. DATA lo_el_orders TYPE REF TO if_wd_context_element. DATA ls_order TYPE wd_this->element_orders. "-- Lógica de negocio mezclada con UI (anti-pattern) DATA lt_vbak TYPE TABLE OF vbak. SELECT * FROM vbak INTO TABLE lt_vbak "← acceso directo tabla SAP! WHERE erdat = sy-datum. lo_nd_orders = wd_context->get_child_node( name = wd_this->wdctx_orders ). LOOP AT lt_vbak INTO DATA(ls_vbak). "-- Lógica de validación mezclada IF ls_vbak-vkorg = '1000'. lo_el_orders = lo_nd_orders->create_element( ). lo_el_orders->set_attribute( name = 'ORDER_ID' value = ls_vbak-vbeln ). ENDIF. ENDLOOP. ENDMETHOD. * ── Claude genera esto en su lugar: "1. Clase ZCL_ORDER_SERVICE con método get_orders_by_date() "2. Usa API released I_SalesOrder en lugar de tabla VBAK directa "3. Controller WD delega a la clase — solo 10 líneas "4. La clase es testeable con ABAP Unit
♻️ Prompt — Migración completa WD → Fiori RAP
"Analiza la componente Web Dynpro ZWD_MANAGE_CUSTOMERS. Tiene un listado de clientes con búsqueda, un formulario de detalle con edición, y un botón para crear nuevos clientes. Genera el equivalente completo en RAP + Fiori Elements: - CDS Interface View basada en I_Customer (API released) - CDS Projection View con annotations para List Report + Object Page - Behavior Definition con create/update/delete - Behavior Implementation con las mismas validaciones que tiene el WD - Service Binding OData V4 El resultado debe ser Clean Core Level A."
Claude genera los 6-8 artefactos RAP equivalentes, mapeando cada pantalla WD a su patrón Fiori Elements correspondiente (List Report = listado+búsqueda, Object Page = formulario detalle), manteniendo la misma lógica de negocio pero en ABAP Cloud.

Estrategia de migración recomendada

🔍
Fase 1: Inventario
Claude analiza todos los WD existentes, documenta su funcionalidad y clasifica por complejidad y uso. Identifica cuáles comparten lógica de negocio.
Inmediato
🧹
Fase 2: Refactoring WD
Extrae lógica de negocio de los controllers a clases ABAP separadas. El WD sigue funcionando pero la lógica ya está preparada para reusar en RAP.
Corto plazo
🚀
Fase 3: Nuevo en RAP
Todo desarrollo nuevo va directo a RAP + Fiori Elements. Claude genera la pila completa en minutos. Los WD migrados se reemplazan gradualmente.
Medio plazo
🔄
Migración prioritaria
Los WD más usados (alta frecuencia de acceso) se migran primero. Claude automatiza el 80% de la generación de artefactos RAP equivalentes.
Medio plazo
📦
WD legado congelado
Los WD de baja prioridad o bajo uso se congelan (solo corrección de bugs críticos, sin features nuevas). Se migran en la última fase o se retiran.
Largo plazo
Zero Web Dynpro
Meta final: 100% del portfolio en Fiori/RAP. Claude ayuda a medir el progreso con auditorías automáticas del estado de cada componente.
Objetivo final
04 — resumen ejecutivo

Tabla de Capacidades Claude + SAP UI

Tecnología Generar nuevo Mantener existente Migrar a Fiori Recomendación
RAP + Fiori Elements ✓ Completo ✓ Sí Todo desarrollo nuevo
Fiori Elements UI (frontend) ~ Via SAP BAS ✓ Annotations Claude genera las annotations backend
CAP + Fiori (BTP side-by-side) ✓ Completo ✓ Sí Extensiones BTP
Web Dynpro ✗ No recomendado ✓ Sí ✓ Automatizado Mantener + planificar migración
ABAP clásico / ALV ~ Con advertencia ✓ Sí ✓ A RAP Solo si es ECC sin plan de upgrade
BSP / ICF ✗ Obsoleto ~ Limitado ✓ A Fiori Migración prioritaria
🎯

Conclusión clave para tu estrategia Claude Code con MCP ABAP genera el 100% del backend Fiori (RAP stack completo) de forma autónoma. Para el frontend, las CDS Annotations que Claude genera controlan prácticamente toda la UI de Fiori Elements — la mayoría de las apps no necesitan código UI5 personalizado. Web Dynpro existente puede ser mantenido y migrado sistemáticamente a Fiori con Claude como motor de refactorización.

Claude × SAP ABAP · Guía técnica · Marzo 2026

SAP TechEd 2025 RAP Workshop · SAP Skills for Claude Code · Claude Code Docs