Get contact with interactions
Get contacts for a range of interactions or for all interactions.
Use RelatedInteractionsExpandOptions
to specify the range of interactions and interaction facets that should be returned with each contact. In the following example, interactions from the last 10 days are returned with each contact, limited to a maximum of 30 interactions. The LocaleInfo
facet is also returned for each interaction if it is present.
var contactsTask = client.GetAsync<Contact>(references, new ContactExpandOptions() { Interactions = new RelatedInteractionsExpandOptions(LocaleInfo.DefaultFacetKey) { EndDateTime = DateTime.UtcNow.AddDays(-10), Limit = 30 } });
The following table describes how to use the RelatedInteractionsExpandOptions
class:
Property | Description |
---|---|
| Read-only property - passed in to the constructor as an array of strings and specifies which facets to return with each interaction |
| The interaction start date/time must be equal to or greater than this value. Use DateTime.MinValue to get the earliest interactions. |
| The interaction end date/time must be equal to or less than this value. Use DateTime.MaxValue to get the most recent interactions. |
| The maximum number of interactions to return between the specified dates. |
The following example demonstrates how to use ContactExpandOptions
and RelatedInteractionsExpandOptions
together. Contacts are returned with the PersonalInformation
facet and any interaction older than ten days, limited to 30 interactions.
using Sitecore.XConnect.Collection.Model; using Sitecore.XConnect.Operations; using System; using System.Collections.Generic; using Sitecore.XConnect; using Sitecore.XConnect.Client; namespace Documentation { public class GetContactWithInteractions { public async void ExampleAsync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var references = new List<Sitecore.XConnect.IEntityReference<Sitecore.XConnect.Contact>>() { // Contact ID new Sitecore.XConnect.ContactReference(new Guid("{A2814105-1F45-E611-52E6-34E6D7117DCB}")), // Username new Sitecore.XConnect.IdentifiedContactReference("twitter", "myrtlesitecore"), // Ad network ID new Sitecore.XConnect.IdentifiedContactReference("adnetwork", "AB973934540244") }; var contactsTask = client.GetAsync<Sitecore.XConnect.Contact>(references, new Sitecore.XConnect.ContactExpandOptions(PersonalInformation.DefaultFacetKey) { Interactions = new Sitecore.XConnect.RelatedInteractionsExpandOptions(LocaleInfo.DefaultFacetKey) { StartDateTime = DateTime.MinValue, EndDateTime = DateTime.UtcNow.AddDays(-10), Limit = 30 } }); var results = await contactsTask; foreach (var result in results) { if (result.Exists) { // Do something var contact = result.Entity; } } } catch (XdbExecutionException ex) { // Manage exceptions } } } public async void Example() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var references = new List<Sitecore.XConnect.IEntityReference<Sitecore.XConnect.Contact>>() { // Contact ID new Sitecore.XConnect.ContactReference(new Guid("{A2814105-1F45-E611-52E6-34E6D7117DCB}")), // Username new Sitecore.XConnect.IdentifiedContactReference("twitter", "myrtlesitecore"), // Ad network ID new Sitecore.XConnect.IdentifiedContactReference("adnetwork", "AB973934540244") }; var results = client.Get<Sitecore.XConnect.Contact>(references, new Sitecore.XConnect.ContactExpandOptions(PersonalInformation.DefaultFacetKey) { Interactions = new Sitecore.XConnect.RelatedInteractionsExpandOptions(LocaleInfo.DefaultFacetKey) { StartDateTime = DateTime.MinValue, EndDateTime = DateTime.UtcNow.AddDays(-10), Limit = 30 } }); foreach (var result in results) { if (result.Exists) { // Do something var contact = result.Entity; } } } catch (XdbExecutionException ex) { // Manage exceptions } } } } }
Set the following minimum and maximum values to return all available interactions with each contact.
var contactsTask = client.GetAsync<Contact>(new Sitecore.XConnect.ContactReference(new Guid("{A2814105-1F45-E611-52E6-34E6D7117DCB}")), new ContactExpandOptions() { Interactions = new RelatedInteractionsExpandOptions() { StartDateTime = DateTime.MinValue, EndDateTime = DateTime.MaxValue, Limit = int.MaxValue } });
You may only want to work with a subset of a contact’s interactions, such as any interaction with the WebVisit
facet. There are two ways to filter a contact’s interactions:
Return all available interactions using
RelatedInteractionsExpandOptions
and filter the collection in memorySearch all interactions and filter by contact ID
In the following example, a contact and all available interactions for that contact are returned using the .Get<Contact>
/.GetAsync method. The collection of interactions is then filtered down to a subset of interactions that have the WebVisit
facet and at least one Outcome
:
using Sitecore.XConnect.Collection.Model; using Sitecore.XConnect; using System; using System.Collections.Generic; using System.Linq; using Sitecore.XConnect.Client; namespace Documentation { public class FilterInteractions { // Async example public async void ExampleAsync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var contactsTask = client.GetAsync<Contact>(new IdentifiedContactReference("twitter", "myrtlesitecore"), new Sitecore.XConnect.ContactExpandOptions(PersonalInformation.DefaultFacetKey) { Interactions = new RelatedInteractionsExpandOptions(WebVisit.DefaultFacetKey) { StartDateTime = DateTime.MinValue, Limit = int.MaxValue } }); var contacts = await contactsTask; foreach (var contact in contacts) { // All interactions var interactions = contact.Entity.Interactions; // Interactions with WebVisit facet and at least one Outcome var interactionsWithOutcomes = interactions.Where(x => x.WebVisit() != null && x.Events.OfType<Outcome>().Any()); } } catch (XdbExecutionException ex) { // Manage exceptions } } } // Sync example public void Example() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var contacts = client.Get<Contact>(new IdentifiedContactReference("twitter", "myrtlesitecore"), new Sitecore.XConnect.ContactExpandOptions(PersonalInformation.DefaultFacetKey) { Interactions = new RelatedInteractionsExpandOptions(WebVisit.DefaultFacetKey) { StartDateTime = DateTime.MinValue, Limit = int.MaxValue } }); foreach (var contact in contacts) { // All interactions var interactions = contact.Entity.Interactions; // Interactions with WebVisit facet and outcome var interactionsWithOutcomes = interactions.Where(x => x.WebVisit() != null && x.Events.OfType<Outcome>().Any()); } } catch (XdbExecutionException ex) { // Manage exceptions } } } } }
In the following example, interaction search is used to retrieve all interactions that have at least one Outcome
and match a particular contact ID:
using Sitecore.XConnect.Collection.Model; using Sitecore.XConnect.Operations; using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Linq; using Sitecore.XConnect.Search; using Sitecore.XConnect; using Sitecore.XConnect.Client; namespace Documentation { public class SearchByContactID { public async void ExampleAsync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var contactID = Guid.Parse("ea991dce-1f9b-443c-84a5-f83b46cbc0f8"); // IMPORTANT: You cannot check facets for null; check a property of the facet instead, such as SiteName for WebVisit var queryable = client.Interactions .Where(x => x.Contact.Id == contactID && x.Events.OfType<Outcome>().Any() && x.WebVisit().SiteName != "") .WithExpandOptions(new InteractionExpandOptions(WebVisit.DefaultFacetKey) { Contact = new RelatedContactExpandOptions(PersonalInformation.DefaultFacetKey) }); var enumerator = await queryable.GetBatchEnumerator(10); while (await enumerator.MoveNext()) { foreach (var item in enumerator.Current) { var listOfOutcomes = item.Events.OfType<Outcome>(); var webFacet = item.WebVisit(); } } } catch (XdbExecutionException ex) { // Handle exception } } } // Sync example public async void Example() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var contactID = Guid.Parse("ea991dce-1f9b-443c-84a5-f83b46cbc0f8"); // IMPORTANT: You cannot check facets for null; check a property of the facet instead, such as SiteName for WebVisit var queryable = client.Interactions .Where(x => x.Contact.Id == contactID && x.Events.OfType<Outcome>().Any() && x.WebVisit().SiteName != "") .WithExpandOptions(new InteractionExpandOptions(WebVisit.DefaultFacetKey) { Contact = new RelatedContactExpandOptions(PersonalInformation.DefaultFacetKey) }); var enumerator = queryable.GetBatchEnumeratorSync(10); while (enumerator.MoveNext()) { foreach (var item in enumerator.Current) { var listOfOutcomes = item.Events.OfType<Outcome>(); var webFacet = item.WebVisit(); } } } catch (XdbExecutionException ex) { // Handle exception } } } } }