我目前正在尝试跟踪ASHX处理程序中的PageEvent。我的代码基本上是这样的:
event.respondWith()
Tracker始终处于非活动状态且Tracker.Current == null。方法调用" Tracker.StartTracking();"抛出以下异常:
public class GetProductPdf : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (!Tracker.IsActive)
{
Tracker.Initialize();
Tracker.StartTracking();
}
//Track PageEvent here...
}
public bool IsReusable
{
get
{
return false;
}
}
}
我尝试了所有可能的解决方案here。
在mvc控制器中执行相同操作时,Tracker处于活动状态且Tracker.Current!= null。
有没有人有想法,可能导致此问题的原因或是否有任何其他解决方案的建议?
提前致谢。
答案 0 :(得分:2)
我不确定您的Ashx Handler
是否可以在必要的Sitecore上下文中执行,因此Tacker.Current
无效,也无法通过Tracker.StartTracking()
启动。有人可能会确认,但我有另一种解决方案,你可以试试这对我有用。
与Ashx Handler
为您注册Event
一样好,相反,您可以在文件的链接上触发JavaScript函数。因此,当单击链接时,JavaScript会向MVC Controller
发出Web请求,并且控制器会为您注册该事件。
我自己使用WebApi Controllers
实现了这一点。 Data Attributes
上有a tag
,JavaScript将这些属性发布到控制器,控制器使用这些属性来确定要注册的Event
和要在事件上使用的description
。
<asp:HyperLink runat="server" data-goalid="{08030449-A811-428B-95F0-59FCD42B8DEB}" data-goaldescription="Product 0112 brochure">
[System.Web.Mvc.HttpPost]
public JsonResult RegisterGoal(string goalId, string goalDescription)
{
Item eventItem = Sitecore.Context.Database.GetItem(goalId);
var goal = new PageEventItem(eventItem);
var eventData = Tracker.Current.PreviousPage.Register(goal);
eventData.Data = goal["Description"] + " " + goalDescription;
Tracker.Current.Interaction.AcceptModifications();
return Json(new PageEventRequestResult()
{
Success = true,
Message = "Successfully registered goal",
});
}
效果很好。唯一的缺点是必须将其添加到导致您要跟踪的文件的各种链接。
我写了一篇关于您可能想要查看的tracking various interactions on a site and registering Sitecore Events / Goals的博客,向下滚动到“在xDB中存储自定义数据&#39;部分。