Пример #1
0
        public static void RegisterCompanyEvent(string companyName)
        {
            var item = Sitecore.Context.Item;

            var pageEventModel = new Sitecore.Analytics.Model.PageEventData()
            {
                PageEventDefinitionId = CompanyEvent,
                ItemId   = item.ID.Guid,
                Name     = "Company Lookup",
                DateTime = DateTime.UtcNow,
                Text     = $"Comopany {companyName} started a visit on the site."
            };

            var pageEventData = new Sitecore.Analytics.Data.PageEventData(pageEventModel);

            Tracker.Current.CurrentPage.Item = new Sitecore.Analytics.Model.ItemData
            {
                Id       = item.ID.Guid,
                Language = item.Language.Name,
                Version  = item.Version.Number
            };

            Tracker.Current.CurrentPage.Register(pageEventData);
            Tracker.Current.Interaction.AcceptModifications();
        }
        public ActionResult RegisterGoal(string goalId, string productId)
        {
            using (var client = SitecoreXConnectClientConfiguration.GetClient())
            {
                try
                {
                    var goal     = Tracker.MarketingDefinitions.Goals[new Guid(goalId)];
                    var pageData = new Sitecore.Analytics.Data.PageEventData(goal.Alias, goal.Id)
                    {
                        Data    = productId,
                        Text    = "Triggered goal from front-end interaction",
                        DataKey = "productId"
                    };

                    Tracker.Current.CurrentPage.Register(pageData);

                    string result = "{success:true}";
                    return(Json(result));
                }
                catch (XdbExecutionException ex)
                {
                    return(new HttpStatusCodeResult(500, "Unable to log interaction."));
                }
            }
        }
        public ActionResult Index(string email)
        {
            string identificationSource = "website";

            Sitecore.Analytics.Tracker.Current.Session.Identify(identificationSource, email);
            var contact = Sitecore.Analytics.Tracker.Current.Contact;
            var emails  = contact.GetFacet <IContactEmailAddresses>("Emails");

            if (!emails.Entries.Contains("personal"))
            {
                emails.Preferred = "personal";
                var personalEmail = emails.Entries.Create("personal");
                personalEmail.SmtpAddress = email;
            }

            var outcome = new Sitecore.Analytics.Outcome.Model.ContactOutcome(
                Sitecore.Data.ID.NewID,
                new Data.ID("{EC97DE22-55CC-4A65-AACB-50435781D7D6}"),
                new Data.ID(Tracker.Current.Contact.ContactId)
                );

            Tracker.Current.RegisterContactOutcome(outcome);

            var pageEventData = new Sitecore.Analytics.Data.PageEventData("Newsletter Signup")
            {
                Text = "user subsribed."
            };

            Tracker.Current.Interaction.CurrentPage.Register(pageEventData);

            return(PartialView("~/Views/SubscribeForm/Confirmation.cshtml"));
        }
        public override void Process(ProcessItemArgs args)
        {
            Assert.ArgumentNotNull((object)args, nameof(args));
            Assert.ArgumentNotNull((object)args.Interaction, nameof(args.Interaction));
            Assert.IsNotNull((object)args.Interaction.CurrentPage, "The current page of the specified interaction is not initialized.");

            var tagNames = GetTagNames(Sitecore.Context.Item);

            var pageData = new Sitecore.Analytics.Data.PageEventData("Taxonomy Page View", Configuration.ConfigSettings.TaxonomyPageViewEventId)
            {
                Data    = tagNames,
                Text    = "Viewed page tagged with taxonomy",
                DataKey = "TagNames"
            };

            args.Interaction.CurrentPage.Register(pageData);
        }
