
SAP OData 开发实战教程 - 从入门到提高
文章平均质量分 93
本教程根据笔者在 SAP 研究院工作多年的实战经验,计划通过300多篇文章,深入介绍 SAP 三大主流的 OData 开发技术:SEGW,Restful ABAP Programming 模型和CAP开发模型,对 ABAP,Java和 Node.js 开发人员的 OData 开发入门和 提高都有帮助
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
汪子熙
Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SAP 中国技术大使。在长达16年的 SAP 产品开发生涯里,Jerry 曾经先后参与 SAP Business ByDesign,SAP CRM,SAP Cloud for Customer,SAP S/4HANA,SAP Commerce Cloud(电商云)等标准产品的研发工作。
Jerry 工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发, 对包括 SAP UI5 在内的多款 SAP 自研框架有深入的研究。
展开
-
SAP OData 开发从入门到提高教程的目录
正如本教程的开篇介绍文章 SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP 所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类。因此本教程也分为三大部分,分别进行介绍。本文是本教程的文章目录。.......................................原创 2022-07-13 22:00:55 · 2291 阅读 · 0 评论 -
SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)
在 SAP 产品里,存在多种 OData 服务的开发方式,其中最典型的三类,SEGW, RAP(Restful ABAP Programming) 和 CDP(Cloud Application Program),就是笔者在本教程里会为大家分享和讲解的内容。同笔者的另一个 SAP UI5 教程《SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员》一样,本教程笔者计划通过 300 篇以上的文章篇幅,分别介绍这三类 SAP 主流的 OData 服务开发技术。原创 2022-06-26 11:30:23 · 5629 阅读 · 15 评论 -
29. 如何通过 ABAP 代码给 SAP OData 元数据增添注解
我们先看下效果,在 MPC_EXT 类的 DEFINE 方法里编写 ABAP 代码之后,用 Postman 使用 url 访问 OData metadata,在返回的数据里,能看到我们用 ABAP 代码添加的自定义注解。你好,请问可以不可以在odata里面通过什么设置,从而自动给metadata.xml中加上注解,实现value help的功能,还是说每次需要在metadata.xml中修改?的词汇引用,然后为命名空间 com.sap.vocabularies.UI.v1 声明了一个别名。原创 2022-12-22 18:14:34 · 1008 阅读 · 0 评论 -
35. 如何自行查找出 SAP ABAP 标准的 OData 服务返回数据的后台数据库表和表字段名称
本文首先介绍了已知一个 SAP UI5 应用名称,如何通过 SAP 官方的 Apps Reference Library 工具,快速查找到其使用的 OData 服务名称。接着介绍了如何在 ABAP 调试器里,通过内置的 ABAP Trace 将调试器里执行的 ABAP 代码的明细全部记录下来,保存成能够在事务码 SAT 里查看的 Trace 文件。最后通过实际的例子,展示了如何在事务码 SAT 里查看 OData 服务运行时访问了哪些数据库表。原创 2023-04-13 23:59:56 · 281 阅读 · 0 评论 -
34. 如何使用 Postman 发送 SAP OData Batch 请求到 ABAP 后台服务器
本教程之前的文章,笔者曾经介绍了如何用 Postman 这个工具,高效管理和测试 SAP OData 服务:实际上,笔者之前在 SAP 中国研究院参加 SAP 标准 OData 服务开发时,用的也正是这个工具来对自己团队负责的 OData 服务实现进行测试。有朋友学习了我上面提到的文章后,提出疑问:> 可以通过 Postman 发送类型为 HTTP POST 且请求正文包含 Batch 请求的 OData 服务吗?当然可以,本文就来详细介绍这个需求如何在 Postman 里实现。原创 2023-04-03 11:28:01 · 500 阅读 · 0 评论 -
33. 如何找出 SAP Fiori Launchpad 里点击 tile 之后,读取业务数据调用的是哪个 SAP 后台系统的 OData 服务
笔者曾经写过一篇文章[SAP Fiori应用的三种部署方式],里面介绍了 SAP Fiori 应用部署的一种典型方式:Fiori 应用的载体即 SAP UI5 应用,部署在 Gateway 系统上,也称 Frontend Server(前台服务器)。当用户访问 Fiori Launchpad 代表 SAP UI5 应用的一个个 tile 之后,实际打开的是每个 tile 对应的 SAP UI5 应用,后者通过 OData 服务,从 SAP 后台服务器(Backend Server) 读取业务数据,执行业原创 2023-04-02 14:03:35 · 341 阅读 · 0 评论 -
32. 关于 Fiori 应用里 SAP UI5 前端开发和 SEGW 后台 OData 服务开发的工作量比值问题
本文通过笔者参与过的 SAP 标准 Fiori 应用 My Opportunities 的实际开发经历,向大家分享了 SAP Fiori 应用里 SAP UI5 前端开发和 SEGW 后台 OData 服务的开发工作量的评估准则。从文章叙述可以看出:(1) 前端开发的工作量取决于要开发的应用包含的页面个数,每个页面内的静态元素和动态元素的个数。(2) 后台 SEGW 开发的工作量,取决于 DPC_EXT 和 MPC_EXT 这两个类需要实现的方法个数,以及方法内需要调用的其他接口自开发的数量。原创 2023-02-08 17:16:20 · 394 阅读 · 0 评论 -
31. SAP UI5 Fiori 应用在启动时向 ABAP 后台发起的 OData 请求序列的顺序和作用分析
本文介绍了 SAP CRM Fiori 应用 My Opportunity 在启动时发送的 6 个 OData 请求(准确的说是7个,最后一个是读取 Account Logo 的二进制内容)的顺序以及每个 OData 请求完成的业务逻辑的明细。原创 2023-01-06 10:51:31 · 363 阅读 · 0 评论 -
30. 如何使用 SEGW 的 redefine 功能对 SAP 标准 OData 服务进行扩展
SAP 发布了很多标准的 Fiori 应用,可以通过笔者的文章里提到的进行浏览。比如 My Opportunities 就是 SAP CRM 领域的一个 Fiori 应用:下图是 Opportunity 明细页面的 Info 标签页:假设我们想在这些标准字段的末尾增添一个新字段 Created By,用来维护当前 Opportunity 的创建者。原创 2023-01-01 22:19:48 · 399 阅读 · 4 评论 -
28. 如何使用 SAP OData 服务向 ABAP 服务器上传文本格式和 Excel,PDF 等格式的文件
既然是支持文件上传,那么当然首先要在 ABAP 服务器开发一个自定义数据库表了,我们取名为 ZFILE. 这个数据库表的结构如下图,我们设计了文件内容,文件创建日期和时间,文件的二进制内容以及文件的 mime type 等五个字段。同时创建一个名为 ZTS_FILE 的 ABAP 结构,用来作为即将新建的 OData File 节点的数据结构。原创 2022-12-22 10:20:10 · 1008 阅读 · 9 评论 -
27. SAP OData 框架里的缓存(Cache)设计专题讲座
本文介绍 SAP ABAP OData 框架在前台服务器组件和后台服务器组件上的缓存设计的原理和开关。原创 2022-12-18 20:18:41 · 727 阅读 · 0 评论 -
26. SAP ABAP OData Gateway 框架里 /IWFND, /IWBEP 这些缩写代表了什么含义?
本教程前一篇文章《答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器》,我们深入了 SAP ABAP OData 框架来学习其元数据请求的执行明细。我们在文章里看到了不少以 `/IWFND/`, `/IWBEP` 这些命名空间或者说为前缀的 ABAP 类,那么这些 IW, FND, BEP 是什么含义,是什么单词的缩写呢?本文就来说一说。原创 2022-12-04 22:50:32 · 760 阅读 · 0 评论 -
25. 答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器
SAP Fiori 技术架构存在 ABAP Frontend 服务器(有时也称为 Gateway 服务器,前台服务器) 和 ABAP Backend(后台)服务器两个角色,其中 Frontend 服务器上主要安装 SAP Gateway 组件(实现类和数据库表的命名空间为 `/IWFND/`) 和 SAP UI5 应用部署到 ABAP 系统后生成的 BSP 应用,后台服务器主要包含了 OData 服务的 ABAP 实现(DPC, DPC_EXT, MPC, MPC_EXT)原创 2022-12-03 10:22:54 · 920 阅读 · 0 评论 -
2. 如何给在 SAP Business Application Studio 里开发的 OData 服务准备测试数据
本文在前一步骤的基础,通过在 csv 数据文件里维护数据,能够将这些数据加载到 SAP CAP 项目的 SQLite 内存数据库的 in-memory 存储层中,从而方便地在开发阶段对基于 CAP 定义的模型自动生成的 OData 服务进行测试。原创 2022-11-27 13:36:39 · 773 阅读 · 0 评论 -
1. SAP Business Application Studio 里创建一个基于 CAP 模型的最简单的 OData 服务
本文基于 SAP Cloud Application Programming 编程模型的 OData 服务开发教程的第一步,简述了 SAP Business Technology Platform 里 Business Application Studio 开发工具的打开方式,创建 Dev Space 以及 CAP 项目的创建步骤,以及如何通过 schema.cds 和 service.cds 分别创建 OData 模型和 OData 服务,最后通过 ports preview 打开 OData 服务预览页原创 2022-11-26 22:55:26 · 892 阅读 · 0 评论 -
24. SAP 标准产品里使用 OData 服务的一些细节分享
笔者在编写使用事物码 SEGW 开发 SAP OData 服务的系列步骤时,但凡遇到技术上一些疑难问题,喜欢去参照 SAP 标准产品里是如何使用 OData 服务的,不少问题都可以去参考 SAP 标准产品的 OData 服务实现细节来解决。因此本文记录笔者在编写本教程的过程中,曾经研究过的 SAP OData 服务实现的一些细节,把这些细节分享给大家,希望能起到参考作用。同时,教程也不断收到一些朋友在评论区留言,对于不少留言的回复,我也是拿 SAP 标准 OData 服务的实现作为论据来回复的。原创 2022-10-29 23:08:41 · 575 阅读 · 0 评论 -
23. 如何给 SAP ABAP SEGW 开发的 OData 服务添加 Access-Control-Allow-Origin 响应头
本文介绍 SAP ABAP SEGW 开发的 OData 服务,如何通过编程的方式,支持跨域访问 Cross-Origin Resource Sharing (CORS)原创 2022-10-06 21:25:30 · 680 阅读 · 2 评论 -
22. SAP ABAP OData 服务的 $count 和 $inlinecount 两个操作的区别
本教程首先介绍了 SAP CRM Fiori 应用里 $count 和 $inlinecount 两种 OData 操作的用例,接着通过图书管理 OData 服务的实现为例,介绍了这两种操作的实现细节,并比较了其异同。原创 2022-09-18 22:38:36 · 547 阅读 · 0 评论 -
21. SAP ABAP OData 服务的 $count 操作实现
理论上讲,只要 SAP ABAP OData 服务的 DPC_EXT 类正确实现了 GET_ENTITYSET 方法,那么无需为 $count 操作进行额外的实现,因为按照本文介绍,OData 框架会自动帮我们完成 $count 操作的实现。然而也不难发现,对于一个纯粹的 $count 请求,实际上并不需要从数据库表里读取完整的图书数据,这是对数据库资源和计算资源的浪费。本教程后续步骤,我们会介绍 $count 操作的正确实现,以及其和 $inlinecount 的区别。原创 2022-09-18 19:07:00 · 906 阅读 · 0 评论 -
20. 如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务
本步骤我们继续学习一个复杂一点的场景,我们期望用 ABAP 代码触发一个 OData 服务的修改操作,使用的 HTTP 请求类型为 PUT. 因为涉及到业务数据的修改操作,所以 OData 服务协议规定,在提交这个修改操作时,HTTP 请求的头部字段,需要包含一个名叫。请求 CSRF token 的代码,同前一步骤通过 ABAP 代码调用 OData 服务的读取操作相比,一个区别就是,我们需要在 HTTP 请求的头部字段里,增加一个名叫。原创 2022-09-06 09:50:00 · 753 阅读 · 0 评论 -
19. 如何使用 ABAP 程序消费 SAP ABAP OData 服务
本教程到目前为止,我们已经创建了一个支持增删改查的图书管理 OData 服务。本步骤介绍如何使用 ABAP 程序,来消费这个 OData 服务。假设我们开发 OData 服务的 SAP ABAP 系统是 A,我们可以在任何其他 ABAP 系统上编写本步骤介绍的 ABAP 程序,当然也可以直接在 A 系统上编写程序,访问 A 系统上的 OData 服务。在 ABAP 程序里,我们使用的 ABAP 工具类为 CL_HTTP_CLIENT, 这个工具类实现了 ICF Manager 提供的 HTTP接口。原创 2022-08-30 21:39:47 · 899 阅读 · 0 评论 -
18. SAP ABAP OData 服务嵌套创建功能的实现步骤(Create Deep)
什么是 SAP ABAP OData 服务的嵌套创建功能?在很多 SAP 帮助文档里,这个功能的英文描述是 Create Deep,或者 Deep Insert.我们通过一个现实的例子来讲解。下图是 SAP CRM Fiori 应用 My Opportunities, 我们可以看到,绿色区域代表 Opportunity OData 模型的根节点上创建的字段,而 OData 模型根节点下又包含了很多子节点,每个子节点分别对应下图 UI 一个 Tabstrip 的面板,比如 SalesArea,Produc原创 2022-08-30 12:41:28 · 661 阅读 · 0 评论 -
17. 如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据
这些模型增强是在 ABAP 服务器的事物码SEGW里完成的。我们在 SEGW 里创建了Authors这个 Navigation Properties,它通过名为BookAuthor的 Relationship,依据 Book 和 Author 两个 Entity Type 的book_guid字段,描述了这两个节点间的导航关系,即通过一个 Book 实例,我们期望通过$expand操作,读取到其所有的 Authors 数据:其中绿色的位于$expand=原创 2022-08-20 22:57:35 · 1194 阅读 · 0 评论 -
16. 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作
本步骤到目前为止我们完成的 OData 模型创建,只有一个节点即 Book. 在实际的项目中,OData 模型比我们教程里出于教学目的而设计的模型复杂得多。比如下图是 SAP CRM My Opportunities Fiori 应用的 OData 模型,可以看到模型根节点 Opportunity 能够导航到其他子节点,比如通过我们马上要在本步骤学习的 `Navigation Properties(导航属性)`,从根节点 Opportunity 出发,可以导航到其他子节点。比如下图黄色的 Product原创 2022-08-18 11:33:08 · 786 阅读 · 0 评论 -
15. SAP ABAP OData 服务里 EntityType 和 EntitySet 的区别
笔者刚刚学习 SAP ABAP OData 服务开发时,对 EntityType 和 EntitySet 这两个概念的区别,一直理解得似是而非,于是专门写一篇文章来强调。原创 2022-08-17 12:34:09 · 827 阅读 · 0 评论 -
14. 几种 SAP ABAP OData 服务的性能评估和测试工具介绍
本教程至此已经完成了 13 个章节的介绍,我们初步掌握了 SAP ABAP OData 服务在事物码 SEGW 中的建模,以及该模型对应的 DPC - Data Provider Class 针对 CRUD(增删改查),过滤($filter), 排序($orderby), 选择性返回字段($select), 以及分页读取数据集($skip 和 $top) 等操作的具体实现步骤。本步骤让我们暂时从 ABAP 编码中跳出来,分享几种实际 SAP ABAP OData 开发项目中,经常使用到的工具。...原创 2022-08-06 16:22:00 · 595 阅读 · 0 评论 -
13. SAP ABAP OData 服务的分页加载数据集的实现(Paging)
SAP UI5 应用的分页加载数据集,是一个极为重要的特性,需要 SAP UI5 前端和 OData 服务后端同时进行相应的开发工作,才能实现这个场景。所谓分页加载数据集,就是默认情况下,SAP UI5 应用在启动后的默认页面里,只显示指定数据的数据集,这个个数默认为 20,也可以在系统或者代码里进行配置。因此我们可以理解成,SAP UI5 应用初始化时,默认从数据库加载第 1 到第 20 条数据。当我们的滚动条向下滑动至屏幕底部时,会触发新一批数据的加载,读取第 21 条到第 40条记录。......原创 2022-08-06 11:21:38 · 930 阅读 · 0 评论 -
12. SAP ABAP OData 服务如何支持 $select 有选择性地仅读取部分模型字段值
本文介绍了 OData 消费者如何使用 $select, 仅仅读取 OData 模型上自己感兴趣的字段,同时也分享了 OData 服务器端对应的实现明细。通过 @select 有选择性的读取某些字段,能减少 ABAP 应用层和数据库层之间的数据传输,以及减少 ABAP 服务器通过网络传递到浏览器的数据量。 ......原创 2022-08-04 17:16:36 · 645 阅读 · 0 评论 -
11. 使用 HTTP PUT, PATCH 以及 MERGE 请求消费 SAP ABAP OData 服务修改操作的实现及其区别
使用 SAP ABAP SEGW 事物码实现 OData 服务的修改操作时,对于消费端通过 PATCH/MERGE 和 PUT 这三种不同类型的 HTTP 请求触发的场景,我们应该在 UPDATE_ENTITY 方法里用 IF 分支分别进行处理,原因就在于 GET_ENTITY 方法是否在修改处理逻辑的过程中被触发。......原创 2022-08-03 16:16:14 · 1145 阅读 · 0 评论 -
10. SAP ABAP OData 服务如何支持修改(Update)操作
本文介绍了如何实现 SAP ABAP OData 服务让其支持通过 HTTP PATCH 请求发送过来的 OData 修改请求。本教程后续步骤,会继续介绍如何让我们目前的 OData 服务,支持通过 HTTP PUT 请求和 MERGE 请求发送过来的修改请求。.........原创 2022-08-02 21:59:44 · 1088 阅读 · 3 评论 -
9. SAP ABAP OData 服务如何支持删除(Delete)操作
本文的内容分为两部分,首先介绍如何在 Postman 或者 SAP ABAP Gateway Client 里发送 HTTP DELETE 请求来调用 OData 服务的删除操作时,请求的 url 应该如何指定;其次介绍了如何基于 SAP ABAP OData 服务实现删除操作。......原创 2022-08-01 20:05:30 · 959 阅读 · 0 评论 -
8. SAP ABAP OData 服务如何支持创建(Create)操作
本文介绍 SAP ABAP OData 服务,如何实现创建(Create)操作。即通过 HTTP Post 的请求 Body,指定待创建的 OData 视图,部署了 OData Service 的服务器接收到这个请求后,成功处理完毕,返回 HTTP 201 Created 的状态码给 OData 消费者,表明 OData Entity 创建成功。......原创 2022-08-01 10:33:13 · 1094 阅读 · 3 评论 -
7. SAP ABAP OData 服务如何支持 $orderby (排序)操作
# 序言本文详细介绍了 SAP ABAP OData 服务如何支持 $orderby (排序)操作,以一个图书管理的 OData 服务实现为例,阐述了如何基于图书的名称和作者名称这两个字段进行排序操作。原创 2022-07-31 20:15:22 · 1124 阅读 · 2 评论 -
6. 使用 Postman 工具高效管理和测试 SAP ABAP OData 服务
本文介绍了 Postman 这个强大的 API 测试工具。当我们待测试的 SAP ABAP OData 服务需要通过 user Authentication 验证才能使用时,可以通过手动在 Postman HTTP 请求字段里添加 Authorization 信息,或者直接使用 Postman 的 auth 认证功能。同时还介绍了 Postman Environment 和 Variable 的使用方法,来维护与具体系统无关的 Postman 请求。...原创 2022-07-31 13:55:48 · 3152 阅读 · 0 评论 -
5. SAP ABAP OData 服务如何支持 $filter (过滤)操作
本文介绍 SAP ABAP OData 服务如何支持并实现 OData 协议的标准功能:$filter 即过滤操作。原创 2022-07-30 23:32:33 · 1152 阅读 · 0 评论 -
4. SAP ABAP OData 服务 Data Provider Class 的 GET_ENTITYSET 方法实现指南
首先第19行CREATEDATA创建er_entityset实例,指定其类型为zcl_zbook_manage_mpc=>tt_book,接着把这个引用映射到刚刚第五行定义的FIELD-SYMBOLS变量上去,这样的话,接下来我们对FIELD-SYMBOLS进行的操作,就会自动反应回引用变量er_entityset.因为我们可能在这个方法里,返回多条图书信息,所以需要用内表类型,而非单条记录的ts_book.ts_book代表一本图书的数据结构。......原创 2022-07-29 18:54:30 · 1221 阅读 · 5 评论 -
3. SAP ABAP OData 服务诊断工具 /IWFND/ERROR_LOG 的使用方法
OData 服务开发测试和部署到生产环境运行出现问题的时候,该如何分析和定位问题呢?本文介绍的 OData 服务诊断工具,/IWFND/ERROR_LOG,能帮助开发人员快速定位问题,找到错误根源。原创 2022-07-29 14:44:29 · 1112 阅读 · 0 评论 -
2. 在 SAP ABAP 系统对事物码 SEGW 创建的 OData 服务进行配置并测试
本教程介绍事物码 SEGW 里开发的 OData 服务,如何进行配置,使其可以在 SAP ABAP 系统里正常运行。原创 2022-07-14 13:40:27 · 2185 阅读 · 5 评论 -
1. 在 SAP ABAP 事物码 SEGW 里创建 SAP OData 项目
本文介绍如何在 SAP ABAP 事物码 SEGW 里创建 SEGW 项目,使用工具生成 Runtime 运行时需要的资源。原创 2022-07-13 17:28:35 · 2299 阅读 · 4 评论