写点什么

SAP Marketing Cloud Restful API SDK 使用案例分享

作者:Jerry Wang
  • 2022 年 6 月 21 日
  • 本文字数:4237 字

    阅读完需:约 14 分钟

SAP Marketing Cloud Restful API SDK 使用案例分享

本文介绍笔者在 SAP Marketing Cloud 工作项目中使用 Restful API SDK 过程中积累的一些使用经验。


成功登录 SAP Marketing Cloud 系统之后,可以在菜单"快速启动"->"Manage Contacts"里找到 Marketing Cloud contact 管理应用。单击:



这里就能看到该系统里所有的 contact 列表了。左边的 1218377 是系统 contact 总个数,正下方 Create 就是新建按钮,可以通过这个按钮打开 contact 创建页面。右边的 search bar 就是一个 Google 风格的模糊搜索入口。



这个界面第一次使用的话需要注意一些小技巧。



上图高亮的四个控件实际上是四个过滤器,例如当前系统里并不存在状态为 For Review 的 contact,数字为 0,因此单击这个过滤器后:



表格会显示 0 条数据。这是用户期望的行为,因此大家如果看到表格是空的,不要觉得奇怪。



当单击某条 contact 数据的超链接后,



会跳转到 contact 明细页面. 下图 url 里高亮的 guid 就是这条 contact 在 SAP 数据库里的主键值。


使用 nodejs 对 Marketing Cloud 的 contact 主数据进行修改操作

假设在 Marketing Cloud 有这样一个 contact 主数据:



现在需求是使用编程语言比如 nodejs 修改这个 contact 实例的高亮属性。代码如下:


var config = require("./mcConfig");var request = require('request');
var url = config.tokenURL;
console.log("user: " + config.user + " password: " + config.password); var getTokenOptions = { url: url, method: "GET", json:true, headers: { 'Authorization': 'Basic ' + new Buffer(config.user + ":" + config.password).toString('base64'), "content-type": "application/json", "x-csrf-token" :"fetch" }};
function getToken() { return new Promise(function(resolve,reject){ var requestC = request.defaults({jar: true}); console.log("Step1: get csrf token via url: " + url );
requestC(getTokenOptions,function(error,response,body){ var csrfToken = response.headers['x-csrf-token']; if(!csrfToken){ reject({message:"token fetch error: " + error}); return; } console.log("Step1: csrf token got: " + csrfToken); resolve(csrfToken); }); });}
function updateContact(token){ return new Promise(function(resolve, reject){ var sPostData = "--batch_1f7d-bd35-caed" + "\n" + "Content-Type: multipart/mixed; boundary=changeset_8f9e-9a44-9f9e" + "\n" + "\n" + "--changeset_8f9e-9a44-9f9e" + "\n" + "Content-Type: application/http" + "\n" + "Content-Transfer-Encoding: binary" + "\n" + "\n" + "MERGE Consumers('02000A21209F1EE99CDF1A1FC9AA8065')?sap-client=100 HTTP/1.1" + "\n" + "Cache-Control: max-age=360" + "\n" + "sap-contextid-accept: header" + "\n" + "Accept: application/json" + "\n" + "Accept-Language: en" + "\n" + "DataServiceVersion: 2.0" + "\n" + "MaxDataServiceVersion: 2.0" + "\n" + "x-csrf-token: fQ2Pwfmf0K_LVYoKV9QYUw==" + "\n" + "Content-Type: application/json" + "\n" + //"Content-Length: 215" + "\n" + "\n" + "{\"YY1_CustomerType_ENH\":\"Jerry测试1\"}" + "\n" + "--changeset_8f9e-9a44-9f9e--" + "\n" + "\n" + "--batch_1f7d-bd35-caed--";
var requestC = request.defaults({jar: true}); var createOptions = { url: config.updateContactURL, method: "POST", json:false, headers: { "content-type": "multipart/mixed;boundary=batch_1f7d-bd35-caed", 'x-csrf-token': token }, body:sPostData }; requestC(createOptions,function(error,response,data){ if(error){ reject(error.message); }else { debugger; console.log("Contact updated successfully"); resolve(data); } }); });}
getToken().then(updateContact).catch((error) =>{ console.log("error: " + error.message);});
复制代码


我在 nodejs 代码里把需要更改的字段值赋为"Jerry 测试 1”:执行之后这个属性被成功更新了:



使用 postman 修改 SAP Marketing Cloud contact 主数据

