距2017年秋季的SAP TechEd大会上一位大佬Björn Goerke,SAP’s Chief Technology Officer宣布了SAP Cloud Platform即将支持ABAP至今,已经过去了两年的时间。

目前国内的技术媒体平台上,已经有了部分概要性介绍SAP Cloud Platform ABAP编程环境的中文文章,但涉及到具体操作细节的文章比较少。

Jerry最近会做一系列关于如何在SAP Cloud Platform上的ABAP编程环境上做开发的分享。

其实对于一个已经能够熟练使用ABAP Development Tools连接On-Premises ABAP Netweaver服务器做开发的传统开发人员而言,迁移到从On-Premises迁移到SAP云平台上的难度不大,只是需要注意一些开发理念上的转变,这个转变我们在后续具体做开发时会提到。

这种相对平缓的迁移和学习曲线,对于SAP全球庞大生态圈的企业和开发人员来说,无疑是一个好消息——这意味着SAP正在进行中的向云端数字化转型的旅程里,这些企业和个人也能够加入其中,并且他们以前在On-Premises时代积累的宝贵的技术和业务领域知识,能够继续在云时代发光发热。

我曾经在网络上了解到,很多自学SAP ABAP的朋友们,面临的第一道关卡就是在自己本地搭一台Netweaver服务器出来。作为一个写了12年代码的老开发人员,Jerry也搭过各种本地开发环境,深知这里面的水有多深。我以前的老板,也给我们分享过他当年来SAP成都研究院面试的时候,自己本地也搭过Netweaver,并且短短几天啃完几百页的Netweaver英文文档的经历。

相信每一位在本地搭建Netweaver的ABAP学习者,当成功看到Hello World输出的那一刻,成就感一定爆棚。

然而,当Jerry第一次在SAP Cloud Platform的ABAP编程环境上看到Hello World时,却没有多少成就感,因为直接按照ABAP Development Tool里的项目创建向导一步步操作就可以了,过程比较简单易懂——这也体现了云时代到来后,对传统应用开发人员工作方式的影响:无需费神去关心底层硬件或者操作系统等资源,可以把精力集中于应用程序逻辑的编写上。换言之,SAP负责管理和维护底层HANA数据库和中层的ABAP runtime,用户只需管理顶层的ABAP应用代码。

使用ABAP Development Tools的项目创建向导:
New->ABAP Cloud Project:

Service Instance Connection,选择SAP Cloud Platform CloudFoundry environment:

选择Region,输入用户名密码,前提是你得在这个region下有一个global Account。

下图是我在SAP Cloud Platform的CloudFoundry环境里的Global Account:

这个Global Account所属的space下面我创建了一个ABAP系统实例,ID为ME1:

这个ABAP运行实例具有16GB运行内存,64GB的HANA内存。

再回到ABAP Development Tools, 在项目创建向导里使用Cockpit里维护的上述属性:

点Next,在ABAP Development Tools里会看到一个嵌入的登录窗口。因为Jerry使用的是SAP社区Mentor的账号,所以登录窗口显示的标题是:Welcome to Mentors!

在向导里点Finish按钮:

点击之后,在ABAP Development Tools左侧的项目列表里就能看见创建好的ABAP Cloud项目了,接下来在这个项目里编写ABAP代码进行开发的方式,和我们用ADT连接On-Premises系统基本一致。大家可以看到下图创建好的高亮的ABAP Cloud项目(系统ID为ME1), 和其他On-Premises上的ABAP项目外观上没有区别。

这两种ABAP项目的差异在于,ABAP Cloud项目里能够使用的ABAP语言特性,只是传统ABAP语言的一个子集,比如传统ABAP语言里和Dynpro相关的关键字,即只能工作在SAPGUI中的那些关键字,因为在Cloud环境下不再适用了,所以在ABAP Development Tools的ABAP Cloud项目里禁止使用。

现在就可以进行第一行ABAP程序的编写了。

和On-Premises环境下一样,首先创建一个本地包ZJERRY(local package):

然后弹出提示要求创建Transport Request(传输请求):

Package和Transport Request都有了之后,就可以开始编码了。
在On-Premises时代,我们想用ABAP打印Hello World,直接SE38创建一个报表(Program,如下图所示),然后WRITE: 'Hello World’就可以了。

在SAP Cloud Platform上,新建列表的选项里已经没有了ABAP Program这一项。

所以我们只能选择新建一个ABAP Class:

指定把这个类存储到刚刚新建的Transport Request里:

接下来的操作,好比在Java class的static public void main(String[] args)方法里用System.out.println打印Hello World一样。

这个新建的ABAP类实现IF_OO_ADT_CLASSRUN接口, 进行Hello World的打印:

激活代码,可以看到和On-Premises一样,这个类的各个组成部分需要一起激活。

至于为什么Jerry在IDE里书写了一段纯文本的ABAP源码,但是激活时任务列表里产生了这么多对象,请参考Jerry的博客:General properties of ABAP Classes / Interfaces
https://blogs.sap.com/2014/03/14/general-properties-of-abap-classes-interfaces/
激活完毕后,Run As->ABAP Application(console):

Console里看到输出:

观察这个类执行的交互日志,发现我们在ABAP Development Tools里触发的执行动作,IDE发送了一个SAP Cloud Platform上endpoint为/sap/bc/adt/oo/classrun的POST请求。