Пример #5
0
        /// <summary>
        /// Products the reviewed.
        /// </summary>
        /// <param name="productCode">The product code.</param>
        /// <param name="productName">Name of the product.</param>
        /// <param name="title">The title.</param>
        /// <param name="description">The description.</param>
        /// <param name="rate">The product rate.</param>
        public virtual void ProductReviewed(string productCode, string productName, string title, string description, string rate)
        {
            Assert.ArgumentNotNull(title, "title");
            Assert.ArgumentNotNull(description, "description");
            Assert.ArgumentNotNull(rate, "rate");
            Assert.ArgumentNotNull(productCode, "productCode");
            Assert.ArgumentNotNull(productName, "productName");

            if (!Tracker.IsActive)
            {
                return;
            }

            AnalyticsHelper analyticsHelper = Context.Entity.Resolve <AnalyticsHelper>();

            Assert.IsNotNull(analyticsHelper, "analyticsHelper");

            string eventDescription = analyticsHelper.GetPageEventDescription(EventConstants.EventProductReviewed);

            if (string.IsNullOrEmpty(eventDescription))
            {
                eventDescription = EventConstants.EventProductReviewed;
            }

            string     text = eventDescription.FormatWith(new { Title = title, Text = description, Rate = rate, ProductName = productName });
            ListString data = new ListString {
                productCode, title, description, rate, productName
            };

            var currentPage = Tracker.Current.CurrentPage;

            if (currentPage == null)
            {
                return;
            }

            var pageEventData = new PageEventData(EventConstants.EventProductReviewed)
            {
                Text = text, Data = data.ToString()
            };

            currentPage.Register(pageEventData);
        }
Пример #6
0
        /// <summary>
        /// Used to read the querystring parameter from a productlink in list and register event in analytics database.
        /// </summary>
        public virtual void FollowListHit()
        {
            if (!Tracker.IsActive)
            {
                return;
            }

            string setting = Settings.GetSetting("Ecommerce.Analytics.EventQueryStringKey");

            UrlString urlString = new UrlString(WebUtil.GetRawUrl());

            string listName = urlString[setting + "_data"] ?? string.Empty;

            AnalyticsHelper analyticsHelper = Context.Entity.Resolve <AnalyticsHelper>();

            Assert.IsNotNull(analyticsHelper, "analyticsHelper");

            string eventDescription = analyticsHelper.GetPageEventDescription(EventConstants.EventUserClickedItemInList);

            if (string.IsNullOrEmpty(eventDescription))
            {
                eventDescription = EventConstants.EventUserClickedItemInList;
            }

            string     text = eventDescription.FormatWith(new { List = listName, ProductName = Sitecore.Context.Item["Title"] });
            ListString data = new ListString {
                listName, Sitecore.Context.Item["Title"]
            };

            var currentPage = Tracker.Current.CurrentPage;

            if (currentPage == null)
            {
                return;
            }

            var pageEventData = new PageEventData(EventConstants.EventUserClickedItemInList)
            {
                Text = text, Data = data.ToString()
            };

            currentPage.Register(pageEventData);
        }
Пример #7
0
        public ActionResult Index(string email)
        {
            // 10.3 Add entered email to session
            Sitecore.Analytics.Tracker.Current.Session.Identify(email);
            string message = "";

            var contact = Sitecore.Analytics.Tracker.Current.Contact;

            var emails = contact.GetFacet <IContactEmailAddresses>("Emails");

            if (!emails.Entries.Contains("personal"))
            {
                var personalEmail = emails.Entries.Create("personal");

                personalEmail.SmtpAddress = email;
                emails.Preferred          = "personal";
                message = "Email Added; ";
            }

            // 10.4 Add Outcome Subscribed
            Sitecore.Data.ID outcomeID = new Sitecore.Data.ID("{C41E28D0-66C4-423F-84D5-09DEABD6294A}");
            Sitecore.Data.ID contactID = new Sitecore.Data.ID(contact.ContactId);

            var co = new Sitecore.Analytics.Outcome.Model.ContactOutcome(Sitecore.Data.ID.NewID, outcomeID, contactID);

            Sitecore.Analytics.Tracker.Current.RegisterContactOutcome(co);

            message += "Subscribed; ";

            // 10 optional
            Sitecore.Analytics.Data.PageEventData pageEvent = new Sitecore.Analytics.Data.PageEventData("Newsletter Signup");

            var page = Sitecore.Analytics.Tracker.Current.CurrentPage;

            page.Register(pageEvent);

            message += "Registered; ";

            TempData["message"] = message;

            return(View("Confirmation"));
        }
