写点什么

使用 Node.js 消费 SAP Cloud for Customer 上的 Web service

作者:Jerry Wang
  • 2021 年 11 月 18 日
  • 本文字数:1889 字

    阅读完需:约 6 分钟

使用 Node.js 消费SAP Cloud for Customer上的Web service

Jerry 在公众号文章C4C和微信集成系列教程里曾经使用 nodejs 去消费 C4C 提供的标准 webservice。


看一个具体例子:C4C 里 Individual Customers 可以维护 Social User Profile,在 Jerry 上面的公众号文章里,正是把微信用户的 open ID 维护到 Social User Profile 的 SocialMediaAccountUserID 字段去,如下图所示。



那么已知一个 Social Profile ID,如何用 nodejs 通过 Web Service 的方式获得该 Profile 明细?


首先到 Administrator->Input and Output Management->Service Explorer 中取得标准的查询 Social User profile 的 web service:


https://<host name>/sap/bc/srt/scs/sap/requestforsocialmediauserprofi



然后使用 nodejs module request 给这个 url 发一个 HTTP post 请求。


您可以参考我github上的源代码。



var request = require('request');var config = require("../../config.js");
function getSocialMediaProfile(profileID) {
console.log("Jerry trace begin ***********************************"); console.log("url: " + config.socialMediaProfileGetEndPoint); console.log("config.credential_qxl: " + config.credential_qxl);
var ogetSocialMediaProfileOptions = { url: config.socialMediaProfileGetEndPoint, method: "POST", headers: { "content-type": "text/xml", 'Authorization': 'Basic ' + new Buffer(config.credential_qxl).toString('base64') }, body: '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:glob="http://sap.com/xi/SAPGlobal20/Global"><soapenv:Header/><soapenv:Body><glob:SocialMediaUserProfileRequest_sync>' +'<SocialMediaUserProfileSelectionByElements>' +'<SelectionBySocialMediaUserProfileID>' +'<InclusionExclusionCode>I</InclusionExclusionCode>' +'<IntervalBoundaryTypeCode>1</IntervalBoundaryTypeCode>' +'<LowerBoundarySocialMediaUserProfileID >' + profileID + '</LowerBoundarySocialMediaUserProfileID>' +'</SelectionBySocialMediaUserProfileID>' +'</SocialMediaUserProfileSelectionByElements>' +'</glob:SocialMediaUserProfileRequest_sync></soapenv:Body></soapenv:Envelope>' };
console.log("body: " + ogetSocialMediaProfileOptions.body); console.log("Jerry trace end ***********************************");
return new Promise(function(resolve,reject){ request(ogetSocialMediaProfileOptions,function(error,response,body){
console.log("Jerry web service response: " + body); var soapreg = /.*<SocialMediaUserAccountID>(.*)<\/SocialMediaUserAccountID>.*/; var soapresult = soapreg.exec(body); if( soapresult.length === 2){ resolve(soapresult[1]); } }); }); }
module.exports = getSocialMediaProfile;
复制代码


将上述代码另存为文件 getSocialMediaProfileTest.js, 直接使用 node getSocialMediaProfileTest.js 执行。


从 console 能观察到发送的 HTTP post 请求的 body 和返回的响应内容:




使用代码获得 Netweaver 里某个 software component 和 C4C 的版本


有同事问如何通过代码的方式获得 Netweaver 里某个 Software component 的版本信息,以及 Cloud for Customer(C4C)的版本信息。

Netweaver

点了 Detail 按钮后:




这些版本信息存在表 CVERS 里:


C4C

C4C 的版本号在 Help->About SAP Hybris Cloud for Customer 里能看到:




通过如下 Javascript 代码能获得 C4C 版本号:


var app = sap.client.getCurrentApplication();var setting = app.getAppConfig();
复制代码



当我试图部署一个应用到 SAP 云平台的 neo 环境时:



指定 Compute Unit Size 为 Lite:



点击 Deploy 按钮,遇到如下错误消息:there is no compute unit quota for subaccount:


解决方案

使用命令行 neo set-quota --account wc4e460ce --user i042416 --host int.sap.hana.ondemand.com --amount lite:1 给 subaccount 分配一个计算单元:



分配之后,使用如下命令查看 subaccount 状态,确保分配成功:



neo account:list-accounts --account wc4e460ce --user i042416 --host int.sap.hana.ondemand.com




之后即可成功部署:



neo 的 console 客户端命令参考SAP help


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

Jerry Wang

关注

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

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

评论

发布
暂无评论
使用 Node.js 消费SAP Cloud for Customer上的Web service