2016-06-28 27 views
3

我遇到Sitecore 7解决方案的问题。我无法使DMS规则正常工作。通过Sitecore 7中的DMS规则计数访问不起作用

当网站访问者访问次数大于3时,必须显示一些特定内容。为了能够调试问题,我制定了自定义DMS规则。

var renderingItem = ruleContext.Reference == null ? null : ruleContext.Reference.RenderingItem; 

var pageEvents = Tracker.Visitor.DataContext.PageEvents; 
     pageEvents = 
      pageEvents.Where(y => y.ItemId == renderingItem.ID.ToGuid() && y.Data == PageEventDataName).ToArray(); 

var count = pageEvents.Count(); 

int elementVisits = Tracker.Visitor.DataContext.Pages 
      .Where(x => x.ItemId == ruleContext.Item.ID.ToGuid()) 
      .SelectMany(x => x.PageEvents.Where(y => y.ItemId == renderingItem.ID.ToGuid() && y.Data == PageEventDataName)) 
      .Count(); 

bool itemHasReachedMaxVisitCount = !Compare(elementVisits); 

if (itemHasReachedMaxVisitCount) 
      return false; 

elementVisits整数被向上计数罚款很短的时间量,但经过一段时间它被复位为0,即使观众是相同的。它看起来像标准的DMS规则也不起作用。

Sitecore visit no. DMS rule

我可以看到,在Sitecore_analytics数据库参观者表VisitCount列不更新。

还有其他人有类似的问题,并知道出了什么问题吗?

+3

您是否尝试过使用'Tracker.Visitor.LoadAll()'从内存以及数据库中加载数据? –

+0

@IanGraham其实我认为你的建议有效......有趣,因为我认为我曾尝试过。也许我在一个错误的属性上调用了LoadAll()。 –

+0

好,精彩。我已经用下面的答案更新了这个问题。 –

回答

0

您可以尝试调用Tracker.Visitor.LoadAll()方法以确保访问数据从内存以及分析数据库中提取。