首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使ABAP代码在任何基于ABAP的系统中工作。

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

Stack Overflow用户
提问于 2019-12-01 11:45:09
回答 5查看 897关注 0票数 4

我经常通过论坛、github等来共享ABAP代码,这通常是为了在任何基于ABAP的系统上工作。不幸的是,我使用的一些对象(数据库表、类型等)只存在于我所使用的解决方案中(例如,在ABAP系统上工作的C/4HANA )。

重要的是要了解SAP开发的几种解决方案,它们独立于其他解决方案,但将安装在ABAP系统上,ABAP系统包括ABAP语言本身和ABAP字典中的那些紧密链接的外部对象。这种SAP解决方案有SAP R/3、SAP CRM、SAP SRM、SAP SCM、SAP BW、S/4HANA、C/4HANA、BW/4HANA、SAP解决方案经理等。

例如,假设我想问一个关于ABAP中的join的问题,我提供了以下示例(我是在C/4HANA系统上开发的,但这个问题与C/4HANA无关):

代码语言:javascript
复制
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开发版,因为它包含最小的ABAP配置,并在上面测试ABAP代码。但它的安装比较复杂,时间长,占用了大量的磁盘空间,只是为了检查一个“简单的东西”。

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

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

供参考:

  • 在任何基于ABAP的系统中都有一个众所周知的ABAP工具是abapGit
  • 问题不在于版本(例如,检查ABAP7.52系统上的ABAP代码是否在ABAP7.0系统上编译),因为我认为这是一个更复杂的问题。
  • 在StackOverflow中,代码不适用于任何ABAP系统的ABAP问题削弱了最小的、可重复的例子的原理。
EN

回答 5

Stack Overflow用户

发布于 2019-12-02 10:30:52

共享ABAP示例代码的最干净方法似乎如下:

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

通过这些最佳做法:

  • 将代码和依赖项减少到使示例工作所需的最低限度。删除对与问题无关的其他开发对象的调用。尽量将自己限制在ABAP平台上可用的函数和API上。
  • 如果存在构成问题一部分的依赖项,例如在“如何使用CRM功能模块XYZ?”中,或者不能复制大小或版权(!)原因是,识别它们所属的SAP软件组件,并将其作为README中的依赖项列出。
  • 通过执行该示例来验证该示例是否编译和工作。这是不可靠的,因为它可能会意外地访问您忘记复制的未复制的依赖项,但它至少会给您一个想法。

ABAP在这里并不特别。在任何开发语言中,提供最少的工作示例总是一种努力。它要求将受影响的代码从不必要的依赖项中分离出来,并用最小的工作存根替换所需的依赖项。这是为什么问好问题是一项艰巨的工作,也是为什么StackOverflow喜欢有声誉的好问题的部分原因。

票数 3
EN

Stack Overflow用户

发布于 2019-12-19 22:45:43

桑德拉,我认为这个问题没有一个好的或容易的答案。多年来,我们一直受到这个问题的困扰。我经常在不同版本的ABAP语言中被烧坏。特别是SQL和ABAP单元测试。就连好的老char02上周也把我们烧死了。是的,Char02是s/4 Hana中不再支持的特定于行业的数据元素。你需要有每一个可能的释放液abap,确保一切都是好的。有一个远程语法检查选项,这听起来不错。但是,它从7.02 SP14开始。因此,这对7.0没有好处,您首先需要访问这些版本。谁能负担得起呢?为什么1 ABAP系统不能做向下兼容的检查。(对我来说,这并不奇怪,ABAPGit已经确定了一个最新的但不是最新的abap版本为“当前版本”。我们必须支持7.0到7.5+的代码,因为我们有从S/4 hana到7.0的客户,有一个代码库。我们还有一个通用的代码库,包括SolMan/ CRM、SAP网关和ECC业务套件。在所有环境中保持代码库干净是说起来容易做起来难。

就示例而言,严格地坚持ABAP示例听起来很容易,但是除非您限制自己的SFLIGHT或诸如T002 / T006这样的表,否则这比人们意识到的要困难。

一个基本但并不完美的解决方案是在发布前检查传输中所有对象的开发类。我们这样做已经有一段时间了。跟踪什么是有效的基础对象,目的是什么是困难的。我使用了基对象,这些对象在7.2系统上不存在,在导入时失败。然后,您可以在支票中添加一个TADIR日期。

最后,我将最古老的(7.0)系统作为烟雾测试导入。

我正在观察某人是否有灵丹妙药的解决方案:祝你好运

票数 1
EN

Stack Overflow用户

发布于 2020-12-08 08:41:59

由于版本向下兼容,所以您可以设置一个非常低版本的系统,并在此基础上开发您的代码。ABAP是在4.6C版中引入的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59125177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档