为什么我的 SAPUI5 应用程序中的 OData $batch 请求失败?

Why is the OData $batch request in my SAPUI5 application failing?

我在 Wildfly 上有一个 OData v2 服务 运行ning。此服务连接到 SQL 服务器中的单个 table。在 Postman 中查询此服务的元数据和 table 数据效果很好。我相信 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"
        }...

我有一个非常简单的视图,它指向单个 table(也称为 SITEDATA):

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

当我 运行 应用程序时,我可以看到应用程序成功查询服务:

...以及其他一些东西。但后来我明白了:

WildFly 日志显示 SITEDATA/$batch 根本不存在。但是,localhost:8080/odata/SITEDATA/SITEDATA/$batch 工作得很好。

在研究这个问题几天后,看起来是的,$batch 请求应该在 table 上执行,而不是在服务上执行。所以这个错误是有道理的。但是我找不到任何方法来解决这个问题。

有没有人遇到过这个问题或看到我需要做些什么来纠正它?

您能否成功完成包含对 /SITEDATA 端点的调用的 $batch 调用? sap.ui.model.odata.v2.ODataModel class 初始化模型默认使用批量调用。您可以通过将 "useBatch": false 添加到描述符中的模型定义来禁用它。你可以试试看是不是批量调用的问题

如果您想避免 $batch 调用您的后端,我建议您将您的模型明确声明为:

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