Manage Data in Data Extensions

This page contains information about managing data in data extensions via the SOAP API.

Why Manage Data in Data Extensions

Using the SOAP API to manage data in data extensions allows you to use data extensions in your interactions with Marketing Cloud while maintaining a tight integration with your system or development environment. Data contained within data extensions can be used to better target or exclude individual subscribers from mailing lists or store more data about subscribers for later use.

How to Manage Data in Data Extensions

Use the sample code below as a model to construct your own API calls.

Create

Sample PHP Code

<?php
require('exacttarget_soap_client.php');
$wsdl = 'https://YOUR_SUBDOMAIN.soap.marketingcloudapis.com/etframework.wsdl';
try
{
        /* Create the Soap Client */
        $client = new Marketing CloudSoapClient($wsdl, array('trace'=>1));
        /* Set username and password here */
        $client->username = 'username';
        $client->password = 'password';
$DE = new Marketing Cloud_DataExtensionObject();
        $DE->CustomerKey="UpdateTest_Key";
        $apiProperty1 =new Marketing Cloud_APIProperty();
        $apiProperty1->Name="SubscriberKey";
        $apiProperty1->Value="PHP_DE_Key";
        $apiProperty2 =new Marketing Cloud_APIProperty();
        $apiProperty2->Name="EmailAddress";
        $apiProperty2->Value="help@example.com";
        $apiProperty3 =new Marketing Cloud_APIProperty();
        $apiProperty3->Name="Name";
        $apiProperty3->Value="PHP_Name";

        $apiProperty4 =new  Marketing Cloud_APIProperty();     
        $apiProperty4->Name="PhoneNumber";
        $apiProperty4->Value="5555555555";

        $DE->Properties=array($apiProperty1,$apiProperty2,$apiProperty3,$apiProperty4);
        $object1 = new SoapVar($DE, SOAP_ENC_OBJECT, 'DataExtensionObject', "http://exacttarget.com/wsdl/partnerAPI");
        $request = new Marketing Cloud_CreateRequest();
        $request->Options = NULL;
        $request->Objects = array($object1);
        echo "break6: make request object<br>";
        //print_r($request);
        $results = $client->Create($request);
        var_dump($results);
} catch (SoapFault $e) {
    var_dump($e);
}
print "Request: \n".
$client->__getLastRequestHeaders() ."\n";
print "Request: \n".
$client->__getLastRequest() ."\n";
print "Response: \n".
$client->__getLastResponseHeaders()."\n";
print "Response: \n".
$client->__getLastResponse()."\n";
echo "complete";
?>

SOAP Request

<soap-ENV:Body>
      <ns1:CreateRequest>
         <ns1:Options/>
         <ns1:Objects xsi:type="ns1:DataExtensionObject">
            <ns1:CustomerKey>UpdateTest_Key</ns1:CustomerKey>
            <ns1:Properties>
               <ns1:Property>
                  <ns1:Name>SubscriberKey</ns1:Name>
                  <ns1:Value>PHP_DE_Key</ns1:Value>
               </ns1:Property>
               <ns1:Property>
                  <ns1:Name>EmailAddress</ns1:Name>
                  <ns1:Value>help@example.com</ns1:Value>
               </ns1:Property>
               <ns1:Property>
                  <ns1:Name>Name</ns1:Name>
                  <ns1:Value>PHP_Name</ns1:Value>
               </ns1:Property>
               <ns1:Property>
                  <ns1:Name>PhoneNumber</ns1:Name>
                  <ns1:Value>5555555555</ns1:Value>
               </ns1:Property>
            </ns1:Properties>
         </ns1:Objects>
      </ns1:CreateRequest>
   </SOAP-ENV:Body>

Retrieve

Sample .NET Code

PartnerAPIWse proxy = DefaultProxy;
APIObject[] Results = null;
RetrieveRequest request = new RetrieveRequest();
SimpleFilterPart sfp = null;
string status = null;
string requestID = null;
request.ObjectType = "DataExtensionObject[RequestControlData]";
request.Properties = new string[] { "_CustomObjectKey", "RequestStatus", "RequestType", "RequestParameters" };
sfp = new etpf.SimpleFilterPart();
sfp.Property = "Status";
sfp.SimpleOperator = SimpleOperators.equals;
sfp.Value = new string[] { "Name" };
request.Filter = sfp;

Response

