2011-02-25 4 views
7

에서 트리거 프로필과 이벤트가 내 XSLT에서 Sitecore.AnalyticsSitecore 웹 로그 분석 : 웹 서비스

에 문제가, 내가 jQuery를 사용하여 웹 서비스에 아약스 호출을한다.

내 웹 서비스에서 일부 Sitecore.Analytics 데이터를 등록/저장해야합니다. 문제는 Sitecore.Analytics.AnalyticsTracker.Current을 사용할 수 없다는 것입니다.

그래서 TriggerProfileTriggerEvent을 어떻게 처리합니까? Sitecore.Analytics.AnalyticsManager이 도움이 될지 궁금합니다.

답변

9

최근 웹 서비스 내에서 분석 이벤트를 추적해야하는 것과 비슷한 시나리오가 발생했습니다. 당신이 지적한대로, 문제는 AnalyticsTracker.Current이 웹 서비스 컨텍스트 내에서 null이라는 것입니다.

그 이유는 AnalytisTracker.Current 차례로 상황에 맞는 항목이 null가 아니고, 상황에 맞는 항목을 정의 프리젠 테이션 설정이있는 경우에만 호출됩니다 renderLayout 파이프 라인, 동안 호출되는 trackAnalytics 파이프 라인, 동안 채워져 있다는 것입니다.

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

당신은 다음과 같이 AnalyticsTracker 인스턴스를 검색 할 수 있습니다 :

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

는 해결 방법 :

당신과 같이 수동으로 AnalyticsTracker를 시작할 수가 말했다

그리고 마지막으로 이벤트, 프로필 등을 만들고 트리거 할 수 있습니다. 아래 예제는 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 이벤트를 등록하는 메소드를 구현하는 POST RESTful 서비스 호출이있는 경우 POST 요청을 보내기 위해 Fiddler 대신 Chrome의 간단한 REST 클라이언트 확장자 인을 사용해야합니다. 나는 POST RESTful 서비스를 호출하기 위해 Fiddler를 사용하는 상황에 빠져 코드가 잘 실행되고 있었지만 페이지 이벤트 테이블에 항목이 표시되지 않았다. (아마도 브라우저 세션과 관련된 문제 일 수도있다.)

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

이 페이지 이벤트/목표를 등록 할 당신이 아약스/JQuery와 요청에서 데이터를 얻을 수 있도록 사용자 정의 핸들러를 사용하는 경우, 확인하십시오 분석의 핸들러에 대한 위치 적절한 경우. 그것은 도움이

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

: 처리기가 당신 옆 구현 설정 파일에이 문자열을 추가 할 필요가 /mylocation/myhandlers/myhandler.ashx 예를 들면,있는 경우는, 의미한다. 보시다시피이 경우 분석이 사용됩니다.

1

WebMethod에 속성/값 [WebMethod(EnableSession = true)]을 포함해야 제대로 작동합니다.

관련 문제