我在部分标准之前添加了一个Analytics管道,以便在将所有数据提交到数据库之前删除重复的触发的pageevent,这样我就可以拥有唯一的触发事件,因为android / ios设备上似乎有一个错误,触发了几个事件几秒钟间隔。
在这个自定义管道中,我需要获取当前用户在其会话中触发的所有目标/事件的列表,以便我可以与从args参数获取的数据集中的值进行比较,并删除已触发的值。
args.DataSet.Tables [“PageEvents”]只返回要提交给数据库的集合,这没有帮助,因为每次此管道运行时它都会更改。我也试过Sitecore.Analytics.Tracker.Visitor.DataSet,但我得到这些属性的空值。
有没有人知道如何获得一个列表,其中包含用户在会话中触发的所有目标,而不直接向数据库请求?
一些代码:
public class CommitUniqueAnalytics : CommitDataSetProcessor
{
public override void Process(CommitDataSetArgs args)
{
Assert.ArgumentNotNull(args, "args");
var table = args.DataSet.Tables["PageEvents"];
if (table != null)
{
//Sitecore.Analytics.Tracker.Visitor.DataSet.PageEvents - this list always empty
...........
}
}
}
答案 0 :(得分:0)
在Sitecore 7.5中,我发现这有效:
Tracker.Current.Session.Interaction.Pages.SelectMany(x=>x.PageEvents)
但是,如果Pages集合非常大,我有点担心这会效率低下。