[SalesForce] Cannot retrieve fields from a Shared Data Extension using the SOAP API

I have a Data Extension which exists in the Shared Data Extensions directory and is available to all Business Units. I want to use the SOAP API to retrieve fields from this Data Extension.

I've tried the following SOAP envelopes in my request:

1. Standard Envelope

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header>
      <fueloauth xmlns="http://exacttarget.com">insertAccessToken</fueloauth>
  </soapenv:Header>
   <soapenv:Body>
      <RetrieveRequestMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
         <RetrieveRequest>
            <ObjectType>DataExtensionObject[CFC5D020-6256-4ADC-84A6-72BCE042C351]</ObjectType>
            <Properties>FUNDID</Properties>
         </RetrieveRequest>
      </RetrieveRequestMsg>
   </soapenv:Body>
</soapenv:Envelope>

2. Query All Accounts Option

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header>
      <fueloauth xmlns="http://exacttarget.com">insertAccessToken</fueloauth>
  </soapenv:Header>
   <soapenv:Body>
      <RetrieveRequestMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
         <RetrieveRequest>
            <ObjectType>DataExtensionObject[CFC5D020-6256-4ADC-84A6-72BCE042C351]</ObjectType>
            <QueryAllAccounts>true</QueryAllAccounts>
            <Properties>FUNDID</Properties>
         </RetrieveRequest>
      </RetrieveRequestMsg>
   </soapenv:Body>
</soapenv:Envelope>

3. Query individual MID Option

Note: I've tried using the MID of the parent and child Business Unit

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header>
      <fueloauth xmlns="http://exacttarget.com">insertAccessToken</fueloauth>
  </soapenv:Header>
   <soapenv:Body>
      <RetrieveRequestMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
         <RetrieveRequest>
            <ObjectType>DataExtensionObject[CFC5D020-6256-4ADC-84A6-72BCE042C351]</ObjectType>
            <Client><ID>7230771</ID></Client>
            <Properties>FUNDID</Properties>
         </RetrieveRequest>
      </RetrieveRequestMsg>
   </soapenv:Body>
</soapenv:Envelope>

Response

I always get the following response:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope>
    <soap:Header>
        ...
    </soap:Header>
    <soap:Body>
        <RetrieveResponseMsg
            xmlns="http://exacttarget.com/wsdl/partnerAPI">
            <OverallStatus>Error: Invalid object name 'C7231594.Fund Details'.</OverallStatus>
            <RequestID>c735f5c2-ae59-4c67-8fb9-f4b9aa518b2e</RequestID>
        </RetrieveResponseMsg>
    </soap:Body>
</soap:Envelope>

Note that the DE name is 'Fund Details'. I get the same error with different Shared Data Extensions, however if the DE is in the Data Extensions directory (or in subfolder) then my request works fine.

Any ideas how to retrieve fields from a Shared Data Extension using the SOAP API?

Best Answer

According to this discussion with some SFMC folks, all you need to do is set the ClientID to the parent MID to access the shared Data Extensions.

My first thought was to use the ent. prefix, but that's only for DE Names, not external keys.

Related Topic