使用 OData 服务时加载资源失败
Failed to load resource while consuming OData service
大家好我需要一些帮助,我已经有了我的 odata 服务 运行 并且我有一个 url 这样的:
https://myclient:port/sap/opu/odata/SAP/servicename_SRV/MaterialListSet
这是我的配置,我认为是错误的。
manifest.json
"dataSources": {
"invoiceRemote": {
"uri": "https://myclient:port/sap/opu/odata/SAP/servicename_SRV/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
}
.
.
.
"models": {
...
"invoice": {
"dataSource": "invoiceRemote"
}
}
我收到这两个错误:
Failed to load resource: the server responded with a status of 401 (Unauthorized)
和
Failed to load https://client:port/sap/opu/odata/SAP/odata_SRV/$metadata?sap-language=ES: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:port' is therefore not allowed access. The response had HTTP status code 401.
这条线不好;
"uri": "https://myclient:port/sap/opu/odata/SAP/servicename_SRV/",
这是因为你必须使用相对 URL,所以应该是
"uri": "/sap/opu/odata/SAP/servicename_SRV/",
背后的原因很简单:您的客户肯定拥有不止一个 SAP Gateway/Fiori 系统。因此,您不应该对开发或生产系统的域进行硬编码。
假设您最终会将 UI5 应用程序部署到 SAP NetWeaver 系统,那么该系统将同时包含 oData 服务和 UI5 应用程序。由于它们将托管在同一台服务器上,因此相对 URL 也能正常工作。
但是在 Web IDE 中,这还不够,因为如果您使用相对 URL,那么 SAP Cloud/Web IDE 会理解您正在尝试访问云中的资源。
这就是为什么您应该 add/change 您的 neo-app.json file 在您的 UI5 项目中。如果您已经拥有它,而不仅仅是更改它。如果您的项目中还没有这个文件,您可以通过在项目名称中 right-clicking 并选择 New >> HTML5 Application Descriptor 轻松创建它。这将在项目的根目录中创建此文件。 (通常存在于 webapp 文件夹之外)。
最后,您必须在此 neo-app.json 文件中添加一个路由,如下所示
{
"path": "/sap/opu/odata",
"target": {
"type": "destination",
"name": "NAME_OF_YOUR_SAP_CLOUD_DESTINATION",
"entryPath": "/sap/opu/odata"
},
"description": "SAP Gateway System"
}
这告诉 Web IDE 将每个请求转发到指定目的地下的不同系统。
仅当您已 SAP Cloud Connector 将您的 SAP Cloud 帐户与您的 SAP NetWeaver 预置系统相关联时,这才有效。
大家好我需要一些帮助,我已经有了我的 odata 服务 运行 并且我有一个 url 这样的:
https://myclient:port/sap/opu/odata/SAP/servicename_SRV/MaterialListSet
这是我的配置,我认为是错误的。
manifest.json
"dataSources": {
"invoiceRemote": {
"uri": "https://myclient:port/sap/opu/odata/SAP/servicename_SRV/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
}
.
.
.
"models": {
...
"invoice": {
"dataSource": "invoiceRemote"
}
}
我收到这两个错误:
Failed to load resource: the server responded with a status of 401 (Unauthorized)
和
Failed to load https://client:port/sap/opu/odata/SAP/odata_SRV/$metadata?sap-language=ES: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:port' is therefore not allowed access. The response had HTTP status code 401.
这条线不好;
"uri": "https://myclient:port/sap/opu/odata/SAP/servicename_SRV/",
这是因为你必须使用相对 URL,所以应该是
"uri": "/sap/opu/odata/SAP/servicename_SRV/",
背后的原因很简单:您的客户肯定拥有不止一个 SAP Gateway/Fiori 系统。因此,您不应该对开发或生产系统的域进行硬编码。
假设您最终会将 UI5 应用程序部署到 SAP NetWeaver 系统,那么该系统将同时包含 oData 服务和 UI5 应用程序。由于它们将托管在同一台服务器上,因此相对 URL 也能正常工作。
但是在 Web IDE 中,这还不够,因为如果您使用相对 URL,那么 SAP Cloud/Web IDE 会理解您正在尝试访问云中的资源。
这就是为什么您应该 add/change 您的 neo-app.json file 在您的 UI5 项目中。如果您已经拥有它,而不仅仅是更改它。如果您的项目中还没有这个文件,您可以通过在项目名称中 right-clicking 并选择 New >> HTML5 Application Descriptor 轻松创建它。这将在项目的根目录中创建此文件。 (通常存在于 webapp 文件夹之外)。
最后,您必须在此 neo-app.json 文件中添加一个路由,如下所示
{
"path": "/sap/opu/odata",
"target": {
"type": "destination",
"name": "NAME_OF_YOUR_SAP_CLOUD_DESTINATION",
"entryPath": "/sap/opu/odata"
},
"description": "SAP Gateway System"
}
这告诉 Web IDE 将每个请求转发到指定目的地下的不同系统。
仅当您已 SAP Cloud Connector 将您的 SAP Cloud 帐户与您的 SAP NetWeaver 预置系统相关联时,这才有效。