Los modelos OData forman la columna vertebral del enlace de datos en las aplicaciones SAPUI5, lo que permite a los desarrolladores conectar sin problemas interfaces de usuario con servicios backend OData.
Con la evolución de OData V2 a OData V4, SAP ha introducido capacidades mejoradas para manejar operaciones de datos, solicitudes por lotes y aprovechar el procesamiento del lado del servidor. En esta publicación, exploraremos cómo funciona la clase sap.ui.model.odata.v4.ODataModel, sus opciones de configuración y cómo los desarrolladores pueden usarla para consumir servicios OData V4 y OData V2 dentro de sus SAPUI5 proyectos.
La clase sap.ui.model.odata.v4.ODataModel proporciona la implementación del modelo, que está destinado al consumo de servicios OData V4. El modelo OData V4 admite las siguientes funcionalidades:
- Acceso de lectura
- Actualización de propiedades de entidades OData (en conjuntos de entidades y entidades contenidas) mediante enlace bidireccional
- Eliminación de entidades
- Invocación de operación (funciones y acciones)
- Agrupación de múltiples solicitudes de datos en una sola solicitud por lotes
- Filtrado y clasificación del lado del servidor
Obtenga más información sobre OData aquí.
Controles inteligentes frente a bloques de construcción
En lugar de controles inteligentes (biblioteca sap.ui.comp) o sap.ui.table.AnalyticalTable (para escenarios de tablas analíticas), la Elementos de SAP Fiori bloques de construcción (sap.fe.macros) debe usarse con el modelo OData V4 en SAPUI5. La tabla de árbol no se admite en combinación con el modelo OData V4 en SAPUI5.
El modelo OData V4 está diseñado principalmente para funcionar con servicios OData V4. Sin embargo, con este modelo también se pueden consumir servicios OData V2, pero para ello se requiere un adaptador, el cual es suministrado por SAP.
En las siguientes secciones, veremos cómo se puede crear una instancia del modelo OData V4 y también cómo podemos consumir servicios OData V2 utilizando el modelo OData V4.
Crear una instancia de modelo
Para crear una instancia de un modelo OData V4, solo se debe pasar un mapa como parámetro obligatorio. Este mapa debe contener al menos la serviceUrl del servicio. Todos los demás parámetros son opcionales. Este listado muestra un ejemplo de código en el que se crea una instancia de un modelo OData V4.
let oModel = new sap.ui.model.odata.v4.ODataModel({
serviceUrl: "/sap/opu/odata4/IWBEP/V4_SAMPLE/default/IWBEP/V4_GW_SAMPLE_
BASIC/0001/"
});
Si el servicio OData y el modelo OData se integraran a través del descriptor de la aplicación (manifiesto.json), que también es la forma más común, se parecería al código siguiente para este ejemplo.
{
"sap.app": {
"dataSources": {
"default": {
"uri": "/sap/opu/odata4/IWBEP/V4_SAMPLE/default/IWBEP/V4_GW_SAMPLE_
BASIC/0001/",
"type": "OData",
"settings": {
"odataVersion": "4.0"
}
}
}
},
"sap.ui5": {
"models": {
"": {
"dataSource": "default",
"settings": {}
}
}
}
}
La sintaxis del constructor del modelo OData V4 es la siguiente: new sap.ui.model. odata.v4.ODataModel(mParametros). Aquí, mParameters representa un mapa que puede contener las siguientes propiedades:
anotaciónURI
La URL (o una serie de URL) desde la que se cargarán los metadatos de la anotación. Los archivos de anotaciones especificados se integran en los metadatos del servicio en el orden en que aparecen, teniendo prioridad el último archivo cargado. Si las anotaciones se superponen, se sobrescriben. Sin embargo, si un archivo de anotaciones contiene otros elementos, como definiciones de tipos, que ya se han integrado, se producirá un error.
- Tipo: cuerda o cuerda[]
- Parámetro opcional
autoExpandSelect
Determina si el modelo OData genera automáticamente las opciones de consulta del sistema $select y $expand según la jerarquía de enlace. Los ajustes dinámicos a la jerarquía vinculante no se tienen en cuenta. Este parámetro, que está disponible desde la versión 1.47.0 y desde la versión 1.75.0, también permite la inclusión de propiedades de navegación en $select mediante rutas de propiedades.
- Tipo: booleano
- Parámetro opcional
solicitudes tempranas
Especifica si los siguientes recursos se solicitan lo antes posible:
- El documento raíz $metadata y los archivos de anotaciones asociados
- El token de seguridad
Aunque se recuperan el documento raíz $metadata y los archivos de anotaciones, solo se convierten de XML a notación de objetos JavaScript (JSON) si realmente son necesarios. Esta función ha sido compatible desde la versión 1.53.0. Tenga en cuenta que el valor predeterminado se puede cambiar a verdadero en versiones futuras. Para acelerar aún más el inicio de un componente SAPUI5, también puede utilizar el precarga del modelo manifiesto configuración.
- Tipo: booleano
- Parámetro opcional
ID de grupo
Determina cómo el modelo procesa las solicitudes por lotes: con $auto, las solicitudes del modelo se combinan en una única solicitud por lotes y se envían automáticamente antes de renderizarse. Con $direct, las solicitudes se envían inmediatamente y sin procesamiento por lotes. Todos los demás valores dan como resultado un error.
- Tipo: cuerda
- Parámetro opcional
propiedades del grupo
Define cómo se manejan las solicitudes por lotes para grupos de aplicaciones. Se trata de una asignación de ID de grupo de aplicaciones a un objeto que tiene exactamente una propiedad. Los valores permitidos para esta propiedad son API, Auto y Direct.
- Tipo: objeto
- Parámetro opcional
httpEncabezados
Define un mapa de encabezados HTTP, que deben agregarse a las solicitudes.
- Tipo: objeto
- Parámetro opcional
ignorarAnotacionesDeMetadatos
Especifica si todas las anotaciones de los metadatos del servicio y referencias entre servicios debe ser ignorado. Sólo se permite el valor verdadero. En este caso, sólo se tienen en cuenta las anotaciones de los archivos de anotaciones especificados en annotationURI. Este parámetro no se transfiere a los modelos de lista de valores.
- Tipo: booleano
- Parámetro opcional
metadatosUrlParams
Asignación adicional de parámetros de URL que se utilizan exclusivamente para solicitudes de $metadatos. Tenga en cuenta que el parámetro sap-context-token solo es relevante para los $metadatos maestros del servicio, pero no para las referencias entre servicios.
- Tipo: objeto
- Parámetro opcional
Versión odata
Define la versión del servicio OData. Los valores admitidos son 2,0 y 4,0.
- Tipo: cuerda
- Parámetro opcional
modo de operación
El modo de operación para filtrar y clasificar. A partir de la versión 1.39.0, se admite el modo de operación sap.ui.model.odata.OperationMode.Server. Todos los demás modos de operación, incluido el indefinido, generan un error si se especifican vFilters o vSorters o si se llama a sap.ui.model.odata.v4.ODataListBinding#filter o sap.ui.model.odata.v4.ODataListBinding# sort.
- Tipo: sap.ui.model.odata.OperationMode (valores contenidos: Cliente, Predeterminado, Servidor)
- Parámetro opcional
URL de servicio
La URL raíz del servicio del que se van a recuperar los datos. La parte de la ruta de la URL debe terminar con una barra de acuerdo con la especificación OData V4. Es posible agregar opciones de consulta OData personalizadas a la URL raíz del servicio, separadas por un ?, como /MyService/?custom=foo. Sin embargo, las opciones de consulta del sistema OData y los alias de parámetros generan un error.
- Tipo: cuerda
- Parámetro obligatorio
solicitudes compartidas
Especifica si todos los enlaces de lista para la misma ruta de recurso comparten sus datos para que solo se recuperen una vez; sólo se permite el valor verdadero. Además, sap.ui.model. BindingMode.OneWay está configurado como modo de enlace predeterminado, mientras que sap.ui.model.Binding-Mode.TwoWay no está permitido. Tenga en cuenta que esto hace que todos los enlaces sean de solo lectura, lo que puede resultar particularmente ventajoso para los modelos de lista de valores.
- Tipo: booleano
- Parámetro opcional
soporteReferencias
Especifica si el
- Tipo: booleano
- Parámetro opcional
actualizarId.de grupo
El ID de grupo utilizado para las solicitudes de actualización. Si no se especifica ningún ID de grupo específico, se utiliza el ID de mParameters.groupId. Los valores permitidos para los ID de grupo de actualización son indefinidos, $auto, $auto.*, $direct o un ID de grupo de aplicaciones.
- Tipo: cuerda
- Parámetro opcional
con credenciales
Especifica si se llama a XMLHttpRequest con la opción withCredentials para que las credenciales del usuario se incluyan en las solicitudes de origen cruzado desde el navegador.
- Tipo: booleano
- Parámetro opcional
Consumir servicios OData V2 utilizando el modelo OData V4
El marco SAPUI5 puede consumir servicios OData V2 a través de un modelo OData V4. El marco asume la tarea de convertir los metadatos y los datos del servicio V2 para que puedan usarse con el modelo V4. Para el desarrollador, básicamente no importa si detrás del modelo V4 hay un servicio V2 o V4. Sin embargo, como OData V4 admite algunas funcionalidades que no son compatibles con OData V2, ciertas funciones del modelo OData V4 no se pueden utilizar. Estas restricciones son las siguientes:
- En los modelos OData V4, OData V2 solo se puede utilizar para escenarios de lectura.
- Los servicios OData V2 deben proporcionar metadatos de tipo en línea en las respuestas, es decir, la propiedad __metadata.__type. Esta información es necesaria para convertir los datos entre los tipos OData V2 y OData V4.
- Se admiten opciones de consulta del sistema como $orderby, $filter y $count en el nivel superior, así como $expand y $select. Todas las demás opciones de consulta del sistema generarán una excepción.
- Aún no se admiten todas las anotaciones de OData V2.
Para utilizar un servicio OData V2 en un modelo OData V4, el servicio y el modelo deben integrarse a través del descriptor de la aplicación como se muestra a continuación en la lista. Es importante que la versión odata de la fuente de datos esté configurada en 2.0 y que se seleccione sap.ui.model.odata.v4.ODataModel como tipo de modelo. Además, se requiere al menos SAPUI5 versión 1.49.
{
"_version": "1.1.0",
"sap.app": {
"dataSources": {
"default": {
"uri": "
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
},
},
"sap.ui5": {
"dependencies": {
"minUI5Version": "1.49"
},
"models": {
"": {
"dataSource": "default",
"settings": {
"autoExpandSelect": false,
"operationMode": "Server",
"synchronizationMode": "None"
},
"type": "sap.ui.model.odata.v4.ODataModel"
}
}
}
}
Como los tipos disponibles en OData V4 y OData V2 difieren, es necesario realizar un mapeo entre los tipos de datos. Se admiten y asignan los siguientes tipos de OData V2:
- Los tipos Binary, Edm.Boolean, Edm.Byte, Edm.Decimal, Edm.Double, Edm.Guid, Edm.Int16, Edm.Int32, Edm.Int64, Edm.SByte y Edm.String existen en ambas versiones de OData y, por lo tanto, no se requiere asignación de tipos.
- DatetTime se asigna al tipo Edm.Date de OData V4 si la propiedad tiene la anotación OData V2 sap:display-format=»date». De lo contrario, se asigna a Edm.DateTimeOffset con la zona horaria UTC.
- La hora se asigna al tipo Edm.TimeOfDay de OData V4.
Algunos tipos de datos se representan de manera diferente en OData V2 y OData V4. El desarrollador de la aplicación debe utilizar únicamente los valores de OData V4. El marco garantiza que estos valores se conviertan correctamente antes de enviar la solicitud al backend (por ejemplo, como un valor de una propiedad clave) y después de recibir la respuesta del backend.
Conclusión
El modelo OData V4 aporta mayor flexibilidad, rendimiento y estandarización a las aplicaciones SAPUI5. Si bien está optimizado para los servicios OData V4, SAP proporciona un adaptador que permite la compatibilidad con versiones anteriores de OData V2, lo que ayuda a los desarrolladores a realizar la transición de proyectos existentes sin reescrituras importantes. Al comprender cómo configurar el modelo, definir parámetros y gestionar la integración de servicios, los desarrolladores pueden aprovechar al máximo el potente marco de enlace de datos de SAPUI5 para crear aplicaciones SAP Fiori escalables y eficientes.
Nota del editor: Esta publicación ha sido adaptada de secciones del libro. SAPUI5: la guía completa por René Glavanovits, Martín Koch, Daniel Kranczy Maximiliano Olzinger. René es un consultor y desarrollador de SAP que se especializa en las últimas tecnologías de SAP. Martin imparte formación para SAP y ha desarrollado cuatro cursos de formación sobre los temas de SAPUI5, SAP Fiori, integración en la nube y seguridad en la nube. Daniel es un desarrollador y consultor de software que se centra en el desarrollo full-stack. Maximilian es desarrollador y consultor de software.
Esta publicación se publicó originalmente el 11/2025.