do
{
  status = proxy.Retrieve(request, out requestID, out Results);
  for (int i = 0; i < Results.Length; i++)
  {
     etpf.DataExtensionObject deo = Results[i] as etpf.DataExtensionObject;
     for (int j = 0; j < deo.Properties.Length; j++)
     {
        Console.Write(string.Format("{0}-{1}     ", deo.Properties[j].Name, deo.Properties[j].Value));
     }
     Console.WriteLine();
  }
  request = new etpf.RetrieveRequest();
  request.ContinueRequest = requestID;
} while (status.Equals("MoreDataAvailable"));

Update

The sample code below demonstrates how to update values in a data extension. The data extension must have at least one primary column.

Sample .NET Code

The code below updates the name column using the PhoneNumber field (PhoneNumber is the primary key).

public void testUpdateValueInNameColumn(){
            string requestID;
            string status;
            DataExtensionObject de = new DataExtensionObject();
            de.CustomerKey = "UpdateTest_Key";
            de.Keys = new APIProperty[1];
            de.Keys[0] = new APIProperty();
            //Primary Key column
            de.Keys[0].Name = "PhoneNumber";
            de.Keys[0].Value = "5555555555";
            de.Properties = new APIProperty[1];
            de.Properties[0] = new APIProperty();
            de.Properties[0].Name = "Name";
            de.Properties[0].Value = "John Doe";
            UpdateOptions options = new UpdateOptions();
            options.SaveOptions = new SaveOption[] {new SaveOption()};
            options.SaveOptions[0].PropertyName = "DataExtensionObject";
            options.SaveOptions[0].SaveAction = SaveAction.UpdateAdd;
            UpdateResult[] results = soapClient.Update(options, new APIObject[] {de}, out requestID, out status);
            Console.Write("Test");
        }

Sample Java Code (Axis 1.4)

public void testUpdateDataInDE() throws RemoteException {
    Soap stub = init();
    //StatusField
    DataExtensionObject dataExtensionObject = new DataExtensionObject();
    dataExtensionObject.setCustomerKey("Test2_Key");
    APIProperty a1 = new APIProperty();//primary key in DE is EmailId Column
    a1.setName("EmailId");
    a1.setValue("help@example.com");
    dataExtensionObject.setKeys(new APIProperty[]{a1});
    APIProperty a2 = new APIProperty();  //Updating status field to  new value
    a2.setName("StatusField");
    a2.setValue("Active");
    dataExtensionObject.setProperties(new APIProperty[]{a2});

    UpdateOptions updateOptions = new UpdateOptions();
    SaveOption option = new SaveOption();
    option.setPropertyName("DataExtensionObject");
    option.setSaveAction(SaveAction.UpdateOnly);
    updateOptions.setSaveOptions(new SaveOption[]{option});
    UpdateRequest updateRequest = new UpdateRequest(updateOptions, new APIObject[]{dataExtensionObject});
    UpdateResponse updateResponse = stub.update(updateRequest);
    System.out.println("Response :: " + updateResponse.getOverallStatus());
}
public void testCreateDataExtension() throws RemoteException {
    Soap stub = init();
    DataExtensionField field3 = new DataExtensionField();
    field3.setName("UniqueKey");
    field3.setFieldType(DataExtensionFieldType.Text);
    dataExtension.setSendableDataExtensionField(field3);
    Attribute a = new Attribute();
    a.setName("Subscriber Key");
    a.setValue("");
    dataExtension.setSendableSubscriberField(a);
    DataExtensionField field4 = new DataExtensionField();
    field4.setName("EmailAddress");
    field4.setFieldType(DataExtensionFieldType.EmailAddress);
    dataExtension.setFields(new DataExtensionField[]{field1, field2, field3,field4});
      //  dataExtension.setTemplate(dataExtensionTemplate);
          dataExtension.setIsSendable(true);
    CreateRequest createRequest = new CreateRequest();
    createRequest.setObjects(new APIObject[]{dataExtension});
    createRequest.setOptions(new CreateOptions());
    CreateResponse createResponse = stub.create(createRequest);
    System.out.println("CreateResponse ::: " + createResponse.getOverallStatus());
}

PHP

