云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤

在本地部署环境即 On-Premises 环境下,如果想将 ABAP Netweaver 里的资源以 Restful API 的方式暴露出来,SICF这个事务码绝对是一大利器。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第1张图片

我们只需要在SICF里合适的路径下创建节点,为该节点创建一个ABAP类,就可以专注于实现接口定义的方法IF_HTTP_EXTENSION~HANDLE_REQUEST, 在里面编写应用逻辑了。应用开发人员无需关注和操心这些ABAP类什么时候被实例化和调用,可以把这个HANDLE_REQUEST方法看作是一个回调函数,当请求到来时,由Netweaver的ICF框架(Internet Communication Framework)负责把请求路由到对应的ICF节点并创建ABAP类,调用HANDLE_REQUEST方法。

每个SICF节点会根据其路径被分配一个url, 如果是Corporate网络里,用浏览器或者编程语言直接访问该url,就能消费SICF暴露的资源了。

如果想让这个位于Corporate网络内的url被Internet网络访问,就得借助SAP Cloud Connector,实现内外网穿透,将内网的资源通过 Cloud Connector 暴露给外网消费。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第2张图片

对于ABAP开发人员来说,一个好消息是,SAP Cloud Platform 如今也支持ABAP运行环境了。本文我们通过在SAP云平台 ABAP运行环境里完成类似之前在On-Premises ABAP系统的SICF事务码里的开发任务,来感受ABAP到了云端之后,给ABAP开发者带来的巨大便利。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第3张图片

通过ABAP Development Tools连接SAP云平台 ABAP运行环境的一个实例,完成登录后,后续的操作步骤,同使用ABAP Development Tools连接一个On-Premises ABAP系统,几乎没有差别。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第4张图片

下图是在云上的ABAP环境里,允许我们创建的ABAP对象列表,既有ABAP开发人员感到亲切的ABAP字段对象,ABAP开发包,ABAP消息类等等,也有上了云端之后的新面孔,比如Cloud Communication Management和Cloud IAM等。

为了完成在On-Premises的SICF事务码里的开发工作,现在我们要在云上的ABAP环境里创建一个新的HTTP Service:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第5张图片

新建一个名为ZHELLOWORLD的service,创建完毕之后界面如下:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第6张图片

ABAP老司机们看到这界面,立即知道下一步怎么做了吧。点击Handler class,就可以进入ABAP类的编辑界面,实现这个HTTP服务的业务逻辑。而通过url字段里维护的值,我们可以在PC或移动设备里,浏览器或代码里访问这个服务。

该服务实现类和On-Premises的区别,不过是接口名称从IF_HTTP_EXTENSION换成了IF_HTTP_SERVICE_EXTENSION.

当然,前者因为是直接在云端编写的ABAP代码,所以还要遵循Jerry之前的文章 在SAP云平台ABAP编程环境上编写第一段ABAP程序 里提到的那些限制。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第7张图片

上述的ABAP代码只是简单地返回给消费者一个Hello World的文本信息,保存激活之后,把url贴到浏览器里,就能看到期望的Hello World:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第8张图片

我们从url里,容易得出这样的结论,SAP Cloud Platform ABAP运行环境里支持创建的HTTP服务,其实现原理,其实就是在Netweaver服务器的SICF路径/sap/bc/http/sap/下面增加一个新的节点罢了,只是这个操作,在云端不再需要由ABAP开发人员手动完成,云端的ABAP环境,会自动创建这一底层设施。

在云端的 ABAP 环境里完成了 Restful 服务的开发之后,如何将这个服务传输到其他系统呢?

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

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第9张图片

SAPLink简单地说就是一个报表和一系列插件的集合。如果我们期望在系统A和B之间传输代码,步骤为:

(1) 在系统A和B上都安装SAPLink,其实也就是手动创建报表,然后从SAPLink的github上把源代码拷贝过来,激活即可:
https://github.com/sapmentors...
(2) 在系统A上执行SAPLink,把想传输的代码导出成一个本地文件。
(3) 在系统B上执行SAPLink,将前一步生成的本地文件导入。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第10张图片

SAPLink的介绍文章,网络上太多了,本文不再赘述。

