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:

Request URL: http://localhost:8080/odata/SITEDATA/$batch, Status Code: 500 Internal Server Error

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?

0
timothyadam 17 feb. 2020 a las 20:05

2 respuestas

La mejor respuesta

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
    }
1
Cmdd 18 feb. 2020 a las 11:07

¿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.

3
faust0ms 18 feb. 2020 a las 10:04