<?php
require('exacttarget_soap_client.php');
$wsdl = 'https://YOUR_SUBDOMAIN.soap.marketingcloudapis.com/etframework.wsdl';
try{
       /* Create the Soap Client */
       $client = new Marketing CloudSoapClient($wsdl, array('trace'=>1));
        /* Set username and password here */
        $client->username = 'username';
        $client->password = 'password';
$DE = new Marketing Cloud_DataExtensionObject();
        $DE->CustomerKey="UpdateTest_Key";            //Same as external key in Marketing Cloud

     /*Update can happen only if you have PrimaryKey column.IN this Example PhoneNumber is primary Key in DataExtension*/
        $apiPropertyKey = new Marketing Cloud_APIProperty();
        $apiPropertyKey->Name="PhoneNumber";
        $apiPropertyKey->Value="5555555555";
        $DE->Keys[] = $apiPropertyKey;        
        $apiProperty1 =new Marketing Cloud_APIProperty();
        $apiProperty1->Name="Name";
        $apiProperty1->Value="PHP_Name_New";        
        $DE->Properties=array($apiProperty1);
        $object1 = new SoapVar($DE, SOAP_ENC_OBJECT, 'DataExtensionObject', "http://exacttarget.com/wsdl/partnerAPI");
        $updateOptions = new Marketing Cloud_UpdateOptions();
         /*% Marketing Cloud_SaveOption */
         $saveOption = new Marketing Cloud_SaveOption();                
         $saveOption->PropertyName="DataExtensionObject";
         $saveOption->SaveAction=ExactTarget_SaveAction::UpdateAdd;
         $updateOptions->SaveOptions[] = new SoapVar($saveOption, SOAP_ENC_OBJECT, 'SaveOption', "http://exacttarget.com/wsdl/partnerAPI");
         // Apply options and object to request
         $request = new Marketing Cloud_UpdateRequest();
         $request->Options = $updateOptions;
         $request->Objects = array($object1);
         $results = $client->Update($request);

    } catch (SoapFault $e) {
    var_dump($e);
    }
    Print "Request: \n".
    $client->__getLastRequestHeaders() ."\n";
    print "Request: \n".
    $client->__getLastRequest() ."\n";
    print "Response: \n".
    $client->__getLastResponseHeaders()."\n";
    print "Response: \n".
    $client->__getLastResponse()."\n";
?>

SOAP Request

<s:Bodyxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UpdateRequestxmlns="http://exacttarget.com/wsdl/partnerAPI">
            <Options>
            </Options>
<Objectsxsi:type="DataExtensionObject">
                  <PartnerKey xsi:nil="true">
                  </PartnerKey>
                  <ObjectID xsi:nil="true">
                  </ObjectID>
                  <CustomerKey>Sandbox_DE</CustomerKey>
                  <Properties>
                        <Property>
                              <Name>PrimaryID</Name>
                              <Value>1</Value>
                        </Property>
                        <Property>
                              <Name>EmailAddress</Name>
                              <Value>acruz@example.com</Value>
                        </Property>
                        <Property>
                              <Name>FirstName</Name>
                              <Value>Angel</Value>
                        </Property>
                        <Property>
                              <Name>LastName</Name>
                              <Value>Cruz</Value>
                        </Property>
                  </Properties>
            </Objects>
</UpdateRequest>
</s:Body>

Delete

As long as the data extension has a primary key, you can use the code below to delete the row. The code below represents a data extension with one primary key. If multiple primary keys exist, those fields would need to be specified.

string requestID;
string status;
DataExtensionObject de = new DataExtensionObject();
de.CustomerKey = "product_data_extension";
de.Keys = new APIProperty[1];
de.Keys[0] = new APIProperty();
de.Keys[0].Name = "item_name";
de.Keys[0].Value = "WhirlWind 6000";
DeleteOptions options = new DeleteOptions();
DeleteResult[] results = IntegrationFramework.Delete(options, new APIObject[] { de }, out requestID, out status);

Upsert

This function updates existing information and inserts new information as necessary.

