Tengo un servicio OData v2 ejecutándose en Wildfly. Este servicio está conectado a una sola tabla en SQL Server. Consultar los metadatos y los datos de la tabla de este servicio en Postman funciona muy bien. Creo que el servicio OData en sí está funcionando como debería.
Tengo una aplicación SAPUI5 que apunta al servicio (llamado SITEDATA
) en el descriptor:
"sap.app": {
...,
"dataSources": {
"SAM": {
"uri": "http://localhost:8080/odata/SITEDATA/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
},...
"sap.ui5": {
...,
"models": {
...,
"perDiem": {
"dataSource": "SAM"
}...
Tengo una vista muy simple que apunta a la tabla única (que también se llama SITEDATA):
<List
items="{ path : 'perDiem>/SITEDATA' }">
...
<items>
<ObjectListItem title="{perDiem>SITE_ID}">
Cuando ejecuto la aplicación, puedo ver que la aplicación consulta con éxito el servicio para:
http: //localhost:8080/odata/SITEDATA/$metadata
http: //localhost:8080/odata/SITEDATA/SITEDATA?$skip=0&$top=100
... así como muchas otras cosas. Pero luego me sale esto:
El registro WildFly muestra que SITEDATA/$batch
simplemente no existe. Sin embargo, localhost:8080/odata/SITEDATA/SITEDATA/$batch
funciona bien.
Y después de investigar este problema durante días, parece que sí, la solicitud $ batch
debe realizarse en la mesa, no en el servicio. Entonces el error tiene sentido. Pero no puedo encontrar ninguna manera de arreglar esto.
¿Alguien ha experimentado este problema o ve algo que necesito hacer para corregirlo?
2 respuestas
Si desea evitar las llamadas $ batch a su backend, le sugiero que declare explícitamente su modelo como:
"perDiem": {
"type": "sap.ui.model.odata.v2.ODataModel",
"settings": {
"defaultOperationMode": "Server",
"defaultBindingMode": "TwoWay",
"defaultCountMode": "Inline",
"useBatch": false
},
"dataSource": "SAM",
"preload": true
}
¿Puede completar con éxito una llamada de $ batch que incluye una llamada al punto final /SITEDATA
? La clase sap.ui.model.odata.v2.ODataModel
inicializa el modelo para usar llamadas por lotes de forma predeterminada. Puede deshabilitarlo agregando "useBatch": false
a la definición de su modelo en el descriptor. Puede probar eso para ver si el problema es con la llamada por lotes.
Nuevas preguntas
odata
El Open Data Protocol (OData) es un protocolo estandarizado para construir API REST. OData v4 especifica muchas prácticas recomendadas para las API REST, incluido un formato JSON breve y orientado a hipermedia.