问题描述
我使用UI5 Tooling构建了一个SAPUI5应用程序,现在我无法将其连接到OData服务。
由于OData服务的真实网址不是公开的,因此我们将其称为:
http://app99.sap.domain.com/sap/opu/odata/sap/Z_DOMAIN_SRV/
并在浏览器中打开它,最后添加$Metadata?sap-language=DE
可以正常工作-我得到了XML元数据文档。
这些是我尝试更改以连接到OData服务的文件:
- webapp
- manifest.json
- package.json
- ui5.yaml
在"dataSources"
中添加一个"models"
对象和一个manifest.json
对象
{
"sap.app": {
...
"dataSources": {
"oDataService": {
"uri": "/sap/opu/odata/sap/Z_DOMAIN_SRV/","type": "OData"
}
}
},"sap.ui5": {
...
"models": {
...
"": {
"dataSource": "oDataService","preload": true,"settings": {
"useBatch": false
}
}
},...
}
}
我还尝试将"uri"
的值更改为真实链接http://app99.sap.domain.com/sap/opu/odata/sap/Z_DOMAIN_SRV/
,但随后我会遇到一个Cross-Origin
错误:
所以我尝试通过将代理添加到我的package.json
中来设置代理:
{
...
"devDependencies": {
"ui5-middleware-simpleproxy": "^0.5.1"
},"ui5": {
"dependencies": [
"ui5-middleware-simpleproxy"
]
},...
}
...
server:
customMiddleware:
- name: ui5-middleware-simpleproxy
mountPath: /sap/opu/odata/sap/Z_DOMAIN_SRV
afterMiddleware: compression
configuration:
baseUri: "http://app99.sap.domain.com/sap/opu/odata/sap/Z_DOMAIN_SRV/"
现在希望http://localhost:8080/sap/opu/odata/sap/Z_DOMAIN_SRV/$Metadata?sap-language=DE
会变成http://app99.sap.domain.com/sap/opu/odata/sap/Z_DOMAIN_SRV/$Metadata?sap-language=DE
可以,但是事实并非如此-我只是从顶部的屏幕截图中得到了错误。
知道我想念的是什么吗?
我真的想使它与此ui5-middleware-simpleproxy一起使用,因为我不想手动启动两台服务器(UI5 Tooling的一台服务器和另一台用于代理的服务器)。目前,我只需要执行ui5 serve
,所有内容都可以立即使用。
解决方法
在ui5.yaml
中更改配置后,它就起作用了。
我不太了解mountPath
和baseUri
之间的关系以及这种关系为什么起作用,但是某些问题可以通过try and error来解决,例如在我的情况下:D
...
server:
customMiddleware:
- name: ui5-middleware-simpleproxy
mountPath: /sap/opu/odata/sap
afterMiddleware: compression
configuration:
baseUri: "http://app99.sap.domain.com/sap/opu/odata/sap"