foreach (int issueId in bugs.Keys)
             {
                 DataExtensionObject row = new DataExtensionObject();
                 row.CustomerKey = "cr";
                 row.Properties = new APIProperty[10];
                 row.Properties[0] = new APIProperty();
                 row.Properties[0].Name = "ID";
                 row.Properties[0].Value = bugs[issueId].ID.ToString();
                 row.Properties[1] = new APIProperty();
                 row.Properties[1].Name = "Project";
                 row.Properties[1].Value = Request.QueryString["BG_USER_01"].Replace("'", "");
                 row.Properties[2] = new APIProperty();
                 row.Properties[2].Name = "Summary";
                 row.Properties[2].Value = bugs[issueId].Summary;
                 row.Properties[3] = new APIProperty();
                 row.Properties[3].Name = "Priority";
                 row.Properties[3].Value = bugs[issueId].Priority;
                 row.Properties[4] = new APIProperty();
                 row.Properties[4].Name = "Status";
                 row.Properties[4].Value = bugs[issueId].Status;
                 row.Properties[5] = new APIProperty();
                 row.Properties[5].Name = "AssignedTo";
                 row.Properties[5].Value = bugs[issueId].AssignedTo;
                 row.Properties[6] = new APIProperty();
                 row.Properties[6].Name = "DetectedBy";
                 row.Properties[6].Value = bugs[issueId].DetectedBy;
                 // Comments
                 if (bugs[issueId].Comments != null)
                 {
                     row.Properties[7] = new APIProperty();
                     row.Properties[7].Name = "Comments";
                     row.Properties[7].Value = bugs[issueId].Comments;
                 }
                 else
                 {
                     row.Properties[7] = new NullAPIProperty();
                     row.Properties[7].Name = "Comments";
                 }
                 // Description
                 if (bugs[issueId].Description != null)
                 {
                     row.Properties[8] = new APIProperty();
                     row.Properties[8].Name = "Description";
                     row.Properties[8].Value = bugs[issueId].Description;
                 }
                 else
                 {
                     row.Properties[8] = new NullAPIProperty();
                     row.Properties[8].Name = "Description";
                 }
                 // SalesforceID
                 if (bugs[issueId].SalesforceID != null)
                 {
                     row.Properties[9] = new APIProperty();
                     row.Properties[9].Name = "SalesforceID";
                     row.Properties[9].Value = bugs[issueId].SalesforceID.ToString();
                 }
                 else
                 {
                     row.Properties[9] = new NullAPIProperty();
                     row.Properties[9].Name = "SalesforceID";
                 }

                 objects.Add(row);

             }

             APIObject[] apiObjects = new APIObject[objects.Count];
             for(int i = 0; i<objects.Count; i++)
             {
                 apiObjects[i] = (APIObject)objects[i];
             }

             UpdateOptions uo = new UpdateOptions();
             uo.SaveOptions = new SaveOption[1];
             uo.SaveOptions[0] = new SaveOption();
             uo.SaveOptions[0].PropertyName = "DataExtensionObject";
             uo.SaveOptions[0].SaveAction = SaveAction.UpdateAdd;

             UpdateResult[] updateResults = et.Update(uo, apiObjects, out requestID, out status);
             Page.Controls.Add(new LiteralControl(String.Format("Update:{0}<br>",status)));

             objects = new ArrayList();
             foreach(UpdateResult uResult in updateResults)
             {
                 DataExtensionUpdateResult deur = (DataExtensionUpdateResult)uResult;
                 Page.Controls.Add(new LiteralControl(String.Format("Result[{0}]: {1} ({3}) - {2}<br>",deur.OrdinalID, deur.StatusCode, deur.StatusMessage, deur.ErrorCode)));
                 if (deur.KeyErrors != null)
                 {
                     foreach (DataExtensionError dee in deur.KeyErrors)
                     {
                         Page.Controls.Add(new LiteralControl(String.Format("Errors[{0}]: {1}: {2}<br>", dee.Name, dee.ErrorCode, dee.ErrorMessage)));
                     }
                 }
                 if (deur.ValueErrors != null)
                 {
                     foreach (DataExtensionError dee in deur.ValueErrors)
                     {
                         Page.Controls.Add(new LiteralControl(String.Format("Errors[{0}]: {1}: {2}<br>", dee.Name, dee.ErrorCode, dee.ErrorMessage)));
                     }
                 }
             }

SOAP Request

<soap:Body>
      <UpdateRequest xmlns="http://exacttarget.com/wsdl/partnerAPI">
         <Options>
            <SaveOptions>
               <SaveOption>
                  <PropertyName>DataExtensionObject</PropertyName>
                  <SaveAction>UpdateAdd</SaveAction>
               </SaveOption>
            </SaveOptions>
         </Options>
         <Objects xsi:type="DataExtensionObject">
            <CustomerKey>UpdateTest_Key</CustomerKey>
            <Keys>
               <Key>
                  <Name>PhoneNumber</Name>
                  <Value>5555555555</Value>
               </Key>
            </Keys>
            <Properties>
               <Property>
                  <Name>Name</Name>
                  <Value>John Doe</Value>
               </Property>
            </Properties>
         </Objects>
      </UpdateRequest>
   </soap:Body>

