关于 SAP ABAP OData 服务响应里的 d,results 和 __metadata 这几个字段的作用

简介: 关于 SAP ABAP OData 服务响应里的 d,results 和 __metadata 这几个字段的作用

我的知识星球里有朋友提问:

想把SAP的一个UI5 demo APP和后台的ODATA连起来。在测试过程中发现两者使用的json格式不一样,在ODATA返回的json格式中多了一些内容,具体可以看附件。对这个不是很明白,想知道这个怎么转换,或者怎么配置实现?

a3539bb56809ea8c1e097fd03ffcca1c_6f7db9271be853ab982c413819e6f7cd.png

从截图中我们能看到真实 OData 返回的数据里多了 __metadata 节点,里面包含了 id, uri 和 type 这几个字段。

在使用 ABAP 实现 SAP OData 服务时,返回的 JSON 数据中包含 __metadata 节点,这个节点的作用是提供实体的元数据信息,方便客户端应用程序使用和处理返回的数据。

__metadata 节点包含以下几个字段:

  • id:实体的唯一标识符,可以通过该标识符唯一定位实体。
  • uri:实体的 URI 地址,客户端应用程序可以通过该地址获取实体的详细信息。
  • type:实体的类型名称,表示该实体所属的类型,例如 Customer、Order 等。


通过 __metadata 节点提供的元数据信息,客户端应用程序可以了解到每个实体的具体信息,包括实体的唯一标识符、类型、URI 地址等,方便客户端应用程序对数据进行处理和使用。


另外,__metadata 节点还可以包含实体的 ETAG 值,该值用于在客户端应用程序和服务端之间进行数据同步时,判断数据是否发生变化。客户端应用程序可以使用该值与服务端进行比对,避免数据冲突和重复更新。


以上解答了截图中黄色的 __metadata 部分,回到这位朋友的问题,真实场景下的 OData 还有另一部分较之 mockdata 多出来的 JSON 数据节点,即下图绿色的 d 和 results 节点。


在使用 ABAP 实现 SAP OData 服务时,返回的 JSON 数据中包含字段 d 和字段 results,这两个字段分别用于表示 OData 服务返回的数据。

字段 d 表示数据的根节点,它是一个 JSON 对象,包含以下两个属性:

  • results:表示实体集合,它是一个 JSON 数组,包含 OData 服务返回的多个实体数据。
  • __count:表示实体集合的数量,它是一个整数,表示实体集合中包含的实体数量。


通过字段 d 和其包含的 results 属性,客户端应用程序可以获取到 OData 服务返回的实体集合数据,进而进行数据处理和使用。

需要注意的是,如果 OData 服务返回的是单个实体数据而不是实体集合数据,则字段 d 可以省略,直接返回该实体数据。

换言之,results 是基于 ABAP 实现的 SAP OData 服务返回响应的一个标准字段:


在笔者这篇教程里也有详细介绍。

因此如果想自己的 SAP UI5 应用在 mock 数据和真实的 OData 响应之间无缝切换而不需要修改代码,只需要在 mock 数据里也增添上 d 和 results 字段,让其层级结构和 ABAP OData 服务响应完全一致即可。


相关文章
|
5月前
|
安全 API 数据库
SAP ABAP OData 中 Function import 的概念介绍
SAP ABAP OData 中 Function import 的概念介绍
|
5月前
|
前端开发 数据库 开发者
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
|
5月前
|
JSON 应用服务中间件 API
使用 ABAP 代码消费 SAP 系统的 OData 服务
使用 ABAP 代码消费 SAP 系统的 OData 服务
|
5月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
|
5月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
|
5月前
|
Web App开发 数据采集 前端开发
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
|
5月前
|
XML 存储 数据格式
SAP UI5 控件 customData 属性的应用介绍
SAP UI5 控件 customData 属性的应用介绍
|
5月前
|
前端开发 JavaScript API
SAP UI5 sap.ui.require.toUrl 的作用介绍
SAP UI5 sap.ui.require.toUrl 的作用介绍
|
5月前
|
搜索推荐
如何让 SAP UI5 Smart Table 支持多项选择(Multiple-Selection)试读版
如何让 SAP UI5 Smart Table 支持多项选择(Multiple-Selection)试读版