Marketing Cloud 里的 contact 主数据,创建成功后也不是所有字段都能够被修改。在 Personal data 区域的字段是可以被修改的。



比如我在“客户属性”字段里维护了一些值:



然后点保存:



其中第二个 batch 操作是通过一个 roundtrip 读取 contact 模型下多个子节点的数据,和我们这个修改的场景没有关联。使用 postman 进行修改:



body 字段维护以下内容:


--batch_1f7d-bd35-caedContent-Type: multipart/mixed; boundary=changeset_8f9e-9a44-9f9e--changeset_8f9e-9a44-9f9eContent-Type: application/httpContent-Transfer-Encoding: binaryMERGE Consumers('02000A21209F1EE99CDF1A1FC9AA8065')?sap-client=100 HTTP/1.1Cache-Control: max-age=360sap-contextid-accept: headerAccept: application/jsonAccept-Language: enDataServiceVersion: 2.0MaxDataServiceVersion: 2.0x-csrf-token: fQ2Pwfmf0K_LVYoKV9QYUw==Content-Type: application/jsonContent-Length: 215{"__metadata":{"uri":"https://jerry.hybris.com/sap/opu/odata/sap/CUAN_CONTACT_SRV/Consumers('02000A21209F1EE99CDF1A1FC9AA8065')","type":"CUAN_CONTACT_SRV.Consumer"},"YY1_CustomerType_ENH":"Jerry测试2"}--changeset_8f9e-9a44-9f9e----batch_1f7d-bd35-caed--
复制代码


我想修改的字段的新的值为:Jerry 测试 2


执行 postman 后,发现值已经更新了,修改成功


使用 nodejs 创建 Marketing Cloud 的 contact 数据

源代码如下:


var config = require("./mcConfig");var request = require('request');
var url = config.tokenURL;
console.log("user: " + config.user + " password: " + config.password); var getTokenOptions = { url: url, method: "GET", json:true, headers: { 'Authorization': 'Basic ' + new Buffer(config.user + ":" + config.password).toString('base64'), "content-type": "application/json", "x-csrf-token" :"fetch" }};
function getToken() { return new Promise(function(resolve,reject){ var requestC = request.defaults({jar: true}); console.log("Step1: get csrf token via url: " + url );
requestC(getTokenOptions,function(error,response,body){ var csrfToken = response.headers['x-csrf-token']; if(!csrfToken){ reject({message:"token fetch error: " + error}); return; } console.log("Step1: csrf token got: " + csrfToken); resolve(csrfToken); }); });}
function createContact(token){ return new Promise(function(resolve, reject){ var oPostData = {"CountryCode":"CN", "City":"Chengdu", "FirstName":"Jerry4", "LastName":"Wang2", "PostalCode":"610093", "RegionCode":"", "Street":"天府软件园", "HouseNumber":"天府软件园", "DateofBirth":null, "ContactPersonFacets":[ {"Id":"jerry1@sap.com", "IdOrigin":"EMAIL", "Obsolete":false, "Invalid":false}, {"Id":"", "IdOrigin":"PHONE", "Obsolete":false, "Invalid":false}, {"Id":"", "IdOrigin":"MOBILE", "Obsolete":false, "Invalid":false}, {"Id":"", "IdOrigin":"FAX", "Obsolete":false, "Invalid":false} ], "IsConsumer":true, "Filter":{ "MarketingAreaId":"CXXGLOBAL" } }; var requestC = request.defaults({jar: true}); var createOptions = { url: config.createContactURL, method: "POST", json:true, headers: { "content-type": "application/json", 'x-csrf-token': token }, body:oPostData }; requestC(createOptions,function(error,response,data){ if(error){ reject(error.message); }else { var oCreatedContact = data; console.log("created contact ID: " + oCreatedContact.d.ContactPersonId); resolve(data); } }); });}
getToken().then(createContact).catch((error) =>{ console.log("error: " + error.message);});
复制代码


这里我把创建的 contact 的名称字段硬编码成 Jerry4:



使用 nodejs 执行这个 js 文件,输出成功创建的 contact guid:



在 Marketing Cloud UI 上看到这个创建成功的 contact:


总结

本文介绍了 SAP Marketing Cloud 在第一次登陆系统后的初始化方式,以及使用 Node.js 和 Postman 等常用工具,消费 Marketing Cloud Restful API 的具体例子。

发布于: 4 小时前阅读数: 10
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
SAP Marketing Cloud Restful API SDK 使用案例分享_云计算_Jerry Wang_InfoQ写作社区