如何使 ABAP 代码在任何基于 ABAP 的系统中工作

San*_*ssi 5 abap sap-basis

我经常通过论坛、github 等分享 ABAP 代码,这些代码通常旨在适用于任何基于 ABAP 的系统。不幸的是,经常发生这样的情况:我使用的某些对象(数据库表、类型等)仅存在于我正在使用的解决方案中(例如在 ABAP 系统上运行的 SAP CRM)。

需要了解的是,SAP 开发了多种解决方案,它们独立于其他解决方案,但要安装在 ABAP 系统上,其中包括 ABAP 语言本身以及紧密链接的外部对象(如 ABAP 字典中的对象)。此类SAP解决方案有SAP R/3、SAP CRM、SAP SRM、SAP SCM/APO、SAP BW、S/4HANA、BW/4HANA、SAP Solution Manager等。

例如,假设我想问一个有关 ABAP 中联接的问题,我提供了以下示例(我在 SAP CRM 系统上开发,但问题与 S/4HANA 无关):

REPORT.
DATA gt_partner TYPE TABLE OF crmd_order_index-partner_no.
SELECT DISTINCT a~partner_no
    INTO TABLE gt_partner
    FROM crmd_order_index AS a INNER JOIN crm_jest AS b
    ON a~header = b~objnr
    UP TO 10 ROWS.
cl_demo_output=>write( crmd_order_index ).
Run Code Online (Sandbox Code Playgroud)

许多人拥有 S/4HANA,而不是 SAP CRM,因此代码无法在他们的系统上编译,因为数据库表crmd_order_index仅存在于 SAP CRM 中。也许那些人不会回答或者他们无法验证他们的答案,所以我想我可以努力改进这个例子并使其在任何 ABAP 系统上工作。这当然是一个非常简单的示例,但想象一下您有数十或数百行。

我知道一种解决方案是在我们自己的笔记本电脑上安装ABAP开发人员版本,因为它包含最小的ABAP配置,并在其上测试ABAP代码。但它的安装相对复杂且耗时长,占用大量磁盘空间,只是为了检查一个“简单的东西”。

是否有另一种方法可以轻松快速地检查 ABAP 代码是否可以在任何基于 ABAP 的系统中编译?或者还有其他想法吗?

我还希望这个解决方案适用于像abapGit这样大的代码。

欲了解更多信息:

  • abapGit是一款可以在任何基于 ABAP 的系统中运行的著名 ABAP 工具。
  • 问题不在于版本(例如检查在 ABAP 7.52 系统上编写的 ABAP 代码是否在 ABAP 7.0 系统上编译),因为我认为这是一个更复杂的问题。
  • 在 Stack Overflow 中,一个 ABAP 问题的代码不适用于任何 ABAP 系统,这削弱了“最少、可重现示例”的原则。

Flo*_*ian 3

分享一段ABAP示例代码的最简洁的方式似乎是这样的:

  1. 创建一个本地包,例如$MY_SAMPLE
  2. 将所有示例代码和依赖项复制到,
  3. 使用abapGit将其推送到新的、干净的https://www.github.com存储库,并且
  4. 添加README提供代码编写的 ABAP 版本的 。

通过这些最佳实践:

  • 将示例工作所需的代码和依赖项减少到最低限度。删除对与问题不直接相关的其他开发对象的调用。尽可能限制自己只能使用 ABAP 平台提供的功能和 API。

  • 如果存在构成问题一部分的依赖关系,例如“如何使用 CRM 功能模块 XYZ?”,或者由于大小或版权(!)原因而无法复制,请识别它们所属的 SAP 软件组件的,并将其列为README.

  • 通过执行该示例来验证该示例是否可以编译并正常工作。这是不可靠的,因为它可能会意外地访问您忘记复制的未复制的依赖项,但它至少会给您一个想法。

ABAP在这里并不是很特别。在任何开发语言中,提供最少的工作示例始终是一项努力。它需要将受影响的代码与不必要的依赖项分开,并用最少的工作存根替换所需的代码。这就是为什么提出好问题是一项艰苦的工作,也是 StackOverflow 欣赏有声誉的好问题的部分原因。