如何修改|如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版

正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类。因此本教程也分为三大部分,分别进行介绍。本文是本教程的文章目录。
作者简介
Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SAP 中国技术大使。在长达 15 年的 SAP 标准产品开发生涯里,Jerry 曾经先后参与 SAP Business ByDesign, SAP CRM, SAP Cloud for Customer, SAP S/4HANA, SAP Commerce Cloud(电商云)等标准产品的研发工作。
Jerry 对 SAP OData 服务的开发,测试,发布,部署,测试,及基于各种不同 SAP 技术实现的 OData 服务的幕后技术实现细节和使用场合,均有着深入的研究。
基于 SEGW - Gateway Service Builder 的开发教程

  • 1. 在 SAP ABAP 事物码 SEGW 里创建 SAP OData 项目
  • 2. 在 SAP ABAP 系统对事物码 SEGW 创建的 OData 服务进行配置并测试
  • 3. SAP ABAP OData 服务诊断工具 /IWFND/ERROR_LOG 的使用方法
  • 4. SAP ABAP OData 服务 Data Provider Class 的 GET_ENTITYSET 方法实现指南
  • 5. SAP ABAP OData 服务如何支持 $filter (过滤)操作
  • 6. 使用 Postman 工具高效管理和测试 SAP ABAP OData 服务
  • 7. SAP ABAP OData 服务如何支持 $orderby (排序)操作
  • 8. SAP ABAP OData 服务如何支持创建(Create)操作
  • 9. SAP ABAP OData 服务如何支持删除(Delete)操作
  • 10. SAP ABAP OData 服务如何支持修改(Update)操作
  • 11. 使用 HTTP PUT, PATCH 以及 MERGE 请求消费 SAP ABAP OData 服务修改操作的实现及其区别
  • 12. SAP ABAP OData 服务如何支持 $select 有选择性地仅读取部分模型字段值
  • 13. SAP ABAP OData 服务的分页加载数据集的实现(Paging)
  • 14. 几种 SAP ABAP OData 服务的性能评估和测试工具介绍
  • 15. SAP ABAP OData 服务里 EntityType 和 EntitySet 的区别
  • 16. 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作
  • 更多文章正在写作中,敬请期待
使用 Restful ABAP Programming 编程模型(简称 RAP) 开发 OData 服务
  • 正在写作中,敬请期待
使用 SAP Cloud Application Programming 编程模型开发 OData 服务
  • 正在写作中,敬请期待
@[toc]
OData 服务里 $expand 操作的应用场景 本步骤到目前为止我们完成的 OData 模型创建,只有一个节点即 Book. 在实际的项目中,OData 模型比我们教程里出于教学目的而设计的模型复杂得多。
比如下图是 SAP CRM My Opportunities Fiori 应用的 OData 模型,可以看到模型根节点 Opportunity 能够导航到其他子节点,比如通过我们马上要在本步骤学习的 Navigation Properties(导航属性),从根节点 Opportunity 出发,可以导航到其他子节点。比如下图黄色的 Products 是导航属性之一,通过这个字段,可以导航到该 Opportunity 包含的所有 Products 数据。
如何修改|如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版
文章图片

这种 Opportunity 与 Products 的导航从属关系,也体现在 Fiori 应用的 UI 上。My Opportunity 这个 Fiori 应用,Opportunity 的明细页面有若干个 Tab 标签页,从第二个标签页开始,每个标签页对应着 Opportunity OData 模型的一个子节点。以下图 Products 标签页为例,其包含的数据,技术上就是通过 Opportunity 根节点,借助 Products 这个 Navigation Property,导航到 OData 模型子节点 Products 所获取的。
如何修改|如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版
文章图片

我们打开 Chrome 开发者工具 network 标签页,发现一个 HTTP 请求的 url:
GET Opportunities(guid'FA163EE5-6C3A-1ED6-9DC1-C10749724C39')?$expand=Competitors,Products,OpportunityLogSet HTTP/1.1
如何修改|如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版
文章图片

这个 url 里,不仅请求了 guid 为 FA163EE5-6C3A-1ED6-9DC1-C10749724C39的 Opportunity 根节点的数据,还通过 OData 协议定义的 $expand 操作,在同一个 HTTP 请求里,将其子节点比如 CompetitorsProducts 等数据一并取回。
由此可见,OData 协议 $expand,其作用就是,在同一个 HTTP 请求里将根节点连同 Navigation Property 指定的子节点数据一并取回,从而减少了为实现同样的数据读取目的而耗费的 HTTP 请求个数。
【如何修改|如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版】下面是我们自己的 OData 服务如何支持 $expand 操作的具体步骤。

    推荐阅读