这段程序在SAP云平台的ABAP实例上执行,结果再以HTTP响应的方式返回给IDE。

IDE发送请求给SAP Cloud Platform的具体Java代码,可以按照Jerry的文章:那些年我用过的SAP IDE 里介绍的方法去反编译后查看。

在SAP云平台上的ABAP编程,和传统On-Premises系统编程相比,一个显著的差异就是,出于保持简单,降低操作风险的准则,以及在提供操作的灵活性和云平台安全性等方面的折衷考虑,开发人员在SAP Cloud Platform的ABAP编程环境无法像后者一样能够任意访问Netweaver上的资源。

以传统ABAP开发人员在Netweaver上进行二次开发最常用的ABAP OPEN SQL读表的操作为例,这种直接访问数据库表的行为在SAP Cloud Platform上会引起语法错误。

即使像下图这样在ABAP代码里直接引用Netweaver的数据库表,在SAP云平台上也是不允许的。

所有对底层资源的访问都必须通过SAP定义的白名单里的API进行,即下图Released Objects里包含的API。

后续Jerry将带来SAP云平台ABAP编程环境更多开发内容的分析,敬请期待。

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

在SAP云平台ABAP编程环境上编写第一段ABAP程序相关推荐

  1. SAP云平台CloudFoundry编程环境下app router的使用最佳实践

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

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

    我的前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了在SAP云平台的Neo环境下如何通过SAP Cloud Conne ...

  3. 在Android Studio上编写第一个安卓程序

    文章目录 一.Android开发环境搭建 1.安卓简介: 2.安卓发展历程: 二.Android Studio开发环境 三.第一个安卓程序 出现的问题 1.找不到SDK 2.找不到安卓虚拟机 一.An ...

  4. 如何在 SAP BTP 平台 ABAP 编程环境里消费基于 SOAP 的 Web Service

    这是 Jerry 2021 年的第 47 篇文章,也是汪子熙公众号总共第 324 篇原创文章. Jerry 2014 年时,曾经在 SAP 社区上写过一篇英文博客,介绍了如何在 ABAP On-Pre ...

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

    在ABAP On-Premises环境下,使用ABAP编程消费第三方服务,相信很多ABAP顾问都已经非常熟悉了,无非就是使用CL_HTTP_CLIENT或者CL_REST_HTTP_CLIENT来发送 ...

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

    SAP ABAP顾问朋友们,应该都使用过SAPLink这个工具.如果两个ABAP Netweaver系统没有建立起传输路径时,我们无法使用标准的SE10事务码创建传输请求的方式进行这两个系统间的代码传 ...

  7. SAP云平台架构概述

    在我们开始SAP云平台的架构之旅之前,让我们先看看SAP已经发布的一些其他云产品.这些云产品方案可以分为公有云和私有云两种. SAP公有云解决方案见下图最右侧,比较著名的有SAP SuccessFac ...

  8. 如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量

    本文使用的例子源代码在我的github上. 在我的公众号文章在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务介绍了如何通过Cloud Connector ...

  9. ABAP Netweaver, Hybris Commerce和SAP 云平台的登录认证

    ABAP Netweaver 在事务码SICF里选择一个服务,在明细页面对Procedure字段点击F1,查看Logon Procedure的帮助文档. 通过这个链接打开对应的帮助文档,可以看到下列七 ...

最新文章

  1. php 制表符分隔csv,CSV(逗号分隔)、文本文件(制表符分隔) 等文件的读取
  2. bgp选路原则【第二部】
  3. Python 的列表的一些方法
  4. ZOJ 3827 Information Entropy(数学题 牡丹江现场赛)
  5. python怎么备份列表_python实例:backup 备份
  6. 未签名程序使用java_java applets(未签名)可以创建/读取cookie吗?
  7. Phonetics: Lecture Three 语音 第三课 Teacher:Patrick
  8. jQuery的$.each的使用(遍历数组、对象、li集合、选中的option)
  9. php和python-PHP和Python如何选择?或许可以考虑这三个问题
  10. 使用百度地图实现基本的地图显示与定位功能
  11. Java:Spring @Transactional工作原理
  12. 倍福PLC选型--如何看电机是多圈绝对值还是单圈绝对值编码器
  13. MySQL memo优化_mysql memo
  14. R语言绘图的配色——ggsci
  15. 关于微信小程序web开发者工具模拟器出现空白问题
  16. android手机扩容软件,Android手机 6.0 + TF卡 扩容新选择
  17. win10下出现.net framework 3.5错误代码0x800F081F的问题
  18. C语言中文网学习进度
  19. AMD 宣布开源 Linux 显卡驱动与 GPUOpen 工具
  20. JavaCore-ClassLoader

热门文章

  1. Bootstrap模态框垂直高度居中问题
  2. 通过一般处理程序实现【文件上传】
  3. linux gradle解压后, 执行gradle error13: Permission denied
  4. junit5 与 surefire 对接使用
  5. git压测出现访问500
  6. SonarQube与SonarRunner安装配置
  7. sklearn自学指南(part12)--极小角回归及正交匹配追踪
  8. sklearn自学指南(part8)--普通最小二乘法
  9. 非线性回归模型(part3)--K近邻
  10. 利用python爬虫(part11)--XpathHelper为啥不能全信之JS要闹哪般