愉快的暑假结束了,今天是小朋友新学期开学后的第一个周日,不知道各位家长是否和小朋友们一起,已经适应了新学期的生活了么?
Jerry 从少的可怜的属于自己的周末时光挤了一小部分时间出来,写了这篇文章。
Jerry 之前的一篇文章 从 ABAP Netweaver 的 SICF 到 SAP Kyma 的 Lambda Function,我曾经提到过,如果想将 ABAP Netweaver 里的资源以 Restful API 的方式暴露出来,SICF 这个事务码绝对是一大利器。
我们只需要在 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:
具体步骤在我之前的文章使用 Java+SAP 云平台 +SAP Cloud Connector 调用 ABAP On-Premise 系统里的函数 里介绍过。
对于 ABAP 开发人员来说,一个好消息是,SAP Cloud Platform 如今也支持 ABAP 运行环境了。现在我们通过在 SAP 云平台 ABAP 运行环境里完成类似之前在 On-Premises ABAP 系统的 SICF 事务码里的开发任务,来感受 ABAP 到了云端之后,给 ABAP 开发者带来的巨大便利。
按照 Jerry 之前的文章在 SAP 云平台 ABAP 编程环境上编写第一段 ABAP 程序 里介绍的步骤,通过 ABAP Development Tools 连接 SAP 云平台 ABAP 运行环境的一个实例,完成登录后,后续的操作步骤,同使用 ABAP Development Tools 连接一个 On-Premises ABAP 系统,几乎没有差别。
下图是在云上的 ABAP 环境里,允许我们创建的 ABAP 对象列表,既有 ABAP 开发人员感到亲切的 ABAP 字段对象,ABAP 开发包,ABAP 消息类等等,也有上了云端之后的新面孔,比如 Cloud Communication Management 和 Cloud IAM 等。
为了完成在 On-Premises 的 SICF 事务码里的开发工作,现在我们要在云上的 ABAP 环境里创建一个新的 HTTP Service:
新建一个名为 ZHELLOWORLD 的 service,创建完毕之后界面如下:
ABAP 老司机们看到这界面,立即知道下一步怎么做了吧。点击 Handler class,就可以进入 ABAP 类的编辑界面,实现这个 HTTP 服务的业务逻辑。而通过 url 字段里维护的值,我们可以在 PC 或移动设备里,浏览器或代码里访问这个服务。
该服务实现类和 On-Premises 的区别,不过是接口名称从 IF_HTTP_EXTENSION 换成了 IF_HTTP_SERVICE_EXTENSION. 当然,前者因为是直接在云端编写的 ABAP 代码,所以还要遵循 Jerry 之前的文章 在 SAP 云平台 ABAP 编程环境上编写第一段 ABAP 程序 里提到的那些限制。
上述的 ABAP 代码只是简单地返回给消费者一个 Hello World 的文本信息,保存激活之后,把 url 贴到浏览器里,就能看到期望的 Hello World:
我们从 url 里,容易得出这样的结论,SAP Cloud Platform ABAP 运行环境里支持创建的 HTTP 服务,其实现原理,其实就是在 Netweaver 服务器的 SICF 路径 /sap/bc/http/sap/ 下面增加一个新的节点罢了,只是这个操作,在云端不再需要由 ABAP 开发人员手动完成,云端的 ABAP 环境,会自动创建这一底层设施。
希望传统 ABAP 开发人员,能从这个最简单的 Hello World 级别的例子,体会到云端 ABAP 开发的便利之处。感谢阅读。
要获取更多 Jerry 的原创文章,请关注公众号 ” 汪子熙 ”: