Sitecore Analytics: запуск профилей и событий от веб-службы - PullRequest
7 голосов
/ 25 февраля 2011

У меня проблема с Sitecore.Analytics

Из моего xslt я делаю ajax-вызов в веб-сервис с использованием jQuery.

В моем веб-сервисе мне нужно зарегистрироваться / сохранить некоторые Sitecore.Analytics данные.Проблема в том, что я не могу использовать Sitecore.Analytics.AnalyticsTracker.Current.

Так как мне сделать TriggerProfile и TriggerEvent?Интересно, может ли Sitecore.Analytics.AnalyticsManager чем-нибудь помочь.

Ответы [ 4 ]

9 голосов
/ 05 марта 2011

Недавно я столкнулся с похожим сценарием, когда нужно было отслеживать аналитическое событие в веб-сервисе. Как вы заметили, проблема в том, что AnalyticsTracker.Current является нулевым в контексте веб-службы.

Причина этого заключается в том, что AnalytisTracker.Current заполняется во время конвейера trackAnalytics, который, в свою очередь, вызывается во время конвейера renderLayout, который вызывается только в том случае, если элемент контекста не равен нулю и элемент контекста имеет представление настройки определены.

С учетом сказанного есть обходной путь:)

Вы можете запустить AnalyticsTracker вручную следующим образом:

if (!AnalyticsTracker.IsActive)
{
    AnalyticsTracker.StartTracking();
}

Затем вы можете получить экземпляр AnalyticsTracker следующим образом:

AnalyticsTracker tracker = AnalyticsTracker.Current;
if (tracker == null)
    return;

И, наконец, вы можете создавать и запускать свое событие, профиль и т. Д. В приведенном ниже примере запускается PageEvent. Примечание. Особое внимание следует уделить PageEvent (и, скорее всего, другим событиям), чтобы заполнить свойство Timestamp. Смотрите комментарии в коде ниже.

if (!AnalyticsTracker.IsActive)
{
    AnalyticsTracker.StartTracking();
}

AnalyticsTracker tracker = AnalyticsTracker.Current;
if (tracker == null)
    return;

string data = HttpContext.Current.Request.UrlReferrer != null
                        ? HttpContext.Current.Request.UrlReferrer.PathAndQuery
                        : string.Empty;

//Need to set a context item in order for the AnalyticsPageEvent.Timestamp property to 
//be set. As a hack, just set the context item to a known item before declaring the event, 
//then set the context item to null afterwards.
Sitecore.Context.Item = Sitecore.Context.Database.GetItem("/sitecore");

AnalyticsPageEvent pageEvent = new AnalyticsPageEvent();
pageEvent.Name = "Download Registration Form Submitted";
pageEvent.Key = HttpContext.Current.Request.RawUrl;
pageEvent.Text = HttpContext.Current.Request.RawUrl;
pageEvent.Data = data;

//Set the AnalyticsPageEvent.Item property to null and the context item to null.
//This way the PageEvent isn't tied to the item you specified as the context item.
pageEvent.Item = null; 
Sitecore.Context.Item = null;

tracker.CurrentPage.TriggerEvent(pageEvent);
tracker.Submit();

Надеюсь, это поможет!

3 голосов
/ 17 июля 2013

Я просто хотел бы добавить дополнительный комментарий, чтобы поделиться своим опытом.Если у вас есть вызов службы POST RESTful, в котором вы реализуете метод регистрации событий страницы, убедитесь, что для отправки запроса POST используется простое клиентское расширение REST Chrome вместо Fiddler.Я столкнулся с ситуацией, когда я использовал Fiddler для вызова службы POST RESTful, код выполнялся нормально, но я не увидел ни одной записи в таблице событий страницы (возможно, проблема связана с сеансом браузера).

Для DMS 2.0 я следовал аналогичной статье о StackOverflow и написал следующее, чтобы зарегистрировать событие.

void TriggerPageEvent(string eventName)
{

  if (!Tracker.IsActive)
                {
                    Tracker.StartTracking();
                }

                Sitecore.Data.Database db = Sitecore.Configuration.Factory.GetDatabase("web");
                Sitecore.Context.Item = db.GetItem("/sitecore");

                PageEventData pageEventData = new PageEventData(eventName);
                pageEventData.Text = "Value is here";
                pageEventData.DataKey = String.Empty;
                pageEventData.Data = " Data is here";
                pageEventData.ItemId = new Guid(Cms.Context.Item.ID.ToString());
                Tracker.CurrentPage.Register(pageEventData);
                Tracker.Submit();
}
1 голос
/ 04 июня 2014

Обязательно включите атрибут / значение [WebMethod(EnableSession = true)] в WebMethod, и это будет работать правильно.

1 голос
/ 18 марта 2014

Если вы хотите зарегистрировать событие / цель страницы и используете свой собственный обработчик для получения данных из запроса ajax / jquery, убедитесь, что ваше местоположение для обработчика соответствует аналитике.Это означает, что если ваш обработчик находится, например, в /mylocation/myhandlers/myhandler.ashx, который нужно реализовать следующим, добавьте эту строку в ваш файл конфигурации:

<site name="your_name" virtualFolder="/mylocation/myhandlers" physicalFolder="/mylocation/myhandlers" enableAnalytics="true" domain="sitecore" database="master" patch:before="site[@name='website']" />

Это должно помочь.Как видите, в этом случае ваша аналитика включена.

...