Sitecore Analytics: запуск профилей и событий от веб-службы

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

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

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

Так как мне сделать TriggerProfile а также TriggerEvent? Интересно, если Sitecore.Analytics.AnalyticsManager может быть любая помощь.

4 ответа

Решение

Недавно я столкнулся с похожим сценарием, когда нужно было отслеживать аналитическое событие в веб-сервисе. Как вы заметили, проблема в том, что 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();

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

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

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

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();
}

Если вы хотите зарегистрировать событие / цель страницы и используете свой собственный обработчик для получения данных из запроса 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']" />

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

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

Другие вопросы по тегам