使用 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 预置系统相关联时,这才有效。