Пример #8
0
        /// <summary>
        /// Tabs the selected.
        /// </summary>
        /// <param name="tabName">Name of the tab.</param>
        public virtual void TabSelected(string tabName)
        {
            Assert.ArgumentNotNull(tabName, "tabName");

            if (!Tracker.IsActive)
            {
                return;
            }

            AnalyticsHelper analyticsHelper = Context.Entity.Resolve <AnalyticsHelper>();

            Assert.IsNotNull(analyticsHelper, "analyticsHelper");

            string description = analyticsHelper.GetPageEventDescription(EventConstants.EventTabSelected);

            if (string.IsNullOrEmpty(description))
            {
                description = EventConstants.EventTabSelected;
            }

            string     text = description.FormatWith(new { TabName = tabName, });
            ListString data = new ListString {
                tabName
            };

            var currentPage = Tracker.Current.CurrentPage;

            if (currentPage == null)
            {
                return;
            }

            var pageEventData = new PageEventData(EventConstants.EventTabSelected)
            {
                Text = text, Data = data.ToString()
            };

            currentPage.Register(pageEventData);
        }
Пример #9
0
        /// <summary>
        /// Used to read the querystring parameter from a productlink in list and register event in analytics database.
        /// </summary>
        public virtual void FollowListHit()
        {
            if (!Tracker.IsActive)
            {
                return;
            }

            string setting = Settings.GetSetting("Ecommerce.Analytics.EventQueryStringKey");

            UrlString urlString = new UrlString(WebUtil.GetRawUrl());

            string listName = urlString[setting + "_data"] ?? string.Empty;

            AnalyticsHelper analyticsHelper = Context.Entity.Resolve<AnalyticsHelper>();
            Assert.IsNotNull(analyticsHelper, "analyticsHelper");

            string eventDescription = analyticsHelper.GetPageEventDescription(EventConstants.EventUserClickedItemInList);
            if (string.IsNullOrEmpty(eventDescription))
            {
                eventDescription = EventConstants.EventUserClickedItemInList;
            }

            string text = eventDescription.FormatWith(new { List = listName, ProductName = Sitecore.Context.Item["Title"] });
            ListString data = new ListString { listName, Sitecore.Context.Item["Title"] };

            var currentPage = Tracker.Current.CurrentPage;
            if (currentPage == null)
            {
                return;
            }

            var pageEventData = new PageEventData(EventConstants.EventUserClickedItemInList) { Text = text, Data = data.ToString() };
            currentPage.Register(pageEventData);
        }
Пример #10
0
        /// <summary>
        /// Tabs the selected.
        /// </summary>
        /// <param name="tabName">Name of the tab.</param>
        public virtual void TabSelected(string tabName)
        {
            Assert.ArgumentNotNull(tabName, "tabName");

            if (!Tracker.IsActive)
            {
                return;
            }

            AnalyticsHelper analyticsHelper = Context.Entity.Resolve<AnalyticsHelper>();
            Assert.IsNotNull(analyticsHelper, "analyticsHelper");

            string description = analyticsHelper.GetPageEventDescription(EventConstants.EventTabSelected);
            if (string.IsNullOrEmpty(description))
            {
                description = EventConstants.EventTabSelected;
            }

            string text = description.FormatWith(new { TabName = tabName, });
            ListString data = new ListString { tabName };

            var currentPage = Tracker.Current.CurrentPage;

            if (currentPage == null)
            {
                return;
            }

            var pageEventData = new PageEventData(EventConstants.EventTabSelected) { Text = text, Data = data.ToString() };
            currentPage.Register(pageEventData);
        }
