Почему не выполняется пакетный запрос OData $ в моем приложении SAPUI5? - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть служба OData v2, работающая на Wildfly. Эта служба подключена к одной таблице на SQL сервере. Запрос метаданных и табличных данных этого сервиса в Postman прекрасно работает. Я считаю, что сама служба OData работает так, как и должна.

У меня есть приложение SAPUI5, которое указывает на службу (называемую SITEDATA) в дескрипторе:

"sap.app": {
    ...,
    "dataSources": {
        "SAM": {
            "uri": "http://localhost:8080/odata/SITEDATA/",
            "type": "OData",
            "settings": {
                "odataVersion": "2.0"
            }
        }
    },...

"sap.ui5": {
    ...,
    "models": {
        ...,
        "perDiem": {
            "dataSource": "SAM"
        }...

У меня есть очень простое представление, которое указывает на одну таблицу (которая также называется SITEDATA):

    <List 
    items="{ path : 'perDiem>/SITEDATA' }">
    ...
    <items>
        <ObjectListItem title="{perDiem>SITE_ID}">

Когда я запускаю приложение, я вижу, что приложение успешно запрашивает службу для:

  • http: //localhost:8080/odata/SITEDATA/$metadata
  • http: //localhost:8080/odata/SITEDATA/SITEDATA?$skip=0&$top=100

... а также множество других вещей. Но потом я получаю это:

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

Журнал WildFly показывает, что SITEDATA/$batch просто не существует. Однако localhost:8080/odata/SITEDATA/SITEDATA/$batch работает просто отлично.

И после изучения этой проблемы в течение нескольких дней похоже, что да, запрос $ batch должен выполняться на столе, а не на службе. Так что ошибка имеет смысл. Но я не могу найти способ исправить это.

Кто-нибудь испытывал эту проблему или видел что-нибудь, что мне нужно сделать, чтобы исправить это?

Ответы [ 2 ]

3 голосов
/ 18 февраля 2020

Можете ли вы успешно выполнить пакетный вызов $, который включает в себя вызов /SITEDATA конечной точки? Класс sap.ui.model.odata.v2.ODataModel инициализирует модель для использования пакетных вызовов по умолчанию. Вы можете отключить его, добавив "useBatch": false к определению модели в дескрипторе. Вы можете попробовать это, чтобы увидеть, если проблема в пакетном вызове.

1 голос
/ 18 февраля 2020

Если вы хотите избежать пакетных вызовов $ на ваш бэкэнд, я предлагаю вам явно объявить вашу модель как:

    "perDiem": {
        "type": "sap.ui.model.odata.v2.ODataModel",
        "settings": {
            "defaultOperationMode": "Server",
            "defaultBindingMode": "TwoWay",
            "defaultCountMode": "Inline",
            "useBatch": false
        },
        "dataSource": "SAM",
        "preload": true
    }
...