SOAP Response

<soap:Body>
      <UpdateResponse xmlns="http://exacttarget.com/wsdl/partnerAPI">
         <Results xsi:type="DataExtensionUpdateResult">
            <StatusCode>OK</StatusCode>
            <StatusMessage>Updated DataExtensionObject</StatusMessage>
            <OrdinalID>0</OrdinalID>
            <Object xsi:type="DataExtensionObject">
               <ObjectID xsi:nil="true"/>
               <CustomerKey>UpdateTest_Key</CustomerKey>
               <Properties>
                  <Property>
                     <Name>Name</Name>
                     <Value>John Doe</Value>
                  </Property>
               </Properties>
               <Keys>
                  <Key>
                     <Name>PhoneNumber</Name>
                     <Value>5555555555</Value>
                  </Key>
               </Keys>
            </Object>
         </Results>
         <RequestID>e3901f3a-c866-4227-a912-eafd4ff191d0</RequestID>
         <OverallStatus>OK</OverallStatus>
      </UpdateResponse>

Add Data

Sample PHP Code

<?php
require('exacttarget_soap_client.php');
$wsdl = 'https://YOUR_SUBDOMAIN.soap.marketingcloudapis.com/etframework.wsdl';
try
{
        /* Create the Soap Client */
        $client = new Marketing CloudSoapClient($wsdl, array('trace'=>1));
        /* Set username and password here */
        $client->username = 'username';
        $client->password = 'password';
$DE = new Marketing Cloud_DataExtensionObject();
        $DE->CustomerKey="UpdateTest_Key";                //Same as external key in Marketing Cloud
        $apiProperty1 =new Marketing Cloud_APIProperty();
        $apiProperty1->Name="SubscriberKey";
        $apiProperty1->Value="PHP_DE_Key";
        $apiProperty2 =new Marketing Cloud_APIProperty();
        $apiProperty2->Name="EmailAddress";
        $apiProperty2->Value="acruz@example.com";
        $apiProperty3 =new Marketing Cloud_APIProperty();
        $apiProperty3->Name="Name";
        $apiProperty3->Value="PHP_Name";

        $apiProperty4 =new  Marketing Cloud_APIProperty();     
        $apiProperty4->Name="PhoneNumber";
        $apiProperty4->Value="5555555555";

        $DE->Properties=array($apiProperty1,$apiProperty2,$apiProperty3,$apiProperty4);
        $object1 = new SoapVar($DE, SOAP_ENC_OBJECT, 'DataExtensionObject', "http://exacttarget.com/wsdl/partnerAPI");
        $request = new Marketing Cloud_CreateRequest();
        $request->Options = NULL;
        $request->Objects = array($object1);
        echo "break6: make request object<br>";
        //print_r($request);
        $results = $client->Create($request);
        var_dump($results);
} catch (SoapFault $e) {
    var_dump($e);
}
print "Request: \n".
$client->__getLastRequestHeaders() ."\n";
print "Request: \n".
$client->__getLastRequest() ."\n";
print "Response: \n".
$client->__getLastResponseHeaders()."\n";
print "Response: \n".
$client->__getLastResponse()."\n";
echo "complete";
?>

SOAP Request

<soap-ENV:Body>
      <ns1:CreateRequest>
         <ns1:Options/>
         <ns1:Objects xsi:type="ns1:DataExtensionObject">
            <ns1:CustomerKey>UpdateTest_Key</ns1:CustomerKey>
            <ns1:Properties>
               <ns1:Property>
                  <ns1:Name>SubscriberKey</ns1:Name>
                  <ns1:Value>PHP_DE_Key</ns1:Value>
               </ns1:Property>
               <ns1:Property>
                  <ns1:Name>EmailAddress</ns1:Name>
                  <ns1:Value>bgogineni@test.com</ns1:Value>
               </ns1:Property>
               <ns1:Property>
                  <ns1:Name>Name</ns1:Name>
                  <ns1:Value>PHP_Name</ns1:Value>
               </ns1:Property>
               <ns1:Property>
                  <ns1:Name>SSN</ns1:Name>
                  <ns1:Value>21321</ns1:Value>
               </ns1:Property>
            </ns1:Properties>
         </ns1:Objects>
      </ns1:CreateRequest>
   </SOAP-ENV:Body>

Data Extensions