Пример #11
0
        /// <summary>
        /// Products the reviewed.
        /// </summary>
        /// <param name="productCode">The product code.</param>
        /// <param name="productName">Name of the product.</param>
        /// <param name="title">The title.</param>
        /// <param name="description">The description.</param>
        /// <param name="rate">The product rate.</param>
        public virtual void ProductReviewed(string productCode, string productName, string title, string description, string rate)
        {
            Assert.ArgumentNotNull(title, "title");
            Assert.ArgumentNotNull(description, "description");
            Assert.ArgumentNotNull(rate, "rate");
            Assert.ArgumentNotNull(productCode, "productCode");
            Assert.ArgumentNotNull(productName, "productName");

            if (!Tracker.IsActive)
            {
                return;
            }

            AnalyticsHelper analyticsHelper = Context.Entity.Resolve<AnalyticsHelper>();
            Assert.IsNotNull(analyticsHelper, "analyticsHelper");

            string eventDescription = analyticsHelper.GetPageEventDescription(EventConstants.EventProductReviewed);
            if (string.IsNullOrEmpty(eventDescription))
            {
                eventDescription = EventConstants.EventProductReviewed;
            }

            string text = eventDescription.FormatWith(new { Title = title, Text = description, Rate = rate, ProductName = productName });
            ListString data = new ListString { productCode, title, description, rate, productName };

            var currentPage = Tracker.Current.CurrentPage;
            if (currentPage == null)
            {
                return;
            }

            var pageEventData = new PageEventData(EventConstants.EventProductReviewed) { Text = text, Data = data.ToString() };
            currentPage.Register(pageEventData);
        }
