Esta checklist de implementación ayuda a líderes de proyecto y desarrolladores a no olvidar nada importante en proyectos ABAP Cloud. Desde la preparación inicial del sistema, pasando por el desarrollo RAP hasta el Go-Live, todos los pasos críticos están cubiertos.
Resumen: Las cinco fases
┌─────────────────────────────────────────────────────────────┐
│ Fase 1: Preparación del proyecto │
│ ──────────────────────────────── │
│ • Landscape del sistema y autorizaciones │
│ • Estructura de paquetes y convenciones de nombres │
│ • Configurar herramientas de desarrollo │
└──────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Fase 2: Modelo de datos │
│ • Diseño de tablas y elementos de datos │
│ • CDS Views y asociaciones │
│ • Identificar Released APIs │
└──────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Fase 3: Desarrollo RAP │
│ ────────────────────── │
│ • Behavior Definition e Implementation │
│ • Validaciones, Determinations, Actions │
│ • Authorization y Feature Control │
└──────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ • Service Definition y Binding │
└──────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Fase 5: Aseguramiento de calidad y Go-Live │
│ ─────────────────────────────────── │
│ • Performance y seguridad │
│ • Transporte y documentación │
└──────────────────────────────────────────────────────────────┘
Fase 1: Preparación del proyecto
Landscape del sistema y autorizaciones
Check Descripción Estado ☐ Versión de lenguaje ABAP Cloud activada en el sistema ☐ Usuarios desarrolladores tienen S_ABPLNGVS para paquetes Cloud ☐ Ruta de transporte definida (DEV → QAS → PRD) ☐ Acceso ADT/BAS configurado para todos los desarrolladores ☐ Repositorio Git creado (si se usa abapGit)
Crear estructura de paquetes
" Estructura de paquetes recomendada para proyecto ABAP Cloud
" $Z_PROYECTO (Superpaquete)
" │ ├── CDS Views (ZI_*, ZC_*)
" │ └── Elementos de datos
" │ ├── Behavior Definitions
" │ └── Behavior Implementations (ZBP_*)
" │ ├── Service Definitions
" └── Clases de Unit Test (ZTC_*)
Establecer convenciones de nombres
Tipo de objeto Prefijo Ejemplo Tabla de base de datos ZTAB_ZTAB_BOOKINGInterface View (CDS) ZI_ZI_BookingConsumption View ZC_ZC_BookingBehavior Pool ZBP_ZBP_I_BookingService Definition ZSRV_ZSRV_BookingService Binding ZUI_ZUI_Booking_O4Clase de Unit Test ZTC_ZTC_Booking_Test
Fase 2: Modelo de datos
Checklist de diseño de tablas
Check Descripción ☐ Clave primaria definida (CLIENT + campos clave) ☐ Campos técnicos presentes (CREATED_BY, CREATED_AT, …) ☐ Elementos de datos usados en lugar de tipos incorporados ☐ Relaciones de clave foránea documentadas ☐ Delivery Class correctamente configurada (A, C, L, …)
Ejemplo: Definición de tabla
@EndUserText.label : 'Reservas'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
define table ztab_booking {
key client : abap.clnt not null;
key booking_uuid : sysuuid_x16 not null;
booking_id : ze_booking_id;
customer_id : ze_customer_id;
@Semantics.amount.currencyCode : 'ztab_booking.currency_code'
currency_code : abap.cuky;
status : ze_booking_status;
created_by : abp_creation_user;
created_at : abp_creation_tstmpl;
last_changed_by : abp_locinst_lastchange_user;
last_changed_at : abp_locinst_lastchange_tstmpl;
Checklist de CDS View
Check Descripción ☐ Root View Entity con define root view entity ☐ Access Control definido (@AccessControl.authorizationCheck) ☐ Anotaciones semánticas (@Semantics.amount, @Semantics.quantity) ☐ Asociaciones a entidades dependientes ☐ Campos clave correctamente marcados
Ejemplo: CDS View Entity
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Reserva'
define root view entity ZI_Booking
as select from ztab_booking
composition [ 0 ..*] of ZI_BookingItem as _Items
association [ 1 .. 1 ] to ZI_Customer as _Customer
on $projection.CustomerId = _Customer.CustomerId
key booking_uuid as BookingUuid,
customer_id as CustomerId,
flight_date as FlightDate,
@Semantics.amount.currencyCode: 'CurrencyCode'
currency_code as CurrencyCode,
@Semantics.user.createdBy: true
@Semantics.systemDateTime.createdAt: true
@Semantics.user.lastChangedBy: true
last_changed_by as LastChangedBy,
@Semantics.systemDateTime.lastChangedAt: true
last_changed_at as LastChangedAt,
Released APIs para datos SAP
Datos SAP Released API (Nivel A) No usar (Nivel D) Material I_ProductMARA, MAKTCliente I_CustomerKNA1, KNB1Proveedor I_SupplierLFA1, LFB1Documento de ventas I_SalesOrderVBAK, VBAPInfo de usuario CL_ABAP_CONTEXT_INFOSY-UNAME, USR02
Más sobre Released APIs en el artículo Concepto de niveles Clean Core .
Fase 3: Desarrollo RAP
Checklist de Behavior Definition
Check Descripción ☐ Tipo de implementación elegido (managed o unmanaged) ☐ strict ( 2 ) para la versión más reciente de RAP☐ Persistent Table o Draft Table definida ☐ Lock Master/Dependent correctamente configurado ☐ Authorization Master definido ☐ Validaciones para campos obligatorios ☐ Determinations para valores automáticos ☐ Actions para procesos de negocio
Ejemplo: Behavior Definition
managed implementation in class zbp_i_booking unique;
define behavior for ZI_Booking alias Booking
persistent table ztab_booking
lock master total etag LastChangedAt
authorization master ( instance )
etag master LastChangedAt
" Valores automáticos de campos
field ( readonly ) BookingUuid, CreatedBy, CreatedAt,
LastChangedBy, LastChangedAt;
field ( numbering : managed ) BookingUuid;
draft action Activate optimized;
draft determine action Prepare;
validation validateCustomer on save
{ field CustomerId; create; }
validation validateFlightDate on save
{ field FlightDate; create; update; }
" Determination para Booking-ID
determination setBookingId on modify
{ field BookingUuid; create; }
action ( features : instance ) confirm result [ 1 ] $self;
action ( features : instance ) cancel result [ 1 ] $self;
association _Items { create; }
BookingUuid = booking_uuid;
CustomerId = customer_id;
FlightDate = flight_date;
CurrencyCode = currency_code;
LastChangedBy = last_changed_by;
LastChangedAt = last_changed_at;
Checklist de Behavior Implementation
Check Descripción ☐ Cada Validation tiene manejo de failed y reported ☐ Determinations rellenan todos los campos automáticos ☐ Actions verifican precondiciones (IF booking-Status = ...) ☐ Feature Control para disponibilidad dinámica de Actions ☐ Messages usan el interface if_abap_behv_message
Ejemplo: Validation
" Leer todas las reservas relevantes
READ ENTITIES OF ZI_Booking IN LOCAL MODE
WITH CORRESPONDING #( keys )
RESULT DATA (lt_bookings).
" Verificar datos de cliente
SELECT CustomerId FROM ZI_Customer
FOR ALL ENTRIES IN @lt_bookings
WHERE CustomerId = @lt_bookings-CustomerId
INTO TABLE @ DATA (lt_valid_customers).
LOOP AT lt_bookings INTO DATA (ls_booking).
IF NOT line_exists ( lt_valid_customers[ CustomerId = ls_booking-CustomerId ] ).
APPEND VALUE #( %tky = ls_booking-%tky ) TO failed-booking.
APPEND VALUE #( %tky = ls_booking-%tky
%msg = new_message_with_text(
severity = if_abap_behv_message=>severity-error
text = | Cliente { ls_booking-CustomerId } no encontrado | )
%element-CustomerId = if_abap_behv=>mk-on
Authorization y Feature Control
METHOD get_instance_authorizations .
READ ENTITIES OF ZI_Booking IN LOCAL MODE
WITH CORRESPONDING #( keys )
RESULT DATA (lt_bookings).
LOOP AT lt_bookings INTO DATA (ls_booking).
%update = COND #( WHEN ls_booking-Status = 'CONFIRMED'
THEN if_abap_behv=>auth-unauthorized
ELSE if_abap_behv=>auth-allowed )
%delete = COND #( WHEN ls_booking-Status = 'CONFIRMED'
THEN if_abap_behv=>auth-unauthorized
ELSE if_abap_behv=>auth-allowed )
%action-confirm = COND #( WHEN ls_booking-Status = 'NEW'
THEN if_abap_behv=>auth-allowed
ELSE if_abap_behv=>auth-unauthorized )
%action-cancel = COND #( WHEN ls_booking-Status <> 'CANCELLED'
THEN if_abap_behv=>auth-allowed
ELSE if_abap_behv=>auth-unauthorized )
Fase 4: Service y UI
Checklist de Service Layer
Check Descripción ☐ Service Definition creada con define service ☐ Todas las entidades necesarias expuestas ☐ Service Binding para OData V4 (recomendado) ☐ Service Binding activado y probado ☐ Fiori Preview funciona en ADT
Ejemplo: Service Definition
@EndUserText.label: 'Booking Service'
define service ZSRV_Booking {
expose ZC_Booking as Booking;
expose ZC_BookingItem as BookingItem;
expose ZI_Customer as Customer;
Checklist de anotaciones UI
Check Descripción ☐ @UI.headerInfo para encabezado de entidad☐ @UI.lineItem para vista de lista☐ @UI.facet para estructura de Object Page☐ @UI.selectionField para criterios de filtro☐ @UI.identification para campos de Object Page☐ @UI.fieldGroup para agrupación lógica
@Metadata.layer: #CUSTOMER
annotate view ZC_Booking with
type : #IDENTIFICATION_REFERENCE,
type : #LINEITEM_REFERENCE,
targetElement: '_Items' }
typeNamePlural: 'Reservas' ,
title : { value : 'BookingId' },
description: { value : 'CustomerId' }
@UI: { lineItem: [{ position : 10 }],
selectionField: [{ position : 10 }],
identification : [{ position : 10 }] }
@UI: { lineItem: [{ position : 20 }],
selectionField: [{ position : 20 }],
identification : [{ position : 20 }] }
@UI: { lineItem: [{ position : 30 }],
identification : [{ position : 30 }] }
@UI: { lineItem: [{ position : 40 , criticality: 'StatusCriticality' }],
identification : [{ position : 40 , criticality: 'StatusCriticality' }] }
Fase 5: Aseguramiento de calidad y Go-Live
Checklist de Unit Tests
Check Descripción ☐ Clase de test con FOR TESTING y RISK LEVEL HARMLESS ☐ Validaciones probadas (casos positivos y negativos) ☐ Determinations probadas ☐ Actions probadas con transiciones de estado ☐ Al menos 70% de Code Coverage alcanzado
Ejemplo: Unit Test
CLASS ztc_booking_test DEFINITION
environment TYPE REF TO if_cds_test_environment.
test_create_booking FOR TESTING ,
test_validate_customer_invalid FOR TESTING .
CLASS ztc_booking_test IMPLEMENTATION .
environment = cl_cds_test_environment=>create_for_multiple_cds(
VALUE #( ( i_for_entity = 'ZI_BOOKING' )
( i_for_entity = 'ZI_CUSTOMER' ) ) ).
environment->clear_doubles( ).
METHOD test_create_booking .
" Preparar datos de prueba
DATA (lt_customers) = VALUE zt_customer( ( customer_id = 'CUST001' ) ).
environment->insert_test_data( lt_customers ).
MODIFY ENTITIES OF ZI_Booking
CREATE FIELDS ( CustomerId FlightDate Price CurrencyCode )
WITH VALUE #( ( %cid = 'CID1'
FlightDate = sy - datum + 30
cl_abap_unit_assert=>assert_initial( failed ).
cl_abap_unit_assert=>assert_not_initial( mapped-booking ).
METHOD test_validate_customer_invalid .
" Operación RAP con cliente inválido
MODIFY ENTITIES OF ZI_Booking
CREATE FIELDS ( CustomerId FlightDate )
WITH VALUE #( ( %cid = 'CID1'
FlightDate = sy - datum + 30 ) )
" Assertion: La validación debe fallar
cl_abap_unit_assert=>assert_not_initial( failed-booking ).
Verificación ATC
Check Descripción ☐ ATC sin errores de prioridad 1 ☐ Sin findings de Nivel D (accesos directos a tablas) ☐ Sin findings de Nivel C (objetos no clasificados) ☐ Check-Variant ABAP_CLOUD_DEVELOPMENT utilizada
Checklist de Go-Live
Check Descripción ☐ Todos los Unit Tests en verde ☐ ATC sin findings críticos ☐ Pruebas de rendimiento realizadas ☐ Test End-to-End en QAS exitoso ☐ App Fiori probada funcionalmente ☐ Transport Request documentada ☐ Plan de rollback disponible ☐ Documentación técnica actualizada ☐ Capacitación de usuarios realizada
Referencia rápida: Do’s y Don’ts
Do’s
✅ Usa strict ( 2 ) en Behavior Definitions
✅ Configura @AccessControl.authorizationCheck: #CHECK
✅ Usa Managed Scenario con Draft cuando sea posible
✅ Implementa Feature Control para Actions
✅ Escribe Unit Tests antes del transporte
✅ Usa Metadata Extensions para anotaciones UI
Don’ts
❌ Sin SELECTs directos a tablas SAP
❌ Sin SY-UNAME, usa CL_ABAP_CONTEXT_INFO
❌ Sin CALL FUNCTION para BAPIs estándar
❌ Sin COMMIT WORK en contexto RAP
❌ Sin textos hardcodeados, usa Message Classes
❌ Sin variables globales en Behavior Classes
Conclusión
Esta checklist cubre los aspectos más importantes de una implementación ABAP Cloud. Úsala como guía para tu proyecto y adáptala según sea necesario a tus requisitos específicos.
Las cinco fases ofrecen un flujo claro:
Preparación del proyecto : Establecer las bases
Modelo de datos : Base sólida con CDS Views
Desarrollo RAP : Implementar lógica de negocio
Service y UI : Proporcionar la aplicación
Aseguramiento de calidad : Asegurar estabilidad
Para información más profunda sobre temas individuales consulta: