ABAP CDS HIERARCHY
ABAP CDS HIERARCHY – Las CDS Hierarchies en ABAP Core Data Services (CDS) permiten definir y manejar estructuras jerárquicas en una base de datos SAP HANA. Estas estructuras son ideales para representar datos en forma de árbol. Por ejemplo, pueden usarse para modelar estructuras organizacionales, listas de materiales o jerarquías de productos. Gracias a las CDS Hierarchies, es posible gestionar relaciones complejas entre elementos, lo que facilita el análisis y la consulta de datos. Además, ofrecen una mayor eficiencia al trabajar con grandes volúmenes de información jerárquica.
Imagina que tienes una empresa con una estructura organizativa definida. En ella, hay un jefe, seguido de varios gerentes, y debajo de cada gerente, varios empleados. Esta organización representa una jerarquía, ya que cada persona está conectada con otra en niveles superiores o inferiores. La jerarquía facilita la asignación de responsabilidades y la comunicación dentro de la empresa. Además, permite gestionar de manera eficiente los roles y la toma de decisiones en cada nivel. Así, la estructura jerárquica organiza a las personas de forma clara y funcional.
En bases de datos, muchas veces necesitamos representar este tipo de relaciones jerárquicas, como:
- Estructuras de empleados (jefe → gerentes → empleados).
- Listas de materiales (producto → componentes → subcomponentes).
- Categorías de productos (categoría principal → subcategorías → productos).
Aquí es donde las CDS Hierarchies en ABAP entran en juego: permiten modelar y consultar estas relaciones de una manera eficiente y optimizada dentro de SAP HANA.
¿Por qué usar ABAP CDS Hierarchy ?
Si guardamos los datos en una tabla tradicional, encontrar todos los empleados que dependen de un jefe puede ser complicado. Normalmente, necesitaríamos realizar múltiples consultas para obtener la información deseada. Además, tendríamos que recorrer los datos manualmente, lo cual es un proceso lento y propenso a errores. Sin embargo, con una estructura jerárquica adecuada, este proceso se simplifica considerablemente. Al organizar los datos de manera jerárquica, es más fácil identificar y acceder a los empleados que dependen de un jefe específico.
Las CDS Hierarchies hacen este proceso más fácil porque:
- Nos permiten definir una relación padre-hijo directamente en la base de datos.
- Optimizan la forma en que se consultan los datos jerárquicos.
- Hacen que el código ABAP sea más limpio y eficiente.
Ejemplo Sencillo: Organización de una Empresa
EMP_ID | NAME | MANAGER_ID |
---|---|---|
1 | Carlos | NULL |
2 | Ana | 1 |
3 | Pedro | 1 |
4 | Luis | 2 |
5 | Marta | 2 |
Aquí, Carlos (ID 1) es el jefe, Ana y Pedro trabajan para Carlos, y Luis y Marta trabajan para Ana.
Si queremos recuperar esta jerarquía en SAP, en lugar de hacer consultas complicadas con JOINs
y recursión, podemos definir una CDS Hierarchy que nos permite ver automáticamente quién es el jefe de quién.
Cómo se Define una CDS Hierarchy
En ABAP Core Data Services (CDS), se usa el comando DEFINE HIERARCHY
para crear una jerarquía a partir de una tabla existente.
Primero debemos definir una CDS base que contenga la relación entre empleado y manager.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Z_employee_am'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
serviceQuality: #X,
sizeCategory: #S,
dataClass: #MIXED
}
define view entity Z_employee_am
as select from zemployees_am
association[1..*] to Z_employee_am as _Manager on $projection.Manager = _Manager.Employee
{
key emp_id as Employee,
manager_id as Manager,
_Manager
}
Este código está creando una vista de entidad (entity view) en el contexto de SAP ABAP CDS (Core Data Services). Esta vista se utiliza para consultar y presentar datos de una base de datos en un formato estructurado. A continuación, vamos a desglosar el código para explicarlo en detalle. Primero, se define una estructura clara que permite acceder a los datos de manera eficiente. Además, se utilizan anotaciones para personalizar el comportamiento de la vista, como el acceso y la optimización.
Asociación (Association)
association[1..*] to Z_employee_am as _Manager on $projection.Manager = _Manager.Employee
- Propósito: Define una asociación entre la vista actual y la vista
Z_employee_am
. - Significado: La vista
Z_employee_am
está asociada consigo misma a través de la columnaManager
. [1..*]
: Esto indica que cada empleado (en la vistaZ_employee_am
) puede tener uno o más registros asociados (por ejemplo, varios empleados pueden estar bajo el mismo manager)._Manager
: Esta es la alias para la entidad asociada (en este caso, otro empleado que actúa como manager).$projection.Manager = _Manager.Employee
: Se establece la condición de la asociación, donde la columnaManager
de la vista se asocia con el campoEmployee
de la misma vista.
Este código define una vista de entidad llamada Z_employee_am, la cual selecciona datos de la tabla zemployees_am. Establece una relación jerárquica entre los empleados y sus managers. Además, utiliza anotaciones para configurar aspectos como el acceso, la descripción y la optimización de la vista. Posteriormente, proyecta campos clave como el emp_id y manager_id, permitiendo una mejor organización de los datos. También incluye una asociación de navegación que facilita acceder a los detalles del manager de cada empleado, mejorando la usabilidad.
Crear la Jerarquía en un ABAP CDS Hierarchy
Ahora, crea el CDS Hierarchy ZEMPLOYEE_HIERARCHY
basado en Z_employee_am
:
@EndUserText.label: 'Simple Hierarchy in ABAP CDS'
define hierarchy ZEMPLOYEE_HIERARCHY
as parent child hierarchy (
source Z_employee_am
child to parent association _Manager
siblings order by Employee ascending
multiple parents allowed
)
{
Employee,
Manager
}
Propiedades de la Jerarquía:
as parent child hierarchy (
- Propósito: Establece que esta jerarquía es de tipo “padre-hijo”, es decir, se utiliza para representar relaciones donde un “padre” (por ejemplo, un manager) tiene “hijos” (empleados).
- Significado: La jerarquía tiene una relación entre entidades, como empleados que reportan a un manager.
source Z_employee_am
- Propósito: Define la fuente de datos para la jerarquía.
- Significado: Los datos provienen de la vista o tabla
Z_employee_am
, que contiene información sobre los empleados y sus managers.
child to parent association _Manager
- Propósito: Define la relación entre los empleados (hijos) y sus managers (padres).
- Significado: La asociación se realiza utilizando la relación
_Manager
, que es la columna o campo en la vistaZ_employee_am
que vincula a un empleado con su manager.
siblings order by Employee ascending
- Propósito: Establece el orden en el que los “hermanos” (empleados bajo el mismo manager) deben ser organizados.
- Significado: Los empleados se ordenan alfabéticamente en orden ascendente según el campo
Employee
.
multiple parents allowed
- Propósito: Permite que un empleado tenga más de un manager.
- Significado: Un empleado puede estar asociado a varios managers (es decir, puede tener múltiples padres en la jerarquía).
Ventajas de las ABAP CDS Hierarchy
Uno de los beneficios más importantes de utilizar jerarquías en SAP ABAP CDS es la mejora del rendimiento. Al organizar los datos de manera jerárquica, se minimiza la necesidad de realizar consultas complejas y costosas. Las asociaciones y asociaciones de navegación optimizan las consultas, lo que se traduce en tiempos de respuesta más rápidos y un sistema más eficiente.
Documentación Oficial SAP
Para más información visita el siguiente enlace.