Пример #12
0
        public string RegisterAnalyticsEvent(List <string> json)
        {
            var     sitecoreEventName = string.Empty; //0
            var     category          = string.Empty; //1
            var     action            = string.Empty; //2
            var     label             = string.Empty; //3
            var     value             = string.Empty; //4
            var     currencyCode      = string.Empty; //5
            decimal monetaryValue     = 0;            //6
            var     itemId            = Guid.Empty;   //7
            var     pageUrl           = string.Empty; //8
            var     culture           = string.Empty; //9
            var     itemVersion       = 0;            //10
            var     firstName         = string.Empty; //11
            var     lastName          = string.Empty; //12
            var     jobTitle          = string.Empty; //13
            var     email             = string.Empty; //14
            var     clickUrl          = string.Empty; //15
            var     clickText         = string.Empty; //16
            var     isInternalTraffic = string.Empty; //17
            var     position          = string.Empty; //18
            var     mediaItemId       = Guid.Empty;   //19
            var     mediaItemName     = string.Empty; //20
            var     searchTerm        = string.Empty; //21
            var     itemName          = string.Empty; //22
            var     responseMessage   = string.Empty;

            // Make sure Tracker is started.
            if (!Tracker.IsActive)
            {
                Tracker.StartTracking();
            }

            try
            {
                // Check for valid json.
                if (json == null)
                {
                    return("Invalid json");
                }

                // Check for valid event definition Name.
                sitecoreEventName = json[0].ToLower();
                if (string.IsNullOrEmpty(sitecoreEventName))
                {
                    return("Invalid Event Definition Name");
                }

                // If contact info provided then identify the contact. (independent of any event that is being registered).
                firstName = json[11];
                lastName  = json[12];
                jobTitle  = json[13];
                email     = json[14];
                itemName  = json[22];
                if (!string.IsNullOrEmpty(firstName) && !string.IsNullOrEmpty(lastName) && !string.IsNullOrEmpty(email))
                {
                    IdentifyContact(itemName, firstName, lastName, jobTitle, email);
                }

                // Check for valid category.
                category = json[1].ToLower();
                if (string.IsNullOrEmpty(category))
                {
                    return("Invalid category");
                }

                // Resolve the event definition ID.
                Guid eventDefinitionId = Guid.NewGuid();
                if (sitecoreEventName != "page view")
                {
                    var          results = new List <SearchResultItem>();
                    ISearchIndex index   = ContentSearchManager.GetIndex("sitecore_master_index");
                    using (IProviderSearchContext context = index.CreateSearchContext())
                    {
                        switch (category)
                        {
                        // Ensure we have an item definition ID.
                        case "page event":
                            results = context.GetQueryable <SearchResultItem>().Where(x => x.Path.StartsWith("/sitecore/system/Settings/Analytics/Page Events/") && x.Name == sitecoreEventName).ToList();
                            break;

                        case "goal":
                            results = context.GetQueryable <SearchResultItem>().Where(x => x.Path.StartsWith("/sitecore/system/Marketing Control Panel/Goals/") && x.Name == sitecoreEventName).ToList();
                            break;

                        case "campaign":
                            results = context.GetQueryable <SearchResultItem>().Where(x => x.Path.StartsWith("/sitecore/system/Marketing Control Panel/Campaigns/") && x.Name == sitecoreEventName).ToList();
                            break;

                        case "download":
                            eventDefinitionId = AnalyticsIds.DownloadEvent.Guid;
                            break;

                        case "search":
                            eventDefinitionId = AnalyticsIds.SearchEvent.Guid;
                            break;

                        case "outcome":
                            results = context.GetQueryable <SearchResultItem>().Where(x => x.Path.StartsWith("/sitecore/system/Marketing Control Panel/Outcomes/") && x.Name == sitecoreEventName).ToList();
                            break;

                        default:
                            return("Invalid Category");
                        }

                        if (results.Any())
                        {
                            eventDefinitionId = results.FirstOrDefault().ItemId.Guid;
                        }
                        else
                        {
                            return("Invalid Event Definition");
                        }
                    }
                }

                action = json[2];
                label  = json[3];
                value  = json[4];

                // Set item properties if all req values are present and valid.
                if (Guid.TryParse(json[7], out itemId))
                {
                    pageUrl = json[8];
                    culture = json[9];
                    // Check for valid item version.
                    if (!string.IsNullOrEmpty(culture) && int.TryParse(json[10], out itemVersion))
                    {
                        Tracker.Current.CurrentPage.SetItemProperties(itemId, culture, itemVersion);
                        Tracker.Current.CurrentPage.SetUrl(pageUrl);
                    }
                }

                // Register the event.
                Sitecore.Analytics.Data.PageEventData pageData = null;
                if (sitecoreEventName != "page view")
                {
                    switch (category)
                    {
                    case "page event":
                        var pageEventDefinition = Tracker.MarketingDefinitions.PageEvents[eventDefinitionId];
                        if (pageEventDefinition != null)
                        {
                            pageData = new Sitecore.Analytics.Data.PageEventData(pageEventDefinition.Alias, pageEventDefinition.Id);
                            Tracker.Current.CurrentPage.RegisterPageEvent(pageEventDefinition);
                        }
                        break;

                    case "goal":
                        var goalDefinition = Tracker.MarketingDefinitions.Goals[eventDefinitionId];
                        if (goalDefinition != null)
                        {
                            pageData = new Sitecore.Analytics.Data.PageEventData(goalDefinition.Alias, goalDefinition.Id);
                            Tracker.Current.CurrentPage.RegisterGoal(goalDefinition);
                        }
                        break;

                    case "campaign":
                        var campaignDefinition = Tracker.MarketingDefinitions.Campaigns[eventDefinitionId];
                        if (campaignDefinition != null)
                        {
                            pageData = new Sitecore.Analytics.Data.PageEventData(campaignDefinition.Alias, campaignDefinition.Id);
                            Tracker.Current.CurrentPage.TriggerCampaign(campaignDefinition);
                        }
                        break;

                    case "download":
                        if (Guid.TryParse(json[19], out mediaItemId))
                        {
                            var downloadDefinition = Tracker.MarketingDefinitions.PageEvents[eventDefinitionId];
                            if (downloadDefinition != null)
                            {
                                pageData = new Sitecore.Analytics.Data.PageEventData(downloadDefinition.Alias, downloadDefinition.Id);
                                Tracker.Current.CurrentPage.Register(new Sitecore.Analytics.Data.PageEventData(downloadDefinition.Alias, downloadDefinition.Id)
                                {
                                    Text   = mediaItemName,   // Not mandatory
                                    ItemId = mediaItemId
                                });
                            }
                        }
                        break;

                    case "search:":
                        var searchEventDefinition = Tracker.MarketingDefinitions.PageEvents[AnalyticsIds.SearchEvent.Guid];
                        if (searchEventDefinition != null)
                        {
                            pageData = new Sitecore.Analytics.Data.PageEventData(searchEventDefinition.Alias, searchEventDefinition.Id);
                            Tracker.Current.CurrentPage.Register(new Sitecore.Analytics.Data.PageEventData(searchEventDefinition.Alias, searchEventDefinition.Id)
                            {
                                Data = searchTerm
                            });
                        }
                        break;

                    case "outcome":
                        currencyCode  = json[5];
                        monetaryValue = decimal.Parse(json[6]);
                        var outcomeDefinition = Tracker.MarketingDefinitions.Outcomes[eventDefinitionId];
                        if (outcomeDefinition != null)
                        {
                            pageData = new Sitecore.Analytics.Data.PageEventData(outcomeDefinition.Alias, outcomeDefinition.Id);
                            Tracker.Current.Interaction.RegisterOutcome(outcomeDefinition, currencyCode, monetaryValue);
                        }
                        break;

                    default:
                        return("Invalid category");
                    }

                    // Add the page data.
                    if (pageData != null)
                    {
                        pageData.Data    = value;
                        pageData.DataKey = label;
                        pageData.Text    = action;

                        // Custom dimensions.
                        pageData.CustomValues.Add("Item Name", itemName);
                        pageData.CustomValues.Add("Page URL", pageUrl);
                        pageData.CustomValues.Add("Click URL", clickUrl);
                        pageData.CustomValues.Add("Click Text", clickText);
                        pageData.CustomValues.Add("Item ID", itemId);
                        pageData.CustomValues.Add("Item Culture", culture);
                        pageData.CustomValues.Add("Item Version", itemVersion);
                        pageData.CustomValues.Add("Is Internal Traffic", isInternalTraffic);
                        pageData.CustomValues.Add("Position", position);

                        Tracker.Current.CurrentPage.Register(pageData);
                    }
                }

                responseMessage = string.Format("RegisterAnalyticsEvent: sitecoreEventName='{0}', category='{1}', action='{2}', label='{3}', value='{4}', currencyCode='{5}', monetaryValue='{6}', itemId='{7}', pageUrl='{8}', culture='{9}', itemVersion='{10}', firstName='{11}', lastName='{12}', jobTitle='{13}', email='{14}', clickUrl='{15}', clickText='{16}', isInternalTraffic='{17}', position='{18}', mediaItemId='{19}', mediaItemName='{20}', searchTerm='{21}'", sitecoreEventName, category, action, label, value, currencyCode, monetaryValue, itemId.ToString(), pageUrl, culture, itemVersion, firstName, lastName, jobTitle, email, clickUrl, clickText, isInternalTraffic, position, mediaItemId, mediaItemName, searchTerm);
                Log.Info(responseMessage, this);

                return("Success! " + responseMessage);
            }
            catch (Exception ex)
            {
                responseMessage = string.Format("RegisterAnalyticsEvent Error: message='{0}', sitecoreEventName='{1}', category='{2}', action='{3}', label='{4}', value='{5}', currencyCode='{6}', monetaryValue='{7}', itemId='{8}', pageUrl='{9}', culture='{10}', itemVersion='{11}', firstName='{12}', lastName='{13}', jobTitle='{14}', email='{15}', clickUrl='{16}', clickText='{17}', isInternalTraffic='{18}', position='{19}', mediaItemId='{20}', mediaItemName='{21}', searchTerm='{22}'", ex.Message, sitecoreEventName, category, action, label, value, currencyCode, monetaryValue, itemId.ToString(), pageUrl, culture, itemVersion, firstName, lastName, jobTitle, email, clickUrl, clickText, isInternalTraffic, position, mediaItemId, mediaItemName, searchTerm);
                Log.Error(responseMessage, ex, this);
                return(responseMessage);
            }
        }