如何从自己的后端系统为 UI5 应用使用 OData 服务?

How can I consume OData services from my own backend system for a UI5 app?

提问人:Olli 提问时间:8/16/2021 最后编辑:Boghyon HoffmannOlli 更新时间:10/8/2021 访问量:5909

问:

我是 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 网关客户端对其进行了测试,它可以正常工作。

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

SAPUI5 UI5-工具 业务技术平台 SAP云连接器

评论

0赞 Boghyon Hoffmann 8/17/2021
你提到了“目的地”。我猜您使用的是 SAP BTP(以前称为 SCP)。如何配置目标和 Cloud Connector?您是在 Neo 环境还是 Cloud Foundry 上工作?您是否尝试过“使用 Cloud Connector 使用 ABAP 系统中的数据”任务?
0赞 Olli 8/23/2021
嗨,是的,我正在使用 SAP BTP 的试用帐户,以及 Cloud Foundry 环境。我配置了目标以及 Cloud Connector 与 ABAP 系统和 BTP 之间的连接,如您推荐的教程中所示,但我没有执行本教程中的最后一步 (developers.sap.com/tutorials/...为了完成这项工作,这最后一步是强制性的吗?当我在 SAP BTP 主控室中查看目标时,我还看到了我创建的 OData 服务,所以我认为它应该可以正常工作。

答:

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 应用程序中使用 例如:pathmanifest.json

"uri": "/sap/opu/odata/sap/ZDEMO_ODATA_PRACTICE_SRV",
0赞 grabz 10/8/2021 #2

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

  1. 在网关系统中调用 /N/IWFND/ERROR_LOG
  2. 在菜单中,选择“错误日志”-“>全局配置”
  3. 将日志级别设置为“完整”
  4. 重现错误
  5. 返回到错误日志并检查是否记录了错误。如果已记录,请选择它并单击“重播到网关客户端”,然后告诉我们方法、URL、请求标头和请求正文(如果有)+ 错误响应

痕迹

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

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