为什么我的 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}">
当我 运行 应用程序时,我可以看到应用程序成功查询服务:
http: //localhost:8080/odata/SITEDATA/$metadata
http: //localhost:8080/odata/SITEDATA/SITEDATA?$skip=0&$top=100
...以及其他一些东西。但后来我明白了:
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
}
我在 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}">
当我 运行 应用程序时,我可以看到应用程序成功查询服务:
http: //localhost:8080/odata/SITEDATA/$metadata
http: //localhost:8080/odata/SITEDATA/SITEDATA?$skip=0&$top=100
...以及其他一些东西。但后来我明白了:
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
}