我经常通过论坛,github等来共享ABAP代码,这些代码通常旨在用于任何ABAP-based system。不幸的是,经常发生我使用的某些对象(数据库表,类型等)仅存在于我正在使用的解决方案中(例如在ABAP系统上工作的C / 4HANA)。
重要的是要理解,SAP开发了一些解决方案,这些解决方案与其他解决方案无关,但是要安装在ABAP系统上,该系统包括ABAP语言本身以及紧密链接的外部对象(如ABAP中的对象)字典。此类SAP解决方案包括SAP R / 3,SAP CRM,SAP SRM,SAP SCM,SAP BW,S / 4HANA,C / 4HANA,BW / 4HANA,SAP解决方案管理器等。
例如,假设我要问一个关于ABAP中联接的问题,并提供以下示例(该示例是我在C / 4HANA系统上开发的,但该问题与C / 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 ).
许多人都拥有S / 4HANA,而不是C / 4HANA,因此该代码将无法在其系统上编译,因为数据库表crmd_order_index
仅存在于C / 4HANA中。那些人可能不会回答,或者他们将无法验证他们的回答,所以我认为我可以努力改进示例,使其在任何ABAP系统上都可以使用。这当然是一个非常简单的示例,但请想象您有几十行或几百行。
我知道一种解决方案是在自己的笔记本电脑上安装ABAP Developer Edition,因为它包含最小的ABAP配置,并在其上测试ABAP代码。但是它相对复杂且安装时间长,仅用于检查“简单的事情”就占用大量磁盘空间。
是否有另一种方法可以轻松快速地检查ABAP代码是否在任何基于ABAP的系统中编译?还是其他想法?
我还希望这种解决方案适用于例如abapGit一样大的代码。
有关信息:
答案 0 :(得分:1)
共享一段ABAP示例代码的最简洁方法似乎是这样:
$MY_SAMPLE
README
,该代码提供编写代码的ABAP版本。采用这些最佳做法:
将代码和相关性降低到使示例工作所需的最低限度。删除对与该问题不直接相关的其他开发对象的调用。尽可能限制ABAP平台提供的功能和API。
如果存在某些问题,例如在“我如何使用CRM功能模块XYZ?”中,或者由于大小或版权(!)原因而无法复制,请确定SAP软件组件,它们是其中的一部分,并在README
中作为依赖项列出。
通过执行示例来验证示例是否可以编译和工作。这是不可靠的,因为它可能仍然偶然访问了您忘记复制的未复制的依赖项,但这至少会给您一个提示。
ABAP在这里并不是很特别。在任何开发语言中,提供最少的工作示例始终是一项努力。它要求将受影响的代码与不必要的依赖区分开,并用最少的工作存根替换所需的代码。这就是为什么要问好问题是艰苦的工作,也是为什么StackOverflow赞赏有声望的好问题的部分原因。
答案 1 :(得分:1)
桑德拉(Sandra),我认为这个问题没有很好也不容易的答案。我们多年来一直在遭受这个问题的困扰。在发行版中,我经常被ABAP语言所困扰。特别是SQL和ABAP单元测试。上周即使是好的旧char02也烧毁了我们。是Char02
是s / 4 Hana不再支持的行业特定数据元素。您需要所有可能的ap abap版本,以确保一切正常。有一个远程语法检查选项,起初听起来不错。但是,它从7.02 SP14开始。因此,它对7.0没有好处。您首先需要访问这些版本。谁负担得起?为什么1个ABAP系统不能进行向下兼容检查。 :(对我来说,ABAPGit决定将最近但不是最新的abap版本定为“当前版本”,这不足为奇。我们必须支持7.0到7.5+的代码,因为我们的客户具有从S / 4 hana到7.0的1个代码库。我们还有一个具有SolMan / CRM和SAP网关以及ECC业务套件的通用代码库,要在所有环境下保持代码库的清洁性说起来容易做起来难。
就示例而言,严格遵循ABAP NW示例听起来很容易,但是除非您限制SFLIGHT或T002 / T006之类的表格,否则它比人们意识到的要难。
一个基本但不是完美的解决方案是在发布之前检查传输中所有对象的开发级别。我们已经这样做了一段时间。跟踪出于什么目的是HARD的有效Basis对象。我使用了在7.2系统上不存在的基础对象,并且在导入时失败。然后,您可以将TADIR日期添加到支票中。
最终,我只是导入了最旧的(7.0)系统作为烟雾测试。
我会看着别人是否有魔术般的解决方案:) 祝你好运
答案 2 :(得分:0)
由于发行版是向下兼容的,因此您可以设置发行版非常低的系统,并以此开发代码。 ABAP OO在4.6C版本中引入