到了云时代之后,SAP云平台ABAP编程环境的代码版本管理,选择了基于abapGit这个开源项目的GIT来进行。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第11张图片

下面跟着Jerry一起,通过一个简单的例子来了解怎么做吧。

Jerry这个例子的场景是,我在ABAP On-Premises系统AG3里,开发了一些ABAP代码。我想通过abapGit,把这些On-Premises系统上的ABAP代码导入到SAP Cloud Platform ABAP环境里。

(1) 首先到这个Github仓库里找到abapGit的源代码,拷贝到On-Premises系统里。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第12张图片

激活之后运行报表,界面如下:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第13张图片

(2) On-Premises系统上的ABAP代码是无法直接推送到SAP云平台 ABAP环境的,需要一个中转站,即github.com上的代码仓库。为此,Jerry新建一个代码仓库:test-sap-abap-cloud.

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第14张图片

(3) 回到On-Premises系统的abapGit报表,点击工具栏的Online超链接,同第二步创建的Github仓库建立关联。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第15张图片

上图的意思是我在On-Premises系统里新创建的开发包,$ZJERRYPACKAGE里面的代码,会和github.com的test-sap-abap-cloud这个仓库建立关联。

因为我的开发包里尚未创建任何代码,所以此时abapGit里除了包描述XML文件外,没有显示任何和ABAP代码相关的资源文件。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第16张图片

(4) 现在我在On-Premises系统里随便创建一个Hello World的报表:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第17张图片

回到On-Premises系统的abapGit,刷新,此时就能看见我刚刚创建的ABAP报表了。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第18张图片

和大家使用Mac或者Windows版本的Git客户端一样,我首先用abapGit把On-Premises系统创建的这个Hello World报表推送到github.com:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第19张图片

随便维护一个推送注释,比如the first commit from Jerry's abapgit:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第20张图片

成功推送完毕,现在github上的仓库已经能看到刚刚推送的来自On-Premises系统的报表代码和推送注释了:the first commit from Jerry's abapgit

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第21张图片

(5) 现在我们可以把github.com仓库里的代码导入到SAP云平台ABAP环境了。给ABAP Development Tools安装abapGit插件,地址为:eclipse.abapgit.org/updatesite

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第22张图片

安装完毕后,打开abapGit视图:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第23张图片

登录SAP Cloud Platform ABAP编程环境,点击Link按钮:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第24张图片

输入github.com的仓库地址:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第25张图片

指定SAP云平台ABAP环境里ZJERRY这个包存放来自github.com的ABAP代码:

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第26张图片

clipboard18,18
当我们在abapGit视图里看到标记为Imported状态的条目时,说明导入成功。然而,在SAP云平台ABAP环境的开发包ZJERRY里,我并没有看到On-Premises系统里的Hello World报表,这是怎么回事呢?

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第27张图片

原来,在SAP Cloud Platform ABAP环境里,能允许开发人员编写ABAP代码的载体就只有下列五种,不支持On-Premises环境里通过SE38创建的ABAP报表。如果我们在On-Premises系统里创建一个ABAP类,通过本文介绍的步骤,是能够顺利导入SAP云平台ABAP环境并可以继续在其上开发的。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第28张图片

在SAP云平台ABAP编程环境里,我们如果想模拟On-Premises环境SE38里创建的报表,可以通过创建实现了接口IF_OO_ADT_CLASSRUN的ABAP类来完成。
右键单击这种类,选择Run As ABAP Application(Console)即可。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第29张图片

希望本文能加深大家对下图中通过GIT来进行SAP Cloud Platform ABAP环境中代码管理这一概念的理解,感谢阅读。

云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤_第30张图片

总结

本文首先介绍了在 SAP 云平台 ABAP 编程环境如何完成类似过去 On-Premises 平台上开发 SICF 服务的步骤来开发基于云的 Restful API,接着详细阐述了如何使用 abapGit 这一工具,将 ABAP 编程环境开发好的 Restful 服务传输到另一个云系统。

你可能感兴趣的:(云端的 ABAP Restful 服务开发以及通过 abapGit 传输到其他系统的详细步骤)