我经常通过论坛、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这样大的代码。
欲了解更多信息:
分享一段ABAP示例代码的最简洁的方式似乎是这样的:
$MY_SAMPLE,README提供代码编写的 ABAP 版本的 。通过这些最佳实践:
将示例工作所需的代码和依赖项减少到最低限度。删除对与问题不直接相关的其他开发对象的调用。尽可能限制自己只能使用 ABAP 平台提供的功能和 API。
如果存在构成问题一部分的依赖关系,例如“如何使用 CRM 功能模块 XYZ?”,或者由于大小或版权(!)原因而无法复制,请识别它们所属的 SAP 软件组件的,并将其列为README.
通过执行该示例来验证该示例是否可以编译并正常工作。这是不可靠的,因为它可能会意外地访问您忘记复制的未复制的依赖项,但它至少会给您一个想法。
ABAP在这里并不是很特别。在任何开发语言中,提供最少的工作示例始终是一项努力。它需要将受影响的代码与不必要的依赖项分开,并用最少的工作存根替换所需的代码。这就是为什么提出好问题是一项艰苦的工作,也是 StackOverflow 欣赏有声誉的好问题的部分原因。