使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
最近Jerry接到一个原型开发的任务,需要在微信里调用ABAP On Premise系统(SAP CRM On-Premise)里的某些函数。具体场景和我之前的公众号文章 Cloud for Customer和微信集成系列教程 描述的场景类似。
区别之处在于Cloud for Customer(C4C)是一个云解决方案,其OData Service/Web Service能够直接被Internet网络上的其他应用消费。而我最近要做的原型开发,需要消费的函数位于部署在Corporate Network里的ABAP On-Premise系统里,无法直接被Internet应用消费。
为了确保Internet应用能够访问Corporate Network系统里的服务,我们需要用到SAP Cloud Connector, 作为一个沟通桥梁。
这篇文章我假设的场景是:开发一个Java Web应用,部署在SAP Cloud Platform(云平台)上。用户在手机微信里访问该应用,调用ABAP On-Premise系统里的函数。
这个场景的主要实现步骤:
下载安装并配置Cloud Connector。Cloud Connector需要和ABAP On-Premise系统同样位于Corporate Network。
在SAP云平台上完成必要配置,同Cloud Connector建立连接。
开发Java Web应用,部署到SAP云平台。
架构图如下所示。

下面是详细步骤介绍。
1. Cloud Connector的安装与配置

安装完成后启动Cloud Connector,确保在操作系统的服务列表里看到Cloud Connector对应的服务:

Cloud Connector的登录界面:

新建一个Connector实例,我命名为Jerry_SCC。Region和Subaccount需要指定成需要连接的SAP云平台的对应字段,这样才能将该Connector实例同对应的SAP云平台建立关联关系。

Connector实例创建并保存后,如下图所示。点击下图左边Jerry_SCC下面的菜单"Cloud To On-Premise":

在这个界面创建从虚拟系统(virtual system)到ABAP On-Premise系统的一个映射关系。我创建的虚拟系统名称为my-backend-system, 映射到一个SAP内部ABAP系统AG3。访问协议(Protocol)指定为RFC。点击检查按钮,如果ABAP系统的信息维护无误,该ABAP系统的状态会被标记为Reachable(可访问)。
Function Name为STFC,Naming Policy为Prefix,意为AG3系统里所有以STFC开头的函数均能通过该Connector实例被访问。

至此Cloud Connector配置完成。
2. SAP云平台上的配置
前一步Cloud Connector配置完成后,在SAP云平台的Cloud Connectors标签页就能看到配置好的实例了。
这一步需要在SAP云平台上创建一个Destination以便Java程序使用。这个Destination和ABAP Netweaver事务码SM59创建的Destination作用相似。

仿照下图的设置创建一个Destination。我的Destination名称为my-backend-system-destination, 这个Destination会在下一步被Java应用消费。注意User和Password需要维护成ABAP On-Premise系统对应的用户名和密码。

点击按钮Check Connection,确保该Destination工作正常。

3. 开发Java应用,使用第2步创建的Destination
该Java应用的全部源代码在我的github上:
这里只讲解核心代码:
(1) 第28行根据Destination名称拿到其实例,名称在第2步SAP云平台的配置里指定。
(2) 第31行,拿到ABAP函数STFC_CONNECTION的句柄。
(3) 第35行,拿到用户从浏览器url里传进来的输入值。
(4) 第38行,将从第35行拿到的用户输入赋给STFC_CONNECTION的输入参数REQUTEXT。
(5) 第42行,执行ABAP函数。
(6) 第45, 46行,得到ABAP函数执行结果。

将这个Java应用从Eclipse部署到SAP云平台。具体步骤参考我的知乎文章:
在微信里测试一下:

输出:

在ABAP系统的STFC_CONNECTION函数体内设置断点,在ABAP调试器里也能观察到从微信传进来的用户输入:

我在我的知乎专栏上写了很多关于SAP云平台的文章,欢迎关注。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:


使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数的更多相关文章
- 如何在SAP云平台的Cloud Foundry环境下添加新的Service(服务)
我想在SAP云平台的Cloud Foundry环境下使用MongoDB的服务,但是我在Service Marketplace上找不到这个服务. cf marketplace返回的结果也没有. 解决方案 ...
- 如何上传HTML5应用到SAP云平台的Cloud Foundry环境下
先使用WebIDE创建一个HTML5应用.New->Project from Template: 从可选模板里选择SAPUI5 Application: 创建一个HTML5 Module,取名为 ...
- 如何将SAP Multi Target应用部署到SAP云平台的Cloud Foundry环境去
SHINA是SAP HANA Interactive Education的缩写,是一个demo应用,用于演示如何开发SAP HANA原生应用. 这个应用包含了sample数据以及HANA数据库表,vi ...
- 用JavaScript访问SAP云平台上的服务遇到跨域问题该怎么办
关于JavaScript的跨域问题(Cross Domain)的讨论, 网上有太多的资源了.国内的程序猿写了非常多的优秀文章,Jerry这里就不再重复了. 直入主题,最近我正在做一个原型开发:通过SA ...
- 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务
我的前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了在SAP云平台的Neo环境下如何通过SAP Cloud Conne ...
- 企业数字化转型与SAP云平台
我们生活在一个数字化时代.信息领域里发展迅猛的数字技术和成本不断降低的硬件设备,正以前所未有的方式改变着我们工作和生活的方式. Digital Mesh 美国一家著名的从事信息技术研究和提供咨询服务的 ...
- 使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输
SAP ABAP顾问朋友们,应该都使用过SAPLink这个工具.如果两个ABAP Netweaver系统没有建立起传输路径时,我们无法使用标准的SE10事务码创建传输请求的方式进行这两个系统间的代码传 ...
- 如何在SAP云平台上使用MongoDB服务
首先按照我这篇文章在SAP云平台上给您的账号分配MongboDB服务:如何在SAP云平台的Cloud Foundry环境下添加新的Service 然后从这个链接下载SAP提供的例子程序. 1. 使用命 ...
- 如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量
本文使用的例子源代码在我的github上. 在我的公众号文章在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务介绍了如何通过Cloud Connector ...
随机推荐
- SqlServer(带中文注释)
using System;using System.Data;using System.Xml;using System.Data.SqlClient;using System.Collections ...
- C#面向对象三大特性之一:封装
面向对象的三大特性:封装.继承.多态. 1.封装概念 封装:每个对象都包含有它能进行操作的所有信息,这个特性称为封装.这样的方法包含在类中,通过类的实例来实现. 2.封装的优点 A.良好的封装能够减少 ...
- [Django笔记] django结构分析
看了一段时间django官方文档,先把自己理解的django目录结构记录一下 目录结构 一个成熟的django项目的结构大致如下: /project/ |-- project/ |-- setting ...
- CF70D Professor's task(动态凸包)
题面 两种操作: 1 往点集S中添加一个点(x,y); 2 询问(x,y)是否在点集S的凸包中. 数据保证至少有一个2操作, 保证刚开始会给出三个1操作, 且这三个操作中的点不共线. 题解 动态凸包板 ...
- java中pojo对象首字母大写导致无法赋值问题
命名规范(文末附有java命名规范)中指出,属性变量命名应采用驼峰命名的方式,即首字母小写,其他单词首字母大写: 但有时候我们对接三方的接口时,想要封装实体类来接受,但是发现接收到的参数的变量首字母是 ...
- Hadoop 2.0完全分布式集群搭建方法(CentOS7+Hadoop 2.7.7)
本文详细介绍搭建4个节点的完全分布式Hadoop集群的方法,Linux系统版本是CentOS 7,Hadoop版本是2.7.7,JDK版本是1.8. 一.准备环境 1. 在VMware worksta ...
- 如何阻止<a>标签的页面跳转
当页面中a标签不需要执行任何页面跳转行为时: 1.标签属性href,使其指向空或不返回任何内容 <a href="javascript:void(0);" >页面不跳转 ...
- 安居客scrapy房产信息爬取到数据可视化(下)-可视化代码
接上篇:安居客scrapy房产信息爬取到数据可视化(下)-可视化代码,可视化的实现~ 先看看保存的数据吧~ 本人之前都是习惯把爬到的数据保存到本地json文件, 这次保存到数据库后发现使用mongod ...
- Unity 行为树-共享变量
一.引言 有以下小场景: 节点A:发现了 敌人. 节点B:追逐敌人. 对于同一个敌人物体,节点AB之间是如何传递数据 的呢? 行为树节点AB之间,需要一个中间变量Temp来传递数据. A发现了敌人,将 ...
- Windows QT 商业版 试用
You're about to evaluate Qt Enterprise - the cross-platform application and UI framework used to dev ...