本文介绍笔者在 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 的具体例子。