La extensión de metadatos MDE – Metadata Extension amplía una entidad CDS con anotaciones que no están definidas en el código fuente CDS de la definición de datos. Actualmente, las extensiones de metadatos solo se pueden crear para vistas de CDS.
Un prerrequisito para extender una entidad CDS con extensiones de metadatos es que la anotación Metadata.allowExtensions (con el valor predeterminado true) se especifique en el código fuente de la entidad CDS.
Una extensión de metadatos es un objeto CDS que se define y transporta en un código fuente separado de CDS. Este código fuente CDS solo se puede editar en las Herramientas de desarrollo ABAP (ADT) en Eclipse.
@Metadata.layer: #VALUE
ANNOTATE VIEW cds_entity WITH
[VARIANT variant]
[parameter_list]
{ [element_list] }[;]
Define una extensión de metadatos para un CDS. El objeto se crea en la carpeta Metadata Extensions. La extensión de metadatos agrega metadatos a la vista CDS en forma de anotaciones.
La vista CDS que se quiere ampliar debe contener la anotación Metadata.allowExtensions con el valor predeterminado true en su código fuente. Puede haber varias extensiones de metadatos CDS para la misma entidad CDS.
Antes de la instrucción ANNOTATE VIEW, la anotación @ Metadata.layer se debe especificar con uno de los posibles valores, para definir la capa de la extensión de metadatos. En el análisis de extensiones de metadatos, la capa determina la prioridad de los metadatos si hay múltiples extensiones de metadatos para la misma entidad CDS, que no está vinculada o está vinculada a la misma variante CDS.
- Ejemplo práctico
Creamos la vista CDS con el nombre ZB_11_GVALER añadiendo también la anotación que permite la extensión de los metadatos (@Metadata.allowExtensions: true). Luego cree el objeto Metadata Extensions con el nombre ZME_01_GVALER como extensión del CDS. En la anotación @Metadata asignamos la capa #INDUSTRY. En la lógica del objeto creado asignamos las siguientes anotaciones para los elementos Material y MaintenanceStatus:
Elemento | Anotación | Valor |
Material | @UI.dataPoint.title | MDE Industry Title – Material Code |
Material | @UI.dataPoint.description | MDE Industry Description – Material Code |
MaintenanceStatus | @UI.dataPoint.title | MDE Industry Title – Maintenance Status |
MaintenanceStatus | @UI.dataPoint.description | MDE Industry Description – Maintenance Status |
- CDS
- Metadata Extension
Lo que hemos conseguido es separar prácticamente la vista CDS de las anotaciones asignadas a los elementos o a los parámetros. Normalmente una entidad CDS contiene más anotaciones que SQL. Con esta separación también se ha conseguido separar la activación de los objetos, ya que la activación del Metadata Extension no supone la activación de la entidad CDS ni la comprobación de las referencias de utilización.
- Testear Metadata Extension
Para comprobar los datos que devuelven las anotaciones para los servicios Odata o SADL utilizamos en un programa ejecutable el método estático GET_ANNOS de la clase estándar CL_DD_DDL_ANNOTATION_SERVICE y mostramos en la salida las anotaciones asignadas a los elementos de la vista CDS creada.
Ejecutamos el programa:
Para obtener sólo las anotaciones de un elemento especifico realizamos una llamada al método estático GET_ANNOS_4_ELEMENT de la misma clase.
Ejecutamos el programa de nuevo:
Como podemos visualizar se han devuelto los valores de las anotaciones creadas en el objeto Metadata Extension.