在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务
我的前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了在SAP云平台的Neo环境下如何通过SAP Cloud Connector消费ABAP On-Premise系统里的函数。在那篇文章demo程序的Java代码里,我们实际是通过JCO(Java Connector)来远程调用ABAP On-Premise系统里的函数。
今天我们换个环境,试试SAP云平台的CloudFoundry环境。
同时我们也试试换一种方式来消费ABAP On-Premise系统的服务。让我们开发一个Web应用,通过OData的方式显示ABAP On-Premise系统里的产品列表及价格信息。
该例子运行效果如下图所示。
同前一篇文章提到的在SAP云平台的Neo环境里消费ABAP On-Premise函数相比,在CloudFoundry环境里实现同样的需求,所需的步骤要复杂一些。
同Neo环境的部署相比,在CloudFoundry环境下最显著的架构区别就是多了个App Router。为什么CloudFoundry环境下需要这个东西?我的同事李贝宁在他的文章 SAP成都研究院李三郎:SCP Application Router简介 里做过详细阐述。
为了完成这个例子,我们需要部署两个应用到SAP云平台的CloudFoundry环境去,即App Router和Web应用本身。两个例子的完整代码在我的github上:
https://github.com/i042416/CloundFoundry_Connectivity
上图各模块间交互的简单阐述:
1. App Router作为用户访问Web应用的入口。
2. App Router将请求重定向到XSUAA实例,弹出登录界面。该实例负责完成登录认证,稍后会创建它。下图是登录界面在我手机上打开的效果。
3. 登录完成后,App Router将请求重定向到Web应用。
4. Web应用向XSUAA发起两个并行的请求,如图4a和4b所示,获取用于访问接下来第5,第6步的JSON Web Token。
5. Web应用访问Destination实例获取对应配置信息。
6. Web应用将请求发送给Connectivity实例。
7. Connectivity实例将请求通过Secure tunnel(安全隧道)转发给Cloud Connector。
8. Cloud Connector和On-Premise系统都位于Corporate Network里,直接调用其服务。
明白了原理,下面跟着Jerry一起做一做吧。
1. 我前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了Cloud Connector的下载与安装,因此现在我们可以重用之前安装好的Cloud Connector。
点击Add Subaccount按钮,基于CloudFoundry Subaccount创建一个新的配置:
最重要的是维护CloudFoundry Subaccount的ID和用户名(登录邮箱)。
创建一个从Virtual Host到Internal Host的映射关系。Virtual Host的名称可以随便维护,我维护的是my-backend, 记住这个名称,以后会用到。Internal Host我维护的是提供OData服务的On-Premise系统的主机名和端口号。点击Check按钮,确保Cloud Connector能够成功连接On-Premise系统,状态为Reachable。
将On-Premise系统的下列4个ICF服务路径暴露出来:
/sap/bc/lrep
/sap/iwbep
/sap/opu/odata
/sap/public
至此Cloud Connector上的配置完成了。
2. 回顾我们之前介绍的模块交互图,Cloud Connector上的配置无法直接被部署在CloudFoundry上的应用消费。我们还需要在SAP云平台上创建三个不同类型的实例。
首先在SAP云平台Cockpit里创建一个新的Destination,URL字段指向前一步Cloud Connector里创建的Virtual Host。这个Destination的名称也得记录下来,后面会用到。
进入Service Marketplace,创建一个新的XSUAA实例:
这个connectivity-jerry-demo就是稍后我要部署到SAP云平台上的Web应用名称。
创建好的XSUAA实例:
connectivity和destination的实例创建的方式相同,不再赘述。下图是为了完成本文介绍的场景所需的三个不同类型的实例创建好之后的状态截图。
至此SAP云平台上的配置也全部完成。
3. 现在开始Web应用的开发。先看App Router的xs-app.json: 入口文件是index.html, 这个html文件其实就一行代码:
Go to App
点击之后,会跳转到/app/, 而/app/的route配置如下,指向destination “dest-to-app”:
而这个destination对应的真实url维护在App Router的manifest.yml文件中。同样需要在该yml文件的services字段里维护前一步创建的XSUAA实例:
再看Web应用的manifest.yml文件:需要将前一步骤依次创建的三种类型的实例名称分别维护如下图所示:
接下来我们需要进行Web应用里UI5部分的开发,指定产品列表的数据源基于哪一个OData服务。在UI5的controller文件里,指定OData模型的路径为相对路径data-eu。
针对这个相对路径data-eu,在neo-app.json里定义了一个路由,会被重定向到On-Premise系统的标准OData服务EPM_REF_APPS_SHOP_SRV。具体重定向到哪个On-Premise系统是由路由的target字段决定的。在我这个例子里是jerry-abap-backend, 它就是我们之前在SAP云平台Cockpit里创建的Destination。
这个Destination的URL字段指向Cloud Connector的Virtual host,该host又映射到On-Premise系统的主机名和端口号。至此大功告成了,SAP Cloud Connector上的配置,App Router,Web应用,SAP云平台上的connectivity,XSUAA和destination三个实例,这一系列模型犹如一台机器上的一个个零件,协同工作,实现了从Internet Network到Corporate Network的访问场景。
将两个应用部署到SAP云平台的CloudFoundry环境去,点击App Router作为访问的入口,能看到文章开头的产品列表页面。
并且Chrome开发者工具里观察到的网络请求的路径里仅仅包含前文提到的UI5应用的neo-app.json里配置的路由data-eu, 而On-Premise系统的主机名和端口号并未暴露到Cloud环境中。
当然,为了跑这个demo,您需要在On-Premise系统使用事务码/iwfnd/maint_service,为EPM_REF_APPS_SHOP_SRV这个标准的OData服务指定一个后台系统。在我下图的例子里,该服务的后台实现系统我指定成了AG3。
在Java代码里打印实际的url,发现是http://my-backend:80/sap/opu/odata/sap/EPM_REF_APPS_SHOP_SRV/$metadata。
该url里的my-backend:80会被Cloud Connector替换成实际的On-Premise系统的地址并发送到On-Premise系统去。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务相关推荐
- 如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量
本文使用的例子源代码在我的github上. 在我的公众号文章在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务介绍了如何通过Cloud Connector ...
- 使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输
SAP ABAP顾问朋友们,应该都使用过SAPLink这个工具.如果两个ABAP Netweaver系统没有建立起传输路径时,我们无法使用标准的SE10事务码创建传输请求的方式进行这两个系统间的代码传 ...
- SAP云平台CloudFoundry环境试用帐号过期了怎么办
今天我登录SAP云平台的CloudFoundry环境时,收到了下列的提示信息:D Your free trial has expired. To extend your trial period un ...
- ABAP Netweaver, Hybris Commerce和SAP 云平台的登录认证
ABAP Netweaver 在事务码SICF里选择一个服务,在明细页面对Procedure字段点击F1,查看Logon Procedure的帮助文档. 通过这个链接打开对应的帮助文档,可以看到下列七 ...
- 如何将SAP云平台Neo环境的Subaccount注册到IAS服务里
IAS的全称是Identity Authentication Service. 登录SAP云平台的Neo环境,点击trust: configuration type选择成custom,然后点击Gene ...
- ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了
之前Jerry已经写了一系列SAP Cloud Platform ABAP编程环境的文章,当时使用的环境,是SAP专门为SAP社区导师们创建的. 当时也有朋友留言,询问大家何时才能使用到免费的SAP云 ...
- Netweaver和SAP云平台的quota管理
Netweaver 以需要为一个用户上下文(User Context)能够在SAP extended memory区域中分配内存尺寸创建quota为例. 对于Dialog工作进程,使用事务码修改参数 ...
- SAP云平台架构概述
在我们开始SAP云平台的架构之旅之前,让我们先看看SAP已经发布的一些其他云产品.这些云产品方案可以分为公有云和私有云两种. SAP公有云解决方案见下图最右侧,比较著名的有SAP SuccessFac ...
- 如何处理SAP云平台错误消息 there is no compute unit quota for subaccount
当我试图部署一个应用到SAP云平台的neo环境时: 指定Compute Unit Size为Lite: 点击Deploy按钮,遇到如下错误消息:there is no compute unit quo ...
最新文章
- 保洁阿姨看完都会了!java面向对象编程开发证书
- 尺取法——POJ3061
- CentOS通过DNSpod实现动态域名
- 核心概念——节点/边/Combo——内置节点——Ellipse
- can usb tool下载_N1内置CoreELEC、安卓多系统3.9.6.3版发布,更新下载链接
- 电商优秀设计作品展示
- python api接口10060_Python web抓取[错误10060]
- mysql文章列表_MySQL-分享文章列表 - Su的博客
- java试题管理系统
- 计算机网络技术试题 中职,计算机网络技术试题(附答案)中等职业学校.doc
- 【javaWeb微服务架构项目——乐优商城day05】——商品规格参数管理(增、删、改,查已完成),SPU和SKU数据结构,商品查询
- 突发!ST再发涨价函!6月1日起全线涨价!
- 千篇一律的JS运算符,无趣
- 500年前的北大寺物证
- Win10系统忘记开机密码的解决办法
- 树莓派 4B 下 Linux 系统高级命令行
- 您想允许来自未知发布者的以下程序对此计算机进行更改码?
- 毕业后考FRM vs 毕业后工作,差别很大吗?
- EM算法(学习笔记)
- docker部署jar
热门文章
- Java中的ArrayList的初始容量和容量分配
- sklearn自学指南(part22)--支持向量机的分类与回归
- 怎么让电脑屏幕一直亮着_电视机指示灯亮不开机怎么办 电视机故障及维修介绍【详解】...
- SAP 电商云 Spartacus Maintenance branch
- SAP UI5 初学者教程之十二 - 使用 CSS 类对 UI 进行进一步美化试读版
- Web Bundles 学习笔记
- 如何在 SAP CRM WebClient UI 里在 Context node 上下文里访问其他 Context Node 的数据
- SAP Cloud SDK for JavaScript 概述
- 关于 SAP UI5 Table 控件中行合并的实现方式
- 通过一个简单的例子,了解如何单步调试 Cypress 代码