乐趣区

有哪些ABAP关键字和语法到了ABAP云环境上就没办法用了

Jerry 在之前的文章多次提过,SAP Cloud Platform ABAP 编程环境上的 ABAP 语法,只是广大 SAP 顾问们在 On-Premises 环境上使用的 ABAP 的一个子集。换句话说,On-Premises 环境下能正常工作的 ABAP 代码,单纯地复制粘贴到云环境上之后,可能就无法通过编译了。看一些例子:

MOVE

修复这个语法错误很简单,直接用赋值操作“=”替换 MOVE 即可。话说这种错误应该只会出现在古旧的历史遗留代码上吧(Legacy Code), 大家现在写代码应该都不会用 MOVE 进行单纯的赋值操作了。

没有 Released for Cloud 的 Data Elements

每个 ABAP Development Tool 里创建的 ABAP Cloud 项目里都有一个 Released Objects 文件夹,里面维护着一个 ABAP 开发人员在云环境里能使用的对象清单,在 Data Elements 里即是所有可用的数据元素(Data Elements). 排在第一位的就是描述布尔类型的 ABAP_BOOLEAN.

同样是因为历史原因,大家知道在 On-Premises 环境里要定义一个布尔变量,我们可以有许多种选择:boole_d, abap_bool, boolean 等等。

但是到了云上,大家还是老老实实使用清单里维护的那些类型吧。

不是所有的 SYST 结构字段都能直接访问

结构体 SYST 里包含了很多系统字段,能让 ABAP 开发人员方便地获得一个 ABAP 应用执行时的各种维度的信息。

在 ABAP 云环境上,使用这些字段需要特别小心,以免遇到形如 ”Access to the field “SY-DATUM” is not permitted in the restricted language scope” 这种语法错误:

正确的方式,应该用 CL_ABAP_CONTEXT_INFO=>GET_SYSTEM_DATE 这种工具类提供的方法。

下面是一些其他例子。

幸运的是,因为我们是在 ABAP Development Tool 这个 IDE 里编程,所以不用硬记这些 On-Premises 到 ABAP Cloud 上的转换规则。大多数时候,依靠 IDE 的语法报错或者 Quick Fix 功能都不难找到修复语法错误的线索。



当然如果嫌这种一条条修复的方式速度较慢,或者想象这样一个场景:您的 ABAP On-Premises 系统上有一个开发包,里面包含了很多 ABAP 二次开发代码,在用 Jerry 之前文章 使用 abapGit 在 ABAP 系统和 SAP 云平台 ABAP 环境之间进行代码传输 介绍的办法将这些代码迁移从 On-Premises 系统迁移到云上之前,您期望做一次统一的“Cloud Readiness”检查,一次性把所有上云的隐患都列出来。

传统的 ATC 检查 (ABAP Test Cockpit, 一种 ABAP 代码检查工具) 此时再次有了用武之地。按照这篇 SAP 社区博客提到的 note 去做,在一个 ATC 中央检查系统上安装包含了新的 ATC 检查选项的实现 note:

How to check your custom ABAP code for SAP Cloud Platform ABAP Environment
https://blogs.sap.com/2018/10…

这个新的 ATC 检查选项名称为 SAP_CP_READINESS_REMOTE,能帮助我们早在 ABAP 代码迁移到云环境之前,在 On-Premises 环境里就提前找出所有阻止当前被检查的 ABAP 代码上云的障碍。


当然这种检查反方向执行也是可以的,即在 SAP Cloud Platform ABAP 环境里,触发连接的 ABAP On-Premises 环境里的 ATC 检查。由于是云环境访问 On-Premises 环境,所以需要 SAP Cloud Connector 完成内外网穿越:

从 Fiori Launchpad 里进入 Custom Code Migration 这个应用,创建一个新的迁移项目:

迁移目标当然是 SAP Cloud Platform ABAP 环境,而源头是 ABAP On-Premises 环境,所以需要维护一个指向该环境的 Destination,这个 Destination 在 SAP 云平台上创建。

此时我们就可以在 Fiori UI 上触发 ABAP On-Premises 系统上的 ATC 检查,并监控其进度。

检查完毕后,可以根据提示返回 On-Premises 环境进行代码调整。

要获取更多 Jerry 的原创文章,请关注公众号 ” 汪子熙 ”:

退出移动版