syncCustomObjects
Acepta una matriz de objetos personalizados para crear o actualizar, hasta un máximo de 100 por llamada. Devuelve el resultado (estado) de la operación (CREATED, UPDATED, FAILED, UNCHANGED, SKIPPED) y los objetos personalizados procesados. La API se llama en uno de los tres modos de funcionamiento:
- INSERT - sólo insertar objetos nuevos, omitir objetos existentes
- UPDATE: solo actualizar objetos existentes, omitir objetos nuevos
- UPSERT - insertar objetos nuevos y actualizar objetos existentes
En una sola llamada de API, algunas actualizaciones pueden realizarse correctamente y otras pueden fallar. Se devuelve un mensaje de error por cada error.
Para los objetos personalizados aprovisionados con la nueva interfaz de usuario de objetos personalizados, solo los campos designados como dedupe
campos en la interfaz de usuario se pueden pasar como atributos en CustomObjKeyList
. Los campos de vínculo que no son dedupe
campos deben pasarse como atributo en customObjAttributeList
.
Solicitud
Solicitar XML
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
<SOAP-ENV:Header>
<ns1:AuthenticationHeader>
<mktowsUserId>demo17_1_809934544BFABAE58E5D27</mktowsUserId>
<requestSignature>ca67d597ced5bfce7f638e96204d6e1f38d3ffe7</requestSignature>
<requestTimestamp>2013-08-20T10:26:07-07:00</requestTimestamp>
</ns1:AuthenticationHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:paramsSyncCustomObjects>
<objTypeName>RoadShow</objTypeName>
<customObjList>
<customObj>
<customObjKeyList>
<attribute>
<attrName>MKTOID</attrName>
<attrValue>1090177</attrValue>
</attribute>
<attribute>
<attrName>rid</attrName>
<attrValue>rid1</attrValue>
</attribute>
</customObjKeyList>
<customObjAttributeList>
<attribute>
<attrName>city</attrName>
<attrValue>SanMateo</attrValue>
</attribute>
<attribute>
<attrName>zip</attrName>
<attrValue>94404</attrValue>
</attribute>
<attribute>
<attrName>state</attrName>
<attrValue>California</attrValue>
</attribute>
</customObjAttributeList>
</customObj>
</customObjList>
<operation>UPSERT</operation>
</ns1:paramsSyncCustomObjects>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML de respuesta
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">
<SOAP-ENV:Body>
<ns1:successSyncCustomObjects>
<result>
<syncCustomObjStatusList>
<syncCustomObjStatus>
<objTypeName>Roadshow</objTypeName>
<customObjKeyList>
<attribute>
<attrName>MKTOID</attrName>
<attrType xsi:nil="true" />
<attrValue>1090177</attrValue>
</attribute>
<attribute>
<attrName>rid</attrName>
<attrType xsi:nil="true" />
<attrValue>rid1</attrValue>
</attribute>
</customObjKeyList>
<status>UPDATED</status>
<error xsi:nil="true" />
</syncCustomObjStatus>
</syncCustomObjStatusList>
</result>
</ns1:successSyncCustomObjects>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Código de muestra: PHP
<?php
$debug = true;
$marketoSoapEndPoint = ""; // CHANGE ME
$marketoUserId = ""; // CHANGE ME
$marketoSecretKey = ""; // CHANGE ME
$marketoNameSpace = "http://www.marketo.com/mktows/";
// Create Signature
$dtzObj = new DateTimeZone("America/Los_Angeles");
$dtObj = new DateTime('now', $dtzObj);
$timeStamp = $dtObj->format(DATE_W3C);
$encryptString = $timeStamp . $marketoUserId;
$signature = hash_hmac('sha1', $encryptString, $marketoSecretKey);
// Create SOAP Header
$attrs = new stdClass();
$attrs->mktowsUserId = $marketoUserId;
$attrs->requestSignature = $signature;
$attrs->requestTimestamp = $timeStamp;
$authHdr = new SoapHeader($marketoNameSpace, 'AuthenticationHeader', $attrs);
$options = array("connection_timeout" => 15, "location" => $marketoSoapEndPoint);
if ($debug) {
$options["trace"] = 1;
}
// Create Request
$keyAttrib1 = new stdClass();
$keyAttrib1->attrName = 'MKTOID';
$keyAttrib1->attrValue = '1090177';
$keyAttrib2 = new stdClass();
$keyAttrib2->attrName = 'rid';
$keyAttrib2->attrValue ='rid1';
$keyAttrList = array($keyAttrib1, $keyAttrib2);
$keyList = new stdClass();
$keyList->attribute = $keyAttrList;
$attr1 = new stdClass();
$attr1->attrName = 'city';
$attr1->attrValue = 'SanMateo';
$attr2 = new stdClass();
$attr2->attrName = 'zip';
$attr2->attrValue = '94404';
$attr3 = new stdClass();
$attr3->attrName = 'state';
$attr3->attrValue = 'California';
$attrListArray = array($attr1, $attr2, $attr3);
$attrList = new stdClass();
$attrList->attribute = $attrListArray;
$custObj = new stdClass();
$custObj->customObjKeyList = $keyList;
$custObj->customObjAttributeList = $attrList;
$custObjList = new stdClass();
$custObjList->customObj = array($custObj);
$params = new stdClass();
$params->operation = 'UPSERT';
$params->objTypeName = 'RoadShow';
$params->customObjList = $custObjList;
$soapClient = new SoapClient($marketoSoapEndPoint ."?WSDL", $options);
try {
$leads = $soapClient->__soapCall('syncCustomObjects', array($params), $options, $authHdr);
// print_r($leads);
}
catch(Exception $ex) {
var_dump($ex);
}
if ($debug) {
print "RAW request:\n" .$soapClient->__getLastRequest() ."\n";
print "RAW response:\n" .$soapClient->__getLastResponse() ."\n";
}
?>
Código de muestra: Java
import com.marketo.mktows.*;
import java.net.URL;
import javax.xml.namespace.QName;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
public class SyncCustomObjects {
public static void main(String[] args) {
System.out.println("Executing Sync Custom Objects");
try {
URL marketoSoapEndPoint = new URL("CHANGE ME" + "?WSDL");
String marketoUserId = "CHANGE ME";
String marketoSecretKey = "CHANGE ME";
QName serviceName = new QName("http://www.marketo.com/mktows/", "MktMktowsApiService");
MktMktowsApiService service = new MktMktowsApiService(marketoSoapEndPoint, serviceName);
MktowsPort port = service.getMktowsApiSoapPort();
// Create Signature
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String text = df.format(new Date());
String requestTimestamp = text.substring(0, 22) + ":" + text.substring(22);
String encryptString = requestTimestamp + marketoUserId ;
SecretKeySpec secretKey = new SecretKeySpec(marketoSecretKey.getBytes(), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretKey);
byte[] rawHmac = mac.doFinal(encryptString.getBytes());
char[] hexChars = Hex.encodeHex(rawHmac);
String signature = new String(hexChars);
// Set Authentication Header
AuthenticationHeader header = new AuthenticationHeader();
header.setMktowsUserId(marketoUserId);
header.setRequestTimestamp(requestTimestamp);
header.setRequestSignature(signature);
// Create Request
ParamsSyncCustomObjects request = new ParamsSyncCustomObjects();
request.setObjTypeName("RoadShow");
JAXBElement<SyncOperationEnum> operation = new ObjectFactory().createParamsSyncCustomObjectsOperation(SyncOperationEnum.UPSERT);
request.setOperation(operation);
ArrayOfCustomObj customObjects = new ArrayOfCustomObj();
CustomObj customObj = new CustomObj();
ArrayOfAttribute arrayOfKeyAttributes = new ArrayOfAttribute();
Attribute attr = new Attribute();
attr.setAttrName("MKTOID");
attr.setAttrValue("1090177");
Attribute attr2 = new Attribute();
attr2.setAttrName("rid");
attr2.setAttrValue("rid1");
arrayOfKeyAttributes.getAttributes().add(attr);
arrayOfKeyAttributes.getAttributes().add(attr2);
JAXBElement<ArrayOfAttribute> keyAttributes = new ObjectFactory().createCustomObjCustomObjKeyList(arrayOfKeyAttributes);
customObj.setCustomObjKeyList(keyAttributes);
ArrayOfAttribute arrayOfValueAttributes = new ArrayOfAttribute();
Attribute city = new Attribute();
city.setAttrName("city");
city.setAttrValue("SanMateo");
Attribute zip = new Attribute();
zip.setAttrName("zip");
zip.setAttrValue("94404");
Attribute state = new Attribute();
state.setAttrName("state");
state.setAttrValue("California");
arrayOfValueAttributes.getAttributes().add(city);
arrayOfValueAttributes.getAttributes().add(state);
arrayOfValueAttributes.getAttributes().add(zip);
JAXBElement<ArrayOfAttribute> valueAttributes = new ObjectFactory().createCustomObjCustomObjAttributeList(arrayOfValueAttributes);
customObj.setCustomObjAttributeList(valueAttributes);
customObjects.getCustomObjs().add(customObj);
SuccessSyncCustomObjects result = port.syncCustomObjects(request, header);
JAXBContext context = JAXBContext.newInstance(SuccessSyncCustomObjects.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(result, System.out);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
Código de muestra: Ruby
require 'savon' # Use version 2.0 Savon gem
require 'date'
mktowsUserId = "" # CHANGE ME
marketoSecretKey = "" # CHANGE ME
marketoSoapEndPoint = "" # CHANGE ME
marketoNameSpace = "http://www.marketo.com/mktows/"
#Create Signature
Timestamp = DateTime.now
requestTimestamp = Timestamp.to_s
encryptString = requestTimestamp + mktowsUserId
digest = OpenSSL::Digest.new('sha1')
hashedsignature = OpenSSL::HMAC.hexdigest(digest, marketoSecretKey, encryptString)
requestSignature = hashedsignature.to_s
#Create SOAP Header
headers = {
'ns1:AuthenticationHeader' => { "mktowsUserId" => mktowsUserId, "requestSignature" => requestSignature,
"requestTimestamp" => requestTimestamp
}
}
client = Savon.client(wsdl: 'http://app.marketo.com/soap/mktows/2_3?WSDL', soap_header: headers, endpoint: marketoSoapEndPoint, namespaces: namespaces, open_timeout: 90, read_timeout: 90, namespace_identifier: :ns1, env_namespace: 'SOAP-ENV')
#Create Request
request = {
:obj_type_name => "RoadShow",
:custom_obj_list => {
:custom_obj => {
:custom_obj_key_list => {
:attribute => {
:attr_name => "MKTOID",
:attr_value => "1090177" },
:attribute! => {
:attr_name => "rid",
:attr_value => "rid1" }
},
:custom_obj_attribute_list => {
:attribute => {
:attr_name => "city",
:attr_value => "SanMateo" },
:attribute! => {
:attr_name => "zip",
:attr_value => "94404" },
:attribute! => {
:attr_name => "state",
:attr_value => "California" }
}
}
},
:operation => "UPSERT"
}
response = client.call(:sync_custom_objects, message: request)
puts response