En la entrada anterior de esta serie de artículos sobre OData ‘OData y SAP Gateway – II – Publicar un servicio OData en SAP‘ creamos un servicio muy básico de consulta de Businsess Partners, posteriormente añadimos la recuperación de Subentidades. Pero ahora toca para un poco, y saber las opciones de configuración del servicio Gateway. Se viene artículo denso, meramente informativo, pero necesario para sentar las bases.
Serie de Artículos sobre OData
Este artículo pertenece a una serie de artículos que se van complementando poco a poco como itinerario de conocimiento:
- OData y SAP Gateway
- OData y SAP Gateway – II – Publicar un servicio OData en SAP
- OData y SAP Gateway – III – Recuperar Subentidades
- OData y SAP Gateway – IV – Opciones sobre Entidades y Campos (Este artículo)
- OData y SAP Gateway – V – Documentar y Probar con OpenAPI
Opciones a nivel Modelo de Datos
Tenemos diversas opciones cuando estamos visualizando el modelo de datos, esto nos da una lista de Entidades y, para cada una de ellas, tenemos diversas opciones de configuración.
Donde tenemos las opciones de configuración:
- Name: Indica el nombre de la entidad.
- ABAP Structure: La estructura ABAP subyacente que define los campos y tipos de datos de la entidad. Utilizada para mapear los datos de la entidad a una estructura ABAP correspondiente en el backend.
- Base Type: El tipo base del cual hereda la entidad, esto es utilizado en escenarios de herencia, donde una entidad puede extender otra entidad.
- Is Abstract: Indicador de si la entidad es abstracta. Las entidades abstractas no pueden instanciarse directamente y se utilizan como base para otras entidades.
- Label: El nombre legible o etiqueta de la entidad sirve para darle un nombre más amigable para los usuarios finales.
- Label Editor: Herramienta para editar la etiqueta.
- Semantics: Define el propósito de los datos contenidos en la entidad, ofreciendo un contexto adicional para entender cómo se deben utilizar e interpretar esos datos. Algunos ejemplos comunes de semántica en las entidades podrían ser CRM, HR, Clientes, Transaccional, etc. Estos términos ayudan a categorizar y definir el contexto de los datos. La ayuda del campo habla de propiedad y los valores posibles también, pero es un error, a nivel de entidad se usa para categorizar el propósito,
- Thing Type: Checkbox que se selecciona para indicar si un tipo de entidad es una «cosa» (thing) en lugar de un objeto subordinado. En nuestro ejemplo el «objeto» serían los BusinesPartner y los objetos subordinados las entidades subordinadas.
- Media: Especifica que el objeto de datos pertenece a una colección de medios. Este campo se utiliza para indicar que el tipo de entidad tiene un recurso de medios. Por ejemplo si tuviesemos una entidad Attachment.
- As Author Property: No es necesario, es parte del estándar AtomPub, que se utiliza para publicar y editar recursos en un servidor web, el servidor se encarga de completar el campo atom:author utilizando la información del usuario autenticado.
- As ETag Property: Tampoco es necesario, se refiere a una propiedad en una entidad que se utiliza para la gestión de la concurrencia optimista en SAP Gateway. ETag (Entidad Tag) es un mecanismo que ayuda a prevenir conflictos durante actualizaciones concurrentes de los datos. El atributo ETag no necesita ser proporcionado por el cliente, ya que el servidor genera y gestiona este valor automáticamente. El ETag se utiliza para asegurar que las operaciones de actualización y eliminación solo se realicen si la versión de la entidad no ha cambiado desde que fue leída por el cliente.
- As Published Property: El campo As Published Property se refiere a una propiedad específica en una entidad que se utiliza para almacenar la marca de tiempo (fecha y/o hora) en que el elemento fue publicado por primera vez. Este es un elemento del Protocolo de Publicación Atom (AtomPub) llamado atom:published
- As Title Property: Se refiere a un elemento en el Protocolo de Publicación Atom (AtomPub) llamado atom:title. Indicará la propiedad que usaremos como texto que transmite un encabezado legible por humanos (título) para un nuevo miembro de la colección.
- As Updated Property: Es como «As Published Property» pero con la fecha/hora de ultima actualización. Es un elemento del Protocolo de Publicación Atom (AtomPub) llamado atom:updated.
Opciones por entidad y propiedades
Si pulsamos en una entidad, y vamos a ver sus propiedades, vemos que, por cada campo, tenemos varias opciones para ser configuradas. Estas opciones serán las que marquen el comportamiento de dicho campo en dicha entidad en el Servicio OData.
Las opciones de configuración son:
- Name: Nombre de la propiedad o campo de la entidad, el identificador único del campo dentro de la entidad.
- Is Key: Marca de si la propiedad es clave en la entidad, indica si el campo es una clave primaria para la entidad. Esto es importante para el uso del servicio y para relacionar dicha entidad con otras subordinadas.
- Edm. Core Type: Tipo de datos, el tipo de datos en el modelo de datos de entidad (EDM), como
Edm.String,Edm.Int32, etc. - Precision: Precisión del campo, número de dígitos totales que el campo puede tener.
- Scale: Escala del campo, número de dígitos que el campo puede tener a la derecha del punto decimal.
- Max Length: Longitud máxima, la longitud máxima del campo, aplicable principalmente a tipos de datos string.
- Unit Property Name: Nombre de la propiedad de unidad, campo relacionado que especifica la unidad de medida para este campo (por ejemplo, metros, kilogramos).
- Creatable: Indicador de que la propiedad puede ser Creada, permite la asignación de valor a esta propiedad en solicitudes de creación (POST).
- Updatable: Indicador de que la propiedad puede ser Actualizada, permite la asignación de valor a esta propiedad en solicitudes de actualización (PUT/PATCH).
- Sortable: Indicador de que la propiedad puede ser Ordenada, permite que este campo sea utilizado en sentencias
$orderbypara ordenar datos. - Nullable: Indicador de que la propiedad puede ser Nula, permite que esta propiedad tenga un valor nulo. Por ejemplo, algo que da muchas veces error son las fechas a ‘00000000’, para que funcione correctamente tenemos que poner este indicador.
- Filterable: Indicador de que la propiedad puede ser Filtrada, permite que esta propiedad sea utilizada en sentencias
$filterpara filtrar datos. - Label: Etiqueta descriptiva de la propiedad, un nombre descriptivo utilizado en interfaces de usuario o documentación.
- Label Editor: Editor de la etiqueta de la propiedad, herramienta para editar y gestionar el texto de la etiqueta, incluyendo referencias a textos traducibles.
- Complex Type Name: Nombre del tipo complejo, si la propiedad es de un tipo complejo, este es el nombre del tipo complejo.
- ABAP Field Name: Nombre del campo en ABAP, el nombre del campo correspondiente en ABAP.
- ABAP Type: Tipo de datos en ABAP, el tipo de datos ABAP correspondiente (por ejemplo,
CHAR,NUMC,DATS). - Semantics: Semántica del campo, describe el propósito o la función del campo en un contexto más amplio, proporcionando significado adicional sobre su interpretación y uso.
Opciones por EntitySet
A nivel de EntitySet podemos elegir el comportamiento de cada entidad. Tendremos las siguientes opciones:
- Name: Nombre del EntitySet. El nombre del conjunto de entidades utilizado en las URIs para acceder a las entidades del conjunto.
- Entity Type Name: Nombre de la Entidad en la que se basa el EntitySet. El nombre del tipo de entidad que define la estructura y las propiedades de las entidades dentro del conjunto.
- Label: Etiqueta descriptiva del EntitySet. Un nombre descriptivo utilizado en interfaces de usuario o documentación.
- Label Text Reference Editor: Editor de referencia de texto de la etiqueta. Herramienta para editar y gestionar el texto de la etiqueta, incluyendo referencias a textos traducibles.
- Semantics: Semántica del EntitySet. Describe el propósito o la función del EntitySet en un contexto más amplio, proporcionando significado adicional sobre su interpretación y uso.
Opciones de capacidades y comportamiento de las Entidades OData
Sobre el resto de checks de este menú vamos a detenernos un poco más, puesto que son las opciones que marcarán el comportamiento y capacidades de nuestras entidades dentro de un proyecto OData. Estas opciones permiten una gran flexibilidad y control sobre cómo se pueden gestionar y acceder a los datos a través de servicios OData en SAP Gateway, mejorando tanto la seguridad como el rendimiento de las aplicaciones que consumen estos servicios.
Creatable
Indicador de que la entidad puede ser Creada.
- Descripción: Cuando esta opción está seleccionada, indica que los clientes pueden crear nuevas entidades en el conjunto de entidades utilizando el método HTTP POST.
- Uso: Permite operaciones de creación de entidades. Esto es útil cuando el servicio OData debe permitir la inserción de nuevos registros en la base de datos.
Updatable
Indicador de que la entidad puede ser Actualizada.
- Descripción: Permite que las entidades dentro del conjunto sean actualizables utilizando el método HTTP PUT o PATCH.
- Uso: Esencial para permitir modificaciones a los registros existentes en el conjunto de entidades. Los clientes pueden actualizar una entidad específica mediante su clave primaria.
Deletable
Indicador de que la entidad puede ser Eliminada.
- Descripción: Permite que las entidades dentro del conjunto sean eliminadas utilizando el método HTTP DELETE.
- Uso: Facilita la eliminación de registros específicos del conjunto de entidades. Esto es útil para gestionar la vida útil de los datos.
Pageable
Indicador de que la entidad admite paginación.
- Descripción: Permite la paginación de los resultados de una consulta OData utilizando los parámetros
$skipy$top. - Uso: Mejora el rendimiento y la usabilidad cuando se trabaja con grandes volúmenes de datos. Los clientes pueden solicitar subconjuntos de datos en cada llamada, lo que facilita la gestión de grandes conjuntos de datos.
Addressable
Indicador de que la entidad es direccionable.
- Descripción: Permite que las entidades sean accesibles directamente mediante su clave primaria en la URI.
- Uso: Los clientes pueden acceder a una entidad específica utilizando su URI, facilitando operaciones CRUD directas sobre entidades individuales.
Searchable
Indicador de que la entidad puede ser buscada.
- Descripción: Permite realizar búsquedas en las entidades utilizando el parámetro de consulta
$search. - Uso: Facilita la búsqueda de entidades que contienen ciertos términos, mejorando la experiencia del usuario al permitir consultas más complejas.
Subscribable
Indicador de que la entidad puede ser suscrita.
- Descripción: Permite que los clientes se suscriban a cambios en el conjunto de entidades.
- Uso: Útil para aplicaciones que necesitan notificaciones o actualizaciones en tiempo real cuando ocurren cambios en los datos.
Requires Filter
Indicador de que se requiere un filtro para acceder a la entidad.
- Descripción: Obliga a que todas las consultas al conjunto de entidades incluyan un parámetro de filtro (
$filter). - Uso: Restringe el acceso directo a las entidades, asegurando que las consultas sean más específicas y potencialmente mejorando el rendimiento al reducir el volumen de datos devueltos en cada consulta.
Opciones aplicadas en nuestro proyecto Gateway
Pues para nuestro proyecto Gateway ZODATA_TEST_BP, en base a los apartados de este artículo se han aplicado las siguientes opciones:
Opciones a nivel Modelo de Datos
A nivel de Modelo de Datos, es decir, de Entidad, la configuración aplicada es la siguiente:

