提问人:Olli 提问时间:8/16/2021 最后编辑:Boghyon HoffmannOlli 更新时间:10/8/2021 访问量:5909
如何从自己的后端系统为 UI5 应用使用 OData 服务?
How can I consume OData services from my own backend system for a UI5 app?
问:
我是 SAP 的新手,目前正在编写 SAPUI5 文档的演练教程,并设法进入步骤 26 - 远程 OData 服务。
我还想从我为工作创建的后端系统中使用我自己的 OData 服务来尝试此步骤。我只是将教程中的 OData 服务替换为我自己的 OData 服务的服务 URL,并为 ABAP 服务器创建了一个目标。
我文件中的代码:manifest.json
"dataSources": {
"mainService": {
"uri": "server-url/sap/opu/odata/sap/ZDEMO_ODATA_PRACTICE_SRV",
"type": "OData",
"settings": {
"odataVersion": "2.0",
"localUri": "localService/metadata.xml"
}
}
}
"models": {
"": {
"dataSource": "mainService",
"preload": true
}
}
我想在一个简单的列表中显示数据库中的数据,并创建了以下视图:
<mvc:View controllerName="dummyproject.dummyproject.controller.App"
xmlns:mvc="sap.ui.core.mvc"
xmlns="sap.m"
displayBlock="true">
<!-- ... -->
<List items="{/PersonSet}">
<!-- ... -->
</List>
<!-- ... -->
</mvc:View>
连接正常,但我在屏幕上看到一个空列表,并显示以下错误消息:
[ODataMetadata] 元数据的初始加载失败
我已经看到错误指南表明此错误与同源策略有关,但我认为我可以通过创建目标来解决它。
我还在 SAP GUI 中检查了 OData 服务本身,并使用 SAP 网关客户端对其进行了测试,它可以正常工作。
有没有人知道如何处理这个错误,或者可能知道我可能做错了什么?
答:
1赞
Swadhin
8/24/2021
#1
我假设您正在使用 BAS / VSCode 作为您的前端 IDE。如果是这样,您可以使用中间件来避免 CORS。例如:ui5.yaml
specVersion: '2.4'
metadata:
name: 'swadhin.demo.northwind.employee.readonly'
type: application
server:
customMiddleware:
- name: fiori-tools-proxy
afterMiddleware: compression
configuration:
ignoreCertError: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
backend:
- path: /V2
url: https://services.odata.org
ui5:
path:
- /resources
- /test-resources
url: https://ui5.sap.com
version: # The UI5 version, for instance, 1.78.1. Empty means latest version
- name: fiori-tools-appreload
afterMiddleware: compression
configuration:
port: 35729
path: webapp
如果您使用的是旧的 SAP Web IDE,则可以使用反向代理:neo-app.json
{
"welcomeFile": "/webapp/test/flpSandbox.html",
"routes": [
{
"path": "/sap/opu/odata",
"target": {
"type": "destination",
"name": "DESTINATION",
"entryPath": "/sap/opu/odata"
},
"description": "DESTINATION"
}
]
}
确保在 UI5 应用程序中使用 例如:path
manifest.json
"uri": "/sap/opu/odata/sap/ZDEMO_ODATA_PRACTICE_SRV",
0赞
grabz
10/8/2021
#2
从网关的角度来看,您可以使用错误日志和有效负载跟踪来排查此类问题。但是,当您在“网络”选项卡以及 Chrome 开发者工具中看到失败的请求时,这些最有用(您没有提到是否这样做)。 错误日志:
- 在网关系统中调用 /N/IWFND/ERROR_LOG
- 在菜单中,选择“错误日志”-“>全局配置”
- 将日志级别设置为“完整”
- 救
- 重现错误
- 返回到错误日志并检查是否记录了错误。如果已记录,请选择它并单击“重播到网关客户端”,然后告诉我们方法、URL、请求标头和请求正文(如果有)+ 错误响应
痕迹
- 在网关系统中调用 /N/IWFND/TRACES
- 将用户设置为将在前端用于重现问题的用户(或设置为技术用户)
- 将跟踪级别设置为“完全”
- 选中 Payload Trace 复选框
- 重现问题
- 现在,SO很难告诉你如何处理这个结果,因为你应该导出结果并以某种方式将其发送给我们 - 但基本上你可以检查请求和响应,也可以将请求重放到网关客户端进行测试。
从UI5的角度来看,Swadhin的答案是正确的。
评论