Export all contact data
The right to data portability gives individuals the right to obtain and reuse their personal data for either their own use or to be used for a different service. Use expand options to retrieve all available data for a single contact, including facets and interactions.
Exported JSON will include PII (Personally Identifiable Information) if you choose to extract facets marked [PIISensitive]
.
The following example demonstrates how to export a contact’s data to JSON, including facets and interactions. The example uses the client.Model.Facets
property to build a list of contact and interaction facets to return. This property returns facet keys that are available in the current model. In a Sitecore context, models are loaded from a configuration file. When instantiating the xConnect Client API in a non-Sitecore context, you can pass an array of models into the XConnectClientConfiguration
object.
using Newtonsoft.Json;
using Sitecore.XConnect;
using Sitecore.XConnect.Client;
using Sitecore.XConnect.Client.Serialization;
using System;
using System.Linq;
namespace Documentation.Examples
{
class GetAllData
{
public async void AsyncExample()
{
try
{
using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
{
try
{
var contactReference = new IdentifiedContactReference("twitter", "myrtlemcsitecore");
// Get all available contact facets in current model
var contactFacets = client.Model.Facets.Where(c => c.Target == EntityType.Contact).Select(x => x.Name);
// Get all available interaction facets in current model
var interactionFacets = client.Model.Facets.Where(c => c.Target == EntityType.Interaction).Select(x => x.Name);
var contact = await client.GetAsync<Contact>(contactReference, new ContactExecutionOptions(new ContactExpandOptions(contactFacets.ToArray())
{
Interactions = new RelatedInteractionsExpandOptions(interactionFacets.ToArray())
{
// Get all interactions
EndDateTime = DateTime.MaxValue,
StartDateTime = DateTime.MinValue
}
}));
// Serialize response
// Note special XdbJsonContractResolver - mandatory for serializing xConnect entities
var serializerSettings = new JsonSerializerSettings
{
ContractResolver = new XdbJsonContractResolver(client.Model,
serializeFacets: true,
serializeContactInteractions: true),
Formatting = Formatting.Indented,
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
DefaultValueHandling = DefaultValueHandling.Ignore
};
string allData = JsonConvert.SerializeObject(contact, serializerSettings);
string name = "ContactData.json";
System.IO.File.WriteAllText(name, allData);
}
catch (XdbExecutionException ex)
{
Console.WriteLine("An error occurred");
}
}
}
catch (XdbExecutionException ex)
{
// Handle exception
}
}
public void SyncExample()
{
try
{
using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
{
try
{
var contactReference = new IdentifiedContactReference("twitter", "myrtlemcsitecore");
// Get all available contact facets in current model
var contactFacets = client.Model.Facets.Where(c => c.Target == EntityType.Contact).Select(x => x.Name);
// Get all available interaction facets in current model
var interactionFacets = client.Model.Facets.Where(c => c.Target == EntityType.Interaction).Select(x => x.Name);
var contact = client.Get<Contact>(contactReference, new ContactExecutionOptions(new ContactExpandOptions(contactFacets.ToArray())
{
Interactions = new RelatedInteractionsExpandOptions(interactionFacets.ToArray())
{
// Get all interactions
EndDateTime = DateTime.MaxValue,
StartDateTime = DateTime.MinValue
}
}));
// Serialize response
// Note special XdbJsonContractResolver - mandatory for serializing xConnect entities
var serializerSettings = new JsonSerializerSettings
{
ContractResolver = new XdbJsonContractResolver(client.Model,
serializeFacets: true,
serializeContactInteractions: true),
Formatting = Formatting.Indented,
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
DefaultValueHandling = DefaultValueHandling.Ignore
};
string allData = JsonConvert.SerializeObject(contact, serializerSettings);
string name = "ContactData.json";
System.IO.File.WriteAllText(name, allData);
}
catch (XdbExecutionException ex)
{
Console.WriteLine("An error occurred");
}
}
}
catch (XdbExecutionException ex)
{
// Handle exception
}
}
}
}