Opciones por entidad y propiedades
Por Entidad, se configuran sus propiedades de la siguiente forma:
BusinessPartners
Por ahora no se puede crear (no lo hemos implementado), no se puede actualizar (idem) por lo que las propiedades no tiene sentido que las marquemos como Creatable o Updatabe. Marcamos todos los campos con la posibilidad de hacer SORT, eso podremos afinarlo cuando afinemos el método de GetEntitySet, por ahora ninguno puede ser nulo (que no es lo mismo que vacío), y marcamos para filtrar todos menos el nombre completo.

Address
Lo mismo de la creación y actualización. Marcamos como Nullable las fechas porque si no da un error de que la fecha no puede ser «» y marcamos los campos por los que pensamos ordenar y filtrar.

IdentNumbers
Lo mismo de la creación y actualización. Lo mismo de las fechas Nullable y los filtros.

Relation
Igual que las anteriores.

Roles
Igual que las anteriores.

Opciones por EntitySet
A nivel Set de Entidad, EntitySet, como por ahora no tenemos la actualización ni creación, le ponemos la paginación y la búsqueda y que la entidad de BusinessPartner requiere filtro.

En conclusión
Nuestro proyecto está en una fase muy inicial, solo es de búsqueda y recuperación de datos, por lo tanto muchas de estas opciones directamente no aplican. Pero creo que hemos hecho un repaso exhaustivo de las posibilidades, a nivel configuración de un proyecto Gateway. Importante, he dicho posibilidades a nivel configuración, la lógica la tendremos que implementar en la clase Z*DPC_EXT correspondiente.


