使用 nodejs 和 Java 访问远程服务器的服务
![使用nodejs和Java访问远程服务器的服务](https://static001.geekbang.org/infoq/2d/2de4c0967d92ce550abd0082d2b3ca04.jpeg)
既然这篇文章用的是 nodejs 和 Java 访问远程服务器的服务,那么咱们先用另一门编程语言,SAP 的 ABAP(我日常工作使用得最多的编程语言)来开发一个服务吧。
这是我用 ABAP 编程语言实现服务的类:ZCL_DIS_HTTP_HANDLER
![](https://static001.geekbang.org/infoq/b8/b8ed914555df78382cc797a6cd1d289c.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
这个类实现了一个接口 IF_HTTP_EXTENSION 里定义的一个方法 HANDLE_REQUEST.
![](https://static001.geekbang.org/infoq/4b/4b3e96cbb6eafef788b933c0f87fb93b.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
大家可以不用被 ABAP 陌生的语法所迷惑,其实和 Java 的 Servlet 是相通的。
![](https://static001.geekbang.org/infoq/12/1230f4a820bf842ac8025f5dfb891154.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
我画了张图:
![](https://static001.geekbang.org/infoq/8d/8dab6a83969932308e5c461620965dc4.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
我的这个远程服务很简单,就是无论调用者发送什么,都简单地返回一个文本:HELLO WORLD。
现在我们就分别用 nodejs 和 Java 去消费。
nodejs
![](https://static001.geekbang.org/infoq/cc/cccd8aeeb16ff81faf008416184ea11c.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
看下 nodejs 代码。
下面的代码传入 Buffer 的 WANGJER 为我的用户名,123456 为密码。使用的登录方式是 Basic Authentication。
执行结果:算上网络开销总共花了 1.4 秒。
![](https://static001.geekbang.org/infoq/41/410c64654f6f30d39030695fec1dc38a.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
java
下面代码的 WANGJER 为我的用户名,123456 为密码。使用的登录方式是 Basic Authentication。
执行结果,耗时和 nodejs 差不多。
![](https://static001.geekbang.org/infoq/58/58ff099051c0aaaf035ec9d250ac058a.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
注意,用本文介绍的方法不仅能访问远程服务器的服务,也能达到资源下载的目标:比如下载某服务器上的图片,mp3 等。只需要把对应资源的 url 传入系统即可。
![](https://static001.geekbang.org/infoq/e1/e1e215ebb30c1ca7db1462a8b783756f.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
我们从 SAP CRM,Cloud for Customer(简称 C4C)和 S/4HANA 这三个产品分别来看看。
SAP CRM
我们使用所谓的 Application Enhancement Tool(AET)来创建扩展字段。首先在 Personalize 里将 Configuration 模式打开,这样才能够直接在浏览器里创建扩展字段。
![](https://static001.geekbang.org/infoq/14/144ccb121ac4f0365e40c2bb661784ae.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
把这个“Enable configuration mode”的勾选中,就打开了 Configuration 模式了。
![](https://static001.geekbang.org/infoq/ba/bad34345467f37e4fd773afe15b08603.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
比如我想在下面这个界面上添加一个新的字段。非常简单,点这个齿轮进入 Configuration mode - 配置模式:
![](https://static001.geekbang.org/infoq/96/968b889289f242c7410307a59a5332e5.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
当前界面可以添加新字段的区域自动被高亮成了蓝色:
![](https://static001.geekbang.org/infoq/d2/d2a273198bf96b4b527467e8e8229639.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
然后我随便在高亮区域处点一下鼠标左键,从弹出的对话框中点击按钮“Create Field”来创建新的字段。
![](https://static001.geekbang.org/infoq/a1/a15d612ce4a0e6780dfcf27aba4adbb0.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
这个新字段从技术上来说得从属于某一个 BO 模型的某个节点上,所以此处我选择了 ORDERADM_H 这个节点。
![](https://static001.geekbang.org/infoq/87/87e5fb2a9d9aed93b72eb6cae90de418.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
然后就是指定这个字段的标签,数据类型,字段长度等等。此处我新建的字段标签为“city name”:
![](https://static001.geekbang.org/infoq/0b/0b2e6dac4028febf6992dd1a4d45558c.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
点击 Save and Generate 进行字段创建:
![](https://static001.geekbang.org/infoq/73/7392bc500d6c88a3f46b573441b95bc5.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
之后该字段就出现在 UI 界面上了:
![](https://static001.geekbang.org/infoq/9f/9f9a15aa99fbf7d3f065368d63fcd8b5.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
现在可以在 UI 上对该字段进行值的维护了:
![](https://static001.geekbang.org/infoq/5f/5f18634e6213605d4e999e1ce5171211.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
根据扩展字段进行搜索的功能也是自动实现的:
![](https://static001.geekbang.org/infoq/68/680335199cec95fb81bfbcc59f975fbb.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
以上就是 SAP CRM 自定义字段的创建和使用。
SAP Cloud for Customer
同样,点 Edit->Edit Master Layout 进入编辑模式:
![](https://static001.geekbang.org/infoq/ee/ee32348ac9dbdbc56944cb726650d1ca.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
比如我想在下图 Additional Information 这个区域增加一些新的字段,只需要把鼠标放上去,就会弹出一个悬浮的工具栏:
![](https://static001.geekbang.org/infoq/3f/3f732e59581b0a245394f3b0de5a334a.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
选择 Add Fields 就能开始新字段的添加了:
![](https://static001.geekbang.org/infoq/7a/7afb62e9db90f3fad58498d9fd5e9d50.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
和 CRM 一样,需要维护扩展字段的类型:
![](https://static001.geekbang.org/infoq/a7/a7e63dedfd60c7ac38f94bb545b771f7.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
同 SAP CRM 相比,C4C 的扩展字段除了 UI 之外,还能放到其他模型上,比如放到 Adobe Form template 上:
![](https://static001.geekbang.org/infoq/7f/7ffb8895e41ee0a8b64a8d9cd14c10a9.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
以及加到 Report data source 里:
![](https://static001.geekbang.org/infoq/8e/8e251a459f4a2cbdb7e28530e4d9d577.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
以及加到 Enterprise search 里:
![](https://static001.geekbang.org/infoq/d0/d055b75c94999074071d91887b105116.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
以及加到 extension scenario 里去。
![](https://static001.geekbang.org/infoq/5c/5c58104f5ace40fb4c9662389898ba1a.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
以上图的 extension scenario 为例:意思就是如果一个 Opportunity 上的扩展字段值为 A,那么这个 Opportunity 生成的后续文档 Service Request,其同名扩展字段的值也为 A。
扩展字段也能自动加到 SAP 标准的 Web Service 和 OData service 上:
![](https://static001.geekbang.org/infoq/8a/8a97d0ffeab8544844d9447a1cd620f7.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
![](https://static001.geekbang.org/infoq/96/96d32953e466722117d6a0ad1da26563.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
保存之后,可以给该扩展字段赋值。
![](https://static001.geekbang.org/infoq/c0/c05a85357eb004ca1fa930b65e4e9686.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
S/4HANA
同 SAP CRM 和 SAP C4C 直接在想添加扩展字段的 UI 上进行字段创建不同,S/4HANA 采取的方式是首先统一创建扩展字段,然后用户再决定将这些字段放到哪些 UI 上去。
S/4HANA launchpad 的 Custom Fields and Logic 这个 tile 专门负责扩展字段的创建工作:
![](https://static001.geekbang.org/infoq/7e/7eb88afac03d21b3596edc14ef811a0e.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
这次我想在 S/4HANA 的物料主数据上创建扩展字段,所以从 Business Context 的下拉菜单里选择了 Product Master General。
字段标签维护成“Jerry extension field on MARA”,类型为 Text,长度为 20。
![](https://static001.geekbang.org/infoq/82/8299e3234007b79a560649660f5e81d3.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
然后点击标签页“UIs and Reports", 点击 I_PRODUCTWD 和 MD_C_PRODUCT_MAINTAIN_MDLD 对应的 Enable Usage 按钮:
![](https://static001.geekbang.org/infoq/70/70f29afec9268cb2457d16d1e2dfd93e.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
![](https://static001.geekbang.org/infoq/9a/9a4492b630ccc92440319ff1b6b7bb73.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
完毕之后点保存,再点发布按钮,确保扩展字段的状态处于发布状态(Published)。
![](https://static001.geekbang.org/infoq/b4/b44d7ac05133b47ddab91df2db300a80.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
点这个按钮:
![](https://static001.geekbang.org/infoq/fb/fbfc7a6eabf1f570190e6cb0f7b50d6f.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
点"Adapt UI"按钮:
![](https://static001.geekbang.org/infoq/a8/a86cb0fe76eca91e01559488285b1e3f.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
屏幕右上角提示当前已经处于“Adaption”模式了:
![](https://static001.geekbang.org/infoq/e8/e815e3c022be7828ac8c82faabb69835.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
点右键,从“Available Fields”的列表里选择我之前创建的扩展字段“JDK Minimum version”:
![](https://static001.geekbang.org/infoq/12/127ca378ce98732ef9fb6a15a61726d4.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
然后终端用户就能针对该扩展字段进行编辑了:
![](https://static001.geekbang.org/infoq/0e/0e32e0527dfcb0493eeb4065ecc64945.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
要获取更多 Jerry 的原创技术文章,请关注公众号"汪子熙".
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/bd4fda89c805d7e8412dd65e3】。文章转载请联系作者。
评论