写点什么

使用 nodejs 和 Java 访问远程服务器的服务

作者:Jerry Wang
  • 2021 年 12 月 01 日
  • 本文字数:2641 字

    阅读完需:约 9 分钟

使用nodejs和Java访问远程服务器的服务

既然这篇文章用的是 nodejs 和 Java 访问远程服务器的服务,那么咱们先用另一门编程语言,SAP 的 ABAP(我日常工作使用得最多的编程语言)来开发一个服务吧。


这是我用 ABAP 编程语言实现服务的类:ZCL_DIS_HTTP_HANDLER



这个类实现了一个接口 IF_HTTP_EXTENSION 里定义的一个方法 HANDLE_REQUEST.



大家可以不用被 ABAP 陌生的语法所迷惑,其实和 Java 的 Servlet 是相通的。



我画了张图:



我的这个远程服务很简单,就是无论调用者发送什么,都简单地返回一个文本:HELLO WORLD。


现在我们就分别用 nodejs 和 Java 去消费。

nodejs


看下 nodejs 代码。


下面的代码传入 Buffer 的 WANGJER 为我的用户名,123456 为密码。使用的登录方式是 Basic Authentication。


var request = require('request');
var getTokenOptions = {
url: "https://<此处填入您的远程服务器上的服务地址url",
method: "GET",
headers: {
'Authorization': 'Basic ' + new Buffer("WANGJER:123456").toString('base64')
}
};
function getToken() {
return new Promise(function(resolve,reject){
var requestC = request.defaults({jar: true});
console.time("Remote");
requestC(getTokenOptions,function(error,response,body){
console.log("response body: " + body);
console.timeEnd("Remote");
resolve(response);
});
});
}
getToken().then(function(response) {
});
复制代码


执行结果:算上网络开销总共花了 1.4 秒。


java

下面代码的 WANGJER 为我的用户名,123456 为密码。使用的登录方式是 Basic Authentication。


package connectivity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.commons.codec.binary.Base64;
import java.util.stream.Collectors;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
public class OPSystemConnectivity
{
static public void main(String[] arg){
final HttpGet get = new HttpGet("https://<您远程服务器的url");
HttpClient httpClient = HttpClientBuilder.create().build();
String raw = "WANGJER:123456";
String encoded = Base64.encodeBase64String(raw.getBytes());
get.setHeader("Authorization", "Basic " + encoded);
HttpResponse response;
try {
long start = System.currentTimeMillis();
response = httpClient.execute(get);
InputStream stream = response.getEntity().getContent();
String result = new BufferedReader(new InputStreamReader(stream)).lines()
.parallel().collect(Collectors.joining(" "));
System.out.println("response: " + result);
stream.close();
long end = System.currentTimeMillis() - start;
System.out.println("time consumed: " + end );
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException | UnsupportedOperationException e) {
e.printStackTrace();
}
}
}
复制代码


执行结果,耗时和 nodejs 差不多。



注意,用本文介绍的方法不仅能访问远程服务器的服务,也能达到资源下载的目标:比如下载某服务器上的图片,mp3 等。只需要把对应资源的 url 传入系统即可。



我们从 SAP CRM,Cloud for Customer(简称 C4C)和 S/4HANA 这三个产品分别来看看。

SAP CRM

我们使用所谓的 Application Enhancement Tool(AET)来创建扩展字段。首先在 Personalize 里将 Configuration 模式打开,这样才能够直接在浏览器里创建扩展字段。



把这个“Enable configuration mode”的勾选中,就打开了 Configuration 模式了。



比如我想在下面这个界面上添加一个新的字段。非常简单,点这个齿轮进入 Configuration mode - 配置模式:



当前界面可以添加新字段的区域自动被高亮成了蓝色:



然后我随便在高亮区域处点一下鼠标左键,从弹出的对话框中点击按钮“Create Field”来创建新的字段。



这个新字段从技术上来说得从属于某一个 BO 模型的某个节点上,所以此处我选择了 ORDERADM_H 这个节点。



然后就是指定这个字段的标签,数据类型,字段长度等等。此处我新建的字段标签为“city name”:



点击 Save and Generate 进行字段创建:



之后该字段就出现在 UI 界面上了:



现在可以在 UI 上对该字段进行值的维护了:



根据扩展字段进行搜索的功能也是自动实现的:



以上就是 SAP CRM 自定义字段的创建和使用。

SAP Cloud for Customer

同样,点 Edit->Edit Master Layout 进入编辑模式:



比如我想在下图 Additional Information 这个区域增加一些新的字段,只需要把鼠标放上去,就会弹出一个悬浮的工具栏:



选择 Add Fields 就能开始新字段的添加了:



和 CRM 一样,需要维护扩展字段的类型:



同 SAP CRM 相比,C4C 的扩展字段除了 UI 之外,还能放到其他模型上,比如放到 Adobe Form template 上:



以及加到 Report data source 里:



以及加到 Enterprise search 里:



以及加到 extension scenario 里去。



以上图的 extension scenario 为例:意思就是如果一个 Opportunity 上的扩展字段值为 A,那么这个 Opportunity 生成的后续文档 Service Request,其同名扩展字段的值也为 A。


扩展字段也能自动加到 SAP 标准的 Web Service 和 OData service 上:




保存之后,可以给该扩展字段赋值。


S/4HANA

同 SAP CRM 和 SAP C4C 直接在想添加扩展字段的 UI 上进行字段创建不同,S/4HANA 采取的方式是首先统一创建扩展字段,然后用户再决定将这些字段放到哪些 UI 上去。


S/4HANA launchpad 的 Custom Fields and Logic 这个 tile 专门负责扩展字段的创建工作:



这次我想在 S/4HANA 的物料主数据上创建扩展字段,所以从 Business Context 的下拉菜单里选择了 Product Master General。


字段标签维护成“Jerry extension field on MARA”,类型为 Text,长度为 20。



然后点击标签页“UIs and Reports", 点击 I_PRODUCTWD 和 MD_C_PRODUCT_MAINTAIN_MDLD 对应的 Enable Usage 按钮:




完毕之后点保存,再点发布按钮,确保扩展字段的状态处于发布状态(Published)。



点这个按钮:



点"Adapt UI"按钮:



屏幕右上角提示当前已经处于“Adaption”模式了:



点右键,从“Available Fields”的列表里选择我之前创建的扩展字段“JDK Minimum version”:



然后终端用户就能针对该扩展字段进行编辑了:



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


发布于: 1 小时前阅读数: 5
用户头像

Jerry Wang

关注

个人微信公众号:汪子熙 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。

评论

发布
暂无评论
使用nodejs和Java访问远程服务器的服务