首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

回答朋友提问:关于 SAP Business Accelerator Hub 上 API 的实现源代码问题

笔者从 2011年开始,在 CSDN 上将自己在 ABAP,SAP UI5,OData 和 Fiori Elements 这四个领域多年沉淀的开发经验,系统编写成了四套学习教程。

教程的很多篇文章的评论区,都有很多朋友积极和我互动,这些互动也给了我持续写作的灵感。

最近由于 CSDN 账号原因,这些教程暂时没办法访问,具体恢复时间我也在等待。

很多朋友为我出谋划策,提出了各种建议,比如更换平台,甚至自己搭建个人博客等等。这里表示感谢。

在账号恢复正常期间,我只能通过自己的知识星球,和知乎咨询,回答朋友们提出的各种问题。

我的知识星球,欢迎大家扫码加入。

最近有个朋友提问:

想请问老师, 像 SAP API 提供的这些接口,有办法查询到他原始的程式码吗?

因为平时在 SEGW 建立服务时,DPC_EXT 里面定义 CALL FUNCTION 都是直接找网路上的 BAPI (例如 ROUTING 建立找到的就是 BAPI_ROUTING_CREATE)

但是像修改 ROUTING 这部分就很多例子,无法找出 SAP 标准使用的是哪个 BAPI 或方式,所以想看看原始接口使用的是哪种方式?

简而言之,这位朋友想查阅 SAP Business Accelerator Hub 上公布的 API 的实现源代码。

我们首先打开这位朋友提供的链接,发现试图查看的 API,来自 SAP S/4HANA Cloud Public Edition.

下面这篇 SAP 社区提到,SAP S/4HANA Public Cloud, 没有对用户和二次开发伙伴,提供 SAPGUI 登录功能。

客户仅能使用浏览器通过 Fiori 应用访问系统,因此无法像 SAP 传统 On-Premise 产品一样,查看这些 API 的 ABAP 源代码。

以本文开头朋友提到的修改 Routing 的 API 为例。Routing 属于 Production Planning 模块里的修改生产工艺的范畴。

在 SAP S/4HANA Public Cloud 系统里,对应的 Fiori 应用名叫 Change Routing.

使用笔者之前的文章 SAP Fiori 应用索引大全,查询到 Change Routing 这个应用,其前端渲染,使用的仍然是 SAPGUI 套壳技术,即在浏览器里运行 SAPGUI.

这种把 SAPGUI 应用套上 Fiori 的壳,在浏览器里运行的技术,笔者之前的文章已经详细介绍过:

熟悉 SAPGUI 的老司机,能够从应用的外观,一眼就能识别出来。此外 url 里的片段 sap-ui-tech-hint=GUI,也是套壳标志之一。

那么在 SAP S/4HANA On-Premise 系统里,如何找到 Routing 数据修改时,执行的入口是哪一个 API 或者说 BAPI 呢?

办法有很多,笔者之前很多文章都用实际的例子介绍过:

其中介绍的 ST05 这个方法,可以说是一招鲜,吃遍天。

假设我在 SAP Production Planning 模块的 Change Routing 事务码,即 CA02 里,修改了某条工艺路线某个操作的描述信息:

从理论上讲,程序执行从先到后的顺序如下:

1. 入口函数 A 执行

2. A 调用函数 B,B 使用 CALL FUNCTION C IN UPDATING TASK, 调用 C

3. C 在单独的 Update 工作进程里,修改数据库表 D

4. 数据库表 D 的实际 UPDATE 操作。

那么只要我们通过某种方法,找到上面介绍的第四个序列即数据库表 D 的 UPDATE 位置,通过 ABAP 调试器里观察 Call Stack 信息,就能一并找到 1 到 3 处的代码位置。

因为 PP 是一个非常成熟的模块,每个事务码后台对应的数据库表名称,很容易就能查到。

比如上图的描述信息值,实际存在在数据库表 PLPO 的 LTXA1 字段里。

ST05 里开启 Trace 模式,然后把这个值随便修改一下,保存。查看 Trace 跟踪到的数据库表访问数据。

在数据库访问数据里,找到对 PLPO 表进行 UPDATE 操作的记录,然后点击工具栏上的 Call Hierarchy 按钮,就可以查看是哪个 ABAP 函数,触发了数据库表的这个修改操作。

我们找到的函数名称为 CP_VB_PLPO_POST,这是一个 Update Function Module,运行在 Update 工作进程上,唯一的职责就是更新数据库表,不包含其他的应用业务逻辑。

关于 Update 工作进程的介绍,可以参阅笔者之前的文章:一个 17 年 ABAP 老兵的建议:了解这些基础知识,对 ABAP 开发有百利而无一害

按照惯例,每一个 Update Function Module,都会有一个普通的 Function Module,后者通过关键字 CALL FUNCTION XXX IN UPDATING TASK 来调度前者在 Update 工作进程的执行。

使用 Where Used List 功能,就能找到所有调用该 Update Function Module 的代码位置,一共三处。

依次双击这三处,进入具体的调用位置,设置断点。

然后回到 CA02 即 Change Routing 事务码,修改描述信息,然后保存,断点触发。

从调试器里的上下文,就能观察到 Routing 被修改后,进行保存的 ABAP 代码调用栈了。

这也就是本文开头朋友询问的,查找 SAP Production Planning 提供的 Change Routing 事务码,调用到了哪些标准函数的方法。

大家如果有更多问题想和我探讨,欢迎加入知识星球提问:

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OR90gIq3Dmqhdfqe3IyfA3Jw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券