如何自行查找出 SAP ABAP 标准的 OData 服务返回数据的后台数据库表和表字段名称

发布时间 2023-04-16 17:11:08作者: JerryWang_汪子熙

笔者的知识星球有朋友提问,询问如何查找一个 SAP ABAP OData 服务,暴露出的字段到底来自 SAP ABAP 后台哪些数据库表的哪些字段。

要回答这个问题,需要综合运用到我们过去学过的包括 ABAP 后台程序单步调试的知识。

本文我们还是通过之前使用过的 SAP CRM 标准的 Fiori 应用,My Accounts 作为例子进行讲解。

在 Fiori Launchpad 里点击 My Accounts tile 之后,能看到 SAP OData 服务返回的 Accounts 数据列表。

点击其中一个行项目,就能进入 Accounts 的明细页面。这里在 SAP UI5 应用界面上看到的字段,都是该应用对应的 OData 服务从 SAP 后台业务服务器取回的。

在实际的 SAP 集成项目中,我们有时候会需要知道这些 OData 返回字段值,到底是存储在哪些数据库表的哪些字段中。这些信息作为系统集成二次开发的理论前提。

本教程前一篇文章,已经介绍了如何通过 Chrome 开发者工具,自行找到该 SAP UI5 应用使用的 OData 服务的名称,以及运行时部署在 SAP Gateway 系统上的 SAP UI5 应用,发出的 OData 服务,到底被哪一台 SAP 后台服务器接收并处理。

本文首先介绍另一种方式,不通过 Chrome 开发者工具,即可直接找到 My Accounts 应用使用的 OData 服务名称。

按照笔者这篇教程介绍的步骤,即可轻松找到 OData 服务的名称为 CRM_BUPA_ODATA.

并且能够快速获得下面这张列表,即 OData CRM_BUPA_ODATA 在运行时访问的 SAP 数据库表的清单。

从清单里我们很容易找到 Fiori UI 上的 Account 字段,对应数据库表里哪些存储字段。

上图第三列 Accesses 列表示该行表示的数据库表在整个执行过程中,被访问的次数,第四列 Net 代表访问该数据库表耗费的时间,单位是微秒。Short Description 即数据库表的描述信息,Package 即所在 ABAP 开发包的名称。

从上图描述信息能够看出,BUT000 这张表存储了 Business Partner 数据模型的抬头信息。本文讨论的 My Accounts 应用里显示的 Account 模型,是一种特殊类型的 Business Partner.

比如 My Accounts 应用显示的 First Name 和 Last Name 的值:

实际存储在数据库表 BUT000 如下图所示的 NAME_LASTNAME_FIRST 字段里。

通过这张表里的 PERSNUMBER 字段作为外键:

还能链接到其他数据库表,比如同样出现在 SAT 事务码结果列表里的 ADR12, Account 在 Fiori UI 上显示的 WebSite,就存储在这张数据库表的 URI_SRCH 字段里。

总结

这篇文章首先介绍了已知一个 SAP UI5 应用名称,如何通过 SAP 官方工具,快速查找到其使用的 OData 服务名称。接着介绍了如何在 ABAP 调试器里,通过内置的 ABAP Trace 将调试器里执行的 ABAP 代码的明细全部记录下来,保存成能够在事务码 SAT 里查看的 Trace 文件。最后通过实际的例子,展示了如何在事务码 SAT 里查看 OData 服务运行时访问了哪些数据库表,以及将 SAP UI5 界面上的字段同这些数据库表的字段进行一一匹配。