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
и это будет работать правильно.