2011-02-25 12 views
7

से घटनाओं मैं Sitecore.AnalyticsSitecore विश्लेषिकी: ट्रिगर प्रोफाइल और वेब सेवा

मेरी xslt से साथ एक समस्या है, मैं एक वेब सेवा jQuery का उपयोग करने का ajax कॉल करते हैं।

मेरे webservice में मुझे कुछ Sitecore.Analytics डेटा पंजीकृत/सहेजने की आवश्यकता है। समस्या यह है कि मैं Sitecore.Analytics.AnalyticsTracker.Current का उपयोग नहीं कर सकता।

तो मैं TriggerProfile और TriggerEvent कैसे कर सकता हूं? मुझे आश्चर्य है कि Sitecore.Analytics.AnalyticsManager किसी भी मदद के लिए हो सकता है।

उत्तर

9

मुझे हाल ही में एक webservice के भीतर एक विश्लेषिकी घटना को ट्रैक करने के लिए एक समान परिदृश्य का सामना करना पड़ा। जैसा कि आपने नोट किया है, समस्या यह है कि AnalyticsTracker.Current किसी webservice के संदर्भ में शून्य है।

इस का कारण यह है कि AnalytisTracker.CurrenttrackAnalytics पाइपलाइन, जो बारी में 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(); 

आशा है कि इससे मदद मिलती है!

+0

धन्यवाद आदमी। आप उद्धारकर्ता हैं :-) – gorhal

+0

अच्छा जवाब एडम :) –

3

मैं अपने अनुभव को साझा करने के लिए एक अतिरिक्त टिप्पणी जोड़ना चाहता हूं। यदि आपके पास एक पोस्ट रीस्टफुल सेवा कॉल है जिसमें आप पृष्ठ ईवेंट पंजीकृत करने के लिए विधि लागू करते हैं, POST अनुरोध भेजने के लिए फिडलर के बजाय क्रोम के सरल REST क्लाइंट एक्सटेंशन का उपयोग करना सुनिश्चित करें। मैं एक ऐसी स्थिति में भाग गया जहां मैं पोस्ट रीस्टफुल सेवा को कॉल करने के लिए फिडलर का उपयोग कर रहा था, कोड ठीक से निष्पादित कर रहा था, लेकिन मुझे पेज इवेंट टेबल में कोई प्रविष्टि दिखाई नहीं दे रही थी (समस्या मुझे लगता है कि ब्राउज़र सत्र से शायद जुड़ा हुआ हो सकता है)।

डीएमएस 2.0 के लिए, मैंने स्टैक ओवरफ्लो पर समान लेख का पालन किया और घटना को पंजीकृत करने के लिए निम्नलिखित लिखा।

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

अगर हैंडलर के लिए अपने स्थान विश्लेषणात्मक के लिए एक उपयुक्त आप पेज घटना/लक्ष्य पंजीकृत करना चाहते हैं और आप 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']" /> 

यह मदद करनी चाहिए। जैसा कि आप देख सकते हैं, इस मामले में, आपका विश्लेषणात्मक सक्षम है।

1

अपने WebMethod पर विशेषता/मान [WebMethod(EnableSession = true)] शामिल करना सुनिश्चित करें, और यह सही तरीके से काम करेगा।

संबंधित मुद्दे