/// <summary> /// You can explicitly request a single interaction, but you must provide both the contact ID and the interaction ID. /// Most external systems won't have this data, but it could be useful if you want to load details of an interaction results from a search /// and return additional facet data. /// </summary> /// <param name="cfg">The xConnect client configuration to use to make connections</param> /// <param name="contactId">The contact the interaction is associated with</param> /// <param name="interactionId">The interaction event identifier</param> /// <returns></returns> public virtual async Task <Interaction> GetInteraction(XConnectClientConfiguration cfg, Guid contactId, Guid interactionId) { Logger.WriteLine("Retrieving interaction for contact with ID: '{0}'. Interaction ID: '{1}'.", contactId, interactionId); using (var client = new XConnectClient(cfg)) { try { //Get the interaction reference that will be used to execute the lookup var interactionReference = new InteractionReference(contactId, interactionId); //Define the facets that should be expanded var expandOptions = new InteractionExpandOptions(new string[] { IpInfo.DefaultFacetKey }); expandOptions.Contact = new RelatedContactExpandOptions(new string[] { PersonalInformation.DefaultFacetKey }); expandOptions.Expand <WebVisit>(); //Query the client for the interaction var interaction = await client.GetAsync <Interaction>(interactionReference, expandOptions); //Show the information about the interaction Logger.WriteInteraction(interaction); return(interaction); } catch (XdbExecutionException ex) { // Deal with exception Logger.WriteError("Exception creating interaction", ex); } } return(null); }
public async Task <ActionResult> RegisterInteractionsExportToJson() { using (IXdbContext client = SitecoreXConnectClientConfiguration.GetClient()) { var interactionFacets = client.Model.Facets.Where(c => c.Target == EntityType.Interaction).Select(x => x.Name); var contactFacets = client.Model.Facets.Where(c => c.Target == EntityType.Contact).Select(x => x.Name); var expandOptions = new InteractionExpandOptions(interactionFacets.ToArray()) { Contact = new RelatedContactExpandOptions(contactFacets.ToArray()) }; InteractionDataSourceOptionsDictionary interactionDataSourceOptionsDictionary = new InteractionDataSourceOptionsDictionary(expandOptions, 1000, 1000); var workerOptions = new Dictionary <string, string>(); var taskId = await _taskManager.RegisterDistributedTaskAsync( interactionDataSourceOptionsDictionary, new DistributedWorkerOptionsDictionary( "XcExport.Cortex.Workers.ExportInteractionsToJson, XcExport.Cortex", workerOptions), null, TimeSpan.FromHours(1)); return(Json(new { TaskId = taskId.ToString() }, JsonRequestBehavior.AllowGet)); } }
public void ReportInteractionsForExistingContact(Contact existingContact, XConnect.Client.XConnectClient client) { IReadOnlyCollection <IInteractionReference> interactions = existingContact.Interactions; var i = 0; Console.WriteLine("Interaction count: " + interactions.Count); Console.WriteLine(""); // Cycle through all interactions foreach (Interaction interaction in interactions) { i++; var ipinfo = interaction.GetFacet <IpInfo>(IpInfo.DefaultFacetKey); Console.WriteLine("Interaction #" + i); if (ipinfo != null) { // For each interaction, print out the business name // associated with that interactions' IpInfo Console.WriteLine("\tInteraction business name: " + ipinfo.BusinessName); Console.WriteLine("\tInteraction Id: " + interaction.Id); if (existingContact.Id != null && interaction.Id != null) { InteractionReference interactionReference = new InteractionReference((Guid)existingContact.Id, (Guid)interaction.Id); var contactOptions = new RelatedContactExpandOptions(new string[] { PersonalInformation.DefaultFacetKey }); var facets = new string[] { IpInfo.DefaultFacetKey }; var expandOptions = new InteractionExpandOptions(facets) { Contact = contactOptions }; var interactionB = client.Get <Interaction>(interactionReference, expandOptions); if (interactionB != null) { Console.WriteLine(""); Console.WriteLine("All Interaction Properties"); foreach (var prop in interactionB.GetType().GetProperties()) { Console.WriteLine($"\t{prop.Name} : {prop.GetValue(interactionB, null)}"); } } } } } ReportingHelpers.EnterToProceed(); }
private async Task <IAsyncEntityBatchEnumerator <Interaction> > CreateXConnectQuery(XConnectClient xConnectClient, DateTime startDate, DateTime endDate, int queryBatchSize) { var query = xConnectClient.Interactions .Where(i => i.Events.OfType <PageViewEvent>().Any()) .Where(i => i.StartDateTime > startDate && i.StartDateTime <= endDate); var expandOptions = new InteractionExpandOptions(WebVisit.DefaultFacetKey, IpInfo.DefaultFacetKey) { Contact = new RelatedContactExpandOptions(EmailAddressList.DefaultFacetKey) }; query = query.WithExpandOptions(expandOptions); return(await query.GetBatchEnumerator(queryBatchSize)); }
internal async Task ExecuteAsync(XConnect.Client.XConnectClient client) { try { var reportingHelper = new ReportingHelpers(); var result0 = client.Contacts.ToEnumerable().Count(); Console.WriteLine($"Total contacts: " + result0.ToString()); // Use InteractionsCache instead of client.Contacts.Where(x => x.Interactions.Any()) as not all search providers support joins var results = await client.Contacts.Where(c => c.InteractionsCache().InteractionCaches.Any()).GetBatchEnumerator(); Console.WriteLine("Contacts with Interactions: " + results.TotalCount); var results2 = await client.Contacts.Where(c => c.LastModified > DateTime.UtcNow.AddHours(-10)).GetBatchEnumerator(); Console.WriteLine("Updated 10hrs ago: " + results2.TotalCount); var results3 = await client.Contacts.Where(c => c.GetFacet <PersonalInformation>().JobTitle == Const.XConnect.JobTitles.ProgrammerWriter).GetBatchEnumerator(); Console.WriteLine(Const.XConnect.JobTitles.ProgrammerWriter + " : " + results3.TotalCount); var targetFacets = new string[] { IpInfo.DefaultFacetKey }; var targetContact = new RelatedContactExpandOptions(PersonalInformation.DefaultFacetKey); var expandOptions = new InteractionExpandOptions(targetFacets) { Contact = targetContact }; var results4 = await client.Interactions .Where(i => i.EndDateTime > DateTime.UtcNow.AddHours(-10)) .WithExpandOptions(expandOptions) .GetBatchEnumerator(); Console.WriteLine("Interactions < 10hrs old: " + results4.TotalCount); ReportingHelpers.EnterToProceed(); var interactionNumber = 0; while (await results4.MoveNext()) { // Loop through interactions in current batch foreach (var interaction in results4.Current) { interactionNumber++; Console.WriteLine("Interaction #" + interactionNumber); var ipInfoFacet = interaction.GetFacet <IpInfo>(IpInfo.DefaultFacetKey); reportingHelper.ReportIpInfoFacet(ipInfoFacet); var contact = interaction.Contact; if (contact != null) { var realContact = contact as Contact; reportingHelper.ReportRealContact(realContact); } Console.WriteLine(); } ReportingHelpers.EnterToProceed(); } } catch (Exception ex) { throw; } }