0

我是 SAP 新手,目前正在研究 SAPUI5 文档的演练教程,并设法进入第 26 步 -远程 OData 服务

我还想从我为工作创建的后端系统中使用我自己的 OData 服务来尝试这一步。我只是用我自己的 OData 服务的服务 URL 替换了教程中的 OData 服务,并为 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 Gateway 客户端对其进行了测试,它可以正常工作。

有谁知道如何处理这个错误,或者可能知道我可能做错了什么?

4

2 回答 2

1

我假设您使用 BAS / VSCode 作为您的前端 IDE。如果是这样,您可以使用ui5.yaml中间件来避免 CORS。例如:

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"
    }
  ]
}

确保path在您的 UI5 应用程序中使用 ,例如manifest.json

"uri": "/sap/opu/odata/sap/ZDEMO_ODATA_PRACTICE_SRV",
于 2021-08-24T15:56:28.730 回答
0

从网关的角度来看,您可以使用错误日志和有效负载跟踪解决此类问题。但是,当您在“网络”选项卡以及 Chrome 开发人员工具中看到失败的请求时,这些最有用(您没有提及是否这样做)。错误日志:

  1. 在您的网关系统中调用 /N/IWFND/ERROR_LOG
  2. 在菜单中,选择错误日志 -> 全局配置
  3. 将日志级别设置为完整
  4. 节省
  5. 重现错误
  6. 返回错误日志并检查是否记录了您的错误。如果已记录,选择它并单击 Replay to Gateway Client,然后让我们知道方法、URL、请求标头和请求正文(如果有)+ 错误响应

痕迹

  1. 在您的网关系统中调用 /N/IWFND/TRACES
  2. 将用户设置为您将在前端使用以重现问题的用户(或技术用户)
  3. 将跟踪级别设置为完整
  4. 选中有效负载跟踪复选框
  5. 重现问题
  6. 现在在这里,很难告诉您如何处理该结果,因为您应该导出结果并以某种方式将其发送给我们 - 但基本上您可以检查请求和响应,还可以将请求重播到网关客户端以在那里进行测试。

从 UI5 的角度来看,Swadhin 的答案是正确的。

于 2021-10-08T10:46:27.933 回答