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
评论