Antes de entender los tipos, hay que entender qué es una CDS View. Una CDS View es una forma de definir modelos de datos directamente en la base de datos (HANA), usando SQL extendido y anotaciones.
👉 ¿Qué son las CDS Views?
Los tipos de CDS no son independientes, forman una arquitectura en capas:
Basic View → Composite View → Consumption View
Y cada capa tiene una responsabilidad distinta.
┌─────────────────────────────────────────────────────────┐
│ CONSUMPTION VIEW │
│ (Lo que ven las aplicaciones: Fiori, OData, Reports) │
├─────────────────────────────────────────────────────────┤
│ COMPOSITE VIEW │
│ (Lógica de negocio, combinación de Basic Views) │
├─────────────────────────────────────────────────────────┤
│ BASIC VIEW │
│ (Acceso directo a tablas, joins simples) │
├─────────────────────────────────────────────────────────┤
│ TABLAS DE BASE DE DATOS │
│ (MARA, VBAK, VBAP, KNA1, etc.) │
└─────────────────────────────────────────────────────────┘
Basic View (Vista básica)
Las Basic Views representan acceso directo a tablas base. Es la capa más cercana a las tablas de base de datos. Su función es exponer tablas de forma estructurada, aplicando joins simples y renombrando campos. Es la base sobre la que se construyen el resto de vistas.Características clave
Características:
| Característica | Descripción |
|---|---|
| Propósito | Acceso directo a tablas base |
| Complejidad | Baja |
| Anotación principal | @VDM.viewType: #BASIC |
| ¿Se consume directamente? | ❌ No recomendado para UI/APIs |
| ¿Contiene lógica de negocio? | ❌ No (solo estructura de datos) |
¿Para qué sirve exactamente?
Ejemplo de Basic View:
@AbapCatalog.sqlViewName: 'ZBASIC01'
@VDM.viewType: #BASIC
define view Z_I_Product as select from mara
{
key matnr,
ersda,
mtart
}
¿Cuándo usar una Basic View?
¿Qué pasa si uso una Basic View directamente en Fiori?
Técnicamente se puede, pero es mala práctica porque:
- Carece de las anotaciones que necesita Fiori (títulos, behaviors, etc.)
- Mezcla la capa de acceso a datos con la capa de presentación
- Si cambias la lógica de negocio, afectas a todas las aplicaciones
Composite View (Vista compuesta)
La Composite View es la capa intermedia. Su función es combinar Basic Views y aplicar lógica de negocio. Es el «cerebro» del modelo de datos.
Características
| Característica | Descripción |
|---|---|
| Propósito | Combinar Basic Views, aplicar lógica de negocio |
| Complejidad | Media |
| Anotación principal | @VDM.viewType: #COMPOSITE |
| ¿Se consume directamente? | ❌ No recomendado para UI/APIs (sigue siendo capa interna) |
| ¿Contiene lógica de negocio? | ✅ Sí (asociaciones, cálculos, etc.) |
¿Para qué sirve exactamente?
Ejemplo de Composite View
@AbapCatalog.sqlViewName: 'ZCOMP01'
@VDM.viewType: #COMPOSITE
define view Z_I_SalesOrder as select from Z_I_Product as product
association [1..*] to vbap as _items on product.matnr = _items.matnr
{
key product.matnr,
product.mtart,
_items
}
¿Cuándo usar una Composite View?
Diferencia clave entre Basic y Composite
| Aspecto | Basic View | Composite View |
|---|---|---|
| Fuente de datos | Tablas directamente | Basic Views (principalmente) |
| Joins | Simples (pocas tablas) | Complejos (múltiples vistas) |
| Asociaciones | No (o muy limitadas) | ✅ Sí |
| Lógica de negocio | ❌ No | ✅ Sí |
| Reutilización | Por múltiples vistas | Por múltiples consumos |
Consumption View (Vista de consumo)
La Consumption View es la capa final, la que ven las aplicaciones. Su función es exponer los datos de forma optimizada para su consumo por Fiori, OData, reports, etc.
Características
| Característica | Descripción |
|---|---|
| Propósito | Exponer datos a aplicaciones (Fiori, OData, UI) |
| Complejidad | Alta (muchas anotaciones) |
| Anotación principal | @VDM.viewType: #CONSUMPTION |
| ¿Se consume directamente? | ✅ Sí (es su propósito) |
| ¿Contiene lógica de negocio? | ❌ No (solo selecciona de Composite Views) |
¿Para qué sirve exactamente?
Ejemplo de Consumption View
@AbapCatalog.sqlViewName: 'ZCONS01'
@VDM.viewType: #CONSUMPTION
@OData.publish: true
define view Z_C_Product as select from Z_I_Product
{
@UI.lineItem: [{ position: 10, importance: #HIGH }] " Mostrar en listas
@UI.identification: [{ position: 10 }] " Mostrar en detalle
key matnr,
mtart
}
¿Cuándo usar una Consumption View?
¿Por qué no puedo usar Basic/Composite directamente en Fiori?
Porque Fiori necesita anotaciones específicas que no tienen las Basic/Composite Views:
@UI.lineItem→ qué campos mostrar en una tabla@UI.selectionField→ campos de búsqueda@UI.headerInfo→ título de la app@OData.publish→ exponer como servicio
Si usas una Basic View directamente, Fiori no sabrá cómo mostrarla.
Transactional Views
Las Transactional CDS Views están diseñadas para procesamiento de datos con escritura (crear, actualizar, borrar). No solo leen datos, también permiten modificarlos.
Características
| Característica | Descripción |
|---|---|
| Propósito | Permitir operaciones de escritura (CRUD) |
| Complejidad | Alta |
| Anotaciones clave | @ObjectModel.transactionalProcessingEnabled: true |
| ¿Se consume directamente? | ✅ Sí (en RAP) |
| Framework principal | RAP (RESTful ABAP Programming Model) |
¿Para qué sirve exactamente?
Ejemplo de Transaccional View
@AbapCatalog.sqlViewName: 'ZVTRANSPROD'
@VDM.viewType: #CONSUMPTION
@OData.publish: true
@ObjectModel.transactionalProcessingEnabled: true
@ObjectModel.createEnabled
@ObjectModel.updateEnabled
@ObjectModel.deleteEnabled
define view Z_C_Product_Transactional as select from Z_I_Product_Composite
{
key ProductId,
ProductType,
ProductDescription,
MaintenanceStatus,
@ObjectModel.readOnly: true " Campo de solo lectura
CreatedOn,
@ObjectModel.mandatory: true " Campo obligatorio
LastChangedOn
}
¿Cuándo usar una Transactional View?
Relación con RAP
Las Transactional Views son la base del RAP (RESTful ABAP Programming Model). En RAP:
- La CDS View define la interfaz de datos
- Se complementa con una clase de comportamiento (Behavior Definition)
- Se añaden validaciones, determinaciones y acciones
Comparativa
| Tipo | Propósito | Complejidad | Uso |
|---|---|---|---|
| Basic | Acceso a tablas | Baja | Base |
| Composite | Lógica y combinación | Media | Intermedio |
| Consumption | Exposición a UI/API | Alta | Final |
| Transactional | Procesamiento de datos | Alta | Apps modernas |
Errores comunes
Los distintos tipos de CDS Views no son solo una clasificación, son una forma de estructurar correctamente tu modelo de datos.
👉 Basic = datos
👉 Composite = lógica
👉 Consumption = consumo
Entender esta arquitectura te permite:
- Crear soluciones escalables
- Reutilizar lógica entre múltiples aplicaciones
- Integrarte correctamente con SAP Fiori y OData
Es uno de los pilares del desarrollo moderno en ABAP sobre HANA.


