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

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第1张图片

看一些例子:

MOVE

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第2张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第3张图片

没有Released for Cloud的Data Elements

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第4张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第5张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第6张图片

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

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第7张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第8张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第9张图片

下面是一些其他例子。

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第10张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第11张图片
有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第12张图片
有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第13张图片

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

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第14张图片

How to check your custom ABAP code for SAP Cloud Platform ABAP Environment

https://blogs.sap.com/2018/10/02/how-to-check-your-custom-abap-code-for-sap-cloud-platform-abap-environment/

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第15张图片
有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第16张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第17张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第18张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第19张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第20张图片

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

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?_第21张图片

更多阅读

  • Jerry的ABAP, Java和JavaScript乱炖

  • ABAP开发人员未来应该学些什么

  • Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现

  • Jerry的ABAP原创技术文章合集

  • 300行ABAP代码实现一个最简单的区块链原型

  • 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数

  • 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

  • ABAP vs Java, 蛙泳 vs 自由泳

  • 聊聊C语言和ABAP

  • 动手使用ABAP Channel开发一些小工具,提升日常工作效率

  • 我用ABAP做过的那些无聊的事情

  • 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧

  • 使用Visual Studio Code编写和激活ABAP代码

  • 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

  • 在SAP云平台ABAP编程环境上编写第一段ABAP程序

  • SAP官方发布的ABAP编程规范

  • ABAP Code Inspector那些隐藏的功能,您都知道吗?

  • 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧

  • ABAP Netweaver体内的那些寄生式编程语言

  • 从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀

  • 云端的ABAP Restful服务开发

  • 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务

  • 使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输

  • 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用

  • Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现

  • Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试

  • SAP云平台上的ABAP编程环境里如何消费第三方服务

  • ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了

  • 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景

  • SAP云平台里的三叉戟应用

  • 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用

  • SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?

你可能感兴趣的:(有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?)