मुझे हाल ही में एक webservice के भीतर एक विश्लेषिकी घटना को ट्रैक करने के लिए एक समान परिदृश्य का सामना करना पड़ा। जैसा कि आपने नोट किया है, समस्या यह है कि AnalyticsTracker.Current
किसी webservice के संदर्भ में शून्य है।
इस का कारण यह है कि AnalytisTracker.Current
trackAnalytics
पाइपलाइन, जो बारी में renderLayout
पाइप लाइन है, जो केवल यदि संदर्भ आइटम रिक्त नहीं है और संदर्भ आइटम परिभाषित प्रस्तुति सेटिंग है शुरू हो जाती है के दौरान शुरू हो जाती है के दौरान पॉप्युलेट है।
इसके साथ ही कहा, एक समाधान :)
तुम इतनी तरह मैन्युअल AnalyticsTracker
शुरू कर सकते हैं नहीं है:
if (!AnalyticsTracker.IsActive)
{
AnalyticsTracker.StartTracking();
}
फिर आप तो जैसे एक AnalyticsTracker
उदाहरण प्राप्त कर सकते हैं:
AnalyticsTracker tracker = AnalyticsTracker.Current;
if (tracker == null)
return;
और अंत में, आप अपना ईवेंट, प्रोफाइल इत्यादि बना सकते हैं और ट्रिगर कर सकते हैं ... नीचे दिया गया उदाहरण PageEvent
ट्रिगर करता है। नोट: Timestamp
संपत्ति जनसंख्या प्राप्त करने के लिए PageEvent
(और अधिकतर अन्य घटनाओं) के लिए एक विशेष विचार किया जाना चाहिए। नीचे दिए गए कोड में टिप्पणियां देखें।
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();
आशा है कि इससे मदद मिलती है!
स्रोत
2011-03-05 13:46:07
धन्यवाद आदमी। आप उद्धारकर्ता हैं :-) – gorhal
अच्छा जवाब एडम :) –