Beispiel #1
0
        /// <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));
            }
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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;
            }
        }