Export all contact data
How to export contact data to JSON, including facets and interactions.
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.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 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 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
}
}
}
}