有朋友咨询,想知道他们公司正在使用的 SAP S/4HANA 公有云,后台基于的 ABAP 编程语言到底是哪一个版本?
这个问题看似简单,背后其实牵扯到了三个容易混淆的概念:
语言版本
产品版本
ABAP release
这三个概念如果不区分清楚,在实际项目中很容易出现这样一种情况:
有人嘴上说自己在确认ABAP 版本号,结果他查到的是S/4HANA Cloud 2602,另一个人查到的是ABAP for Cloud Development,还有人去问SAP_BASIS 多少。
三个人都觉得自己没错,但彼此说的根本不是一回事。
本文咱们就针对这三个概念来说一说。
SAP 官方在ABAP release的术语定义里讲得很清楚,ABAP不是独立发布的,它是随具体产品一起交付的,像SAP S/4HANA Cloud Public Edition、SAP BTP ABAP environment这类产品各自带着对应的ABAP release走,不存在一个脱离产品单独漂浮着的ABAP 版本号。
文档的原话是:
ABAP is not released standalone but is shipped together with SAP products such as SAP BTP ABAP environment, SAP S/4HANA Cloud Public Edition and SAP S/4HANA, SAP S/4HANA Cloud Private Edition.
官方文档地址:
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/ABENABAP_RELEASE_GLOSRY.html
因此以 SAP 旗舰级产品 SAP S/4HANA Public Cloud 的最新版本 2602 为例,如果问的是其后台所依托的那个数值化ABAP release,那么 SAP 官方ABAP Keyword Documentation的News for ABAP Release 9.1x对照表已经给出了答案:
SAP S/4HANA Cloud Public Edition 2602 对应的是ABAP release 9.18,对应的 kernel release 是918。
https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/ABENNEWS-91.html
同一张官方表里还能看到2508对应9.16,2511对应9.17,到2602就是9.18。
这套命名已经不是很多 ABAP 老项目里常挂在嘴边的7.52、7.54、7.56那种节奏了。
因为9.1x ABAP releases是基于7.9x演进出来的,所以你如果硬想把它往传统7.xx脉络上挂,那么应该理解为它属于新的7.9x代际,而不是7.5x那一支。
https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/ABENNEWS-91.html
不过,光知道9.18还不够,因为这位朋友问题里用了ABAP 语言的版本号这个说法。
在SAP S/4HANA Public Cloud语境,项目里真正每天会碰到的,往往不是9.18这个数字,而是ABAP language version。
SAP 官方在ABAP Language Versions和相关术语页里提到,ABAP language version是开发对象上的语言约束,用来决定哪些语法、哪些对象访问方式、哪些 API 使用方式被允许。
在使用 ABAP 这门编程语言进行 API 开发时,支持下面两种 ABAP Language Versions:
ABAP for Cloud Development
Standard ABAP
https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/ABENABAP_LANGUAGE_VERSIONS.html
除了 ABAP API 开发领域之外,ABAP 编程语言还有另一个子集,名叫 ABAP for Key Users.
顾名思义,这种 ABAP 专门提供给 Key User 在 SAP Fiori 的可扩展性应用里实现扩展逻辑,典型入口就是 Custom Fields and Logic 与 Custom Business Objects。
它的运行方式也很特别,不是在传统的 ABAP Workbench 里写代码,而是在 Fiori 环境中的 Web 编辑器里完成。
因此就有了下面这张表:
表中可以看出,在 SAP S/4HANA Public Cloud 和 SAP BTP ABAP 环境里,仅能使用 ABAP for Cloud Development 和 ABAP for Key Users,无法使用 ABAP On-Premise 环境下经典的 Standard ABAP.
因此,在 SAP BTP ABAP 环境或 SAP S/4HANA 公有云里创建的 ABAP 对象,其 ABAP Language 被强制设定为 ABAP for Cloud Development:
而 SAP S/4HANA Private Cloud 因为同时支持三种版本的 ABAP,所以在下拉菜单里可以看到全部三种可选项:
所以,回到本文开头的问题,最准确的回答不是一句单薄的SAP S/4HANA 2602 的 ABAP 基于 9.18。
更严谨的讲法应该是这样,SAP S/4HANA Public Cloud 2602这一产品版本,对应的后台数值化ABAP release是9.18,但你在开发对象层面真正看到和设置的ABAP language version,对开发者扩展来说是ABAP for Cloud Development,对Key User Extensibility场景来说则是ABAP for Key Users。
有点啰嗦,是不是?但这确实是最严谨的回答。
很多 ABAP 老顾问和开发会在这里踩坑,也在情理之中。
长期做ABAP On-Premise开发的老司机,早就形成了一个肌肉记忆,想看后台版本,就去看SAP_BASIS、看System Status、看7.xx。
可到了ABAP Cloud世界,时代变了,SAP 自己的术语体系已经换挡了,我们也需要更新自己的知识储备了。