2015-04-23 33 views
1

我們正在從7.0升級到Sitecore XP 8。我們用來從給定起始路徑獲取「訪問最多的項目」的一段代碼使用Sitecore.Analytics.Data.DataAccess.DataAdapters命名空間來訪問DataAdapterManager類。在Sitecore XP 8中,這被移動到Sitecore.Analytics.Reporting.Data.DataAccess.DataAdapters命名空間,但現在已經過時。什麼是Sitecore XP 8中Analytics DataAdapterManager的替代方案?

下面是代碼,因爲它現在代表:

/// <summary> 
/// Get topCount most visited items, whose path starts with startPath 
/// </summary> 
/// <param name="topCount">Max number of items to retrieve</param> 
/// <param name="startPath">Url path of the items</param> 
/// <returns>Collection of top visited items</returns> 
public static IEnumerable<Item> GetMostVisitedItems(int topCount, string startPath) 
{ 
    var sqlQuery = "select top " + topCount.ToString(CultureInfo.InvariantCulture) + " " 
          + "{0}ItemId{1} " 
          + "from {0}Pages{1} " 
          + (string.IsNullOrWhiteSpace(startPath) ? "" : "where {0}Url{1} like '" + startPath + "%' ") 
          + "group by {0}ItemId{1} " 
          + "order by COUNT({0}PageId{1}) desc "; 
    var topPageItemIds = DataAdapterManager.Sql.ReadMany<Guid>(sqlQuery, reader => DataAdapterManager.Sql.GetGuid(0, reader)); 

    return topPageItemIds.Select(itemId => Sitecore.Context.Database.GetItem(new ID(itemId))).Where(item => item != null); 
} 

是否有訪問相同的信息去了一個新的首選方式?

UPDATE:隨着從德米特羅·舍甫琴科的巨大信息下面我也發現了Accessing Current Visitor Information頁面上的LaunchSitecore.net現場一些很好的起動信息。該會話特定於當前訪問者的幫助數據,但它有助於指出用於分析的Sitecore類和名稱空間。

回答

2

與舊的DMS 2.0相比,Sitecore xDB以不同的方式處理數據。這裏是新架構的概述:

https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/xDB_overview/Architecture_overview.aspx

您所請求的數據現在實際存儲在收集數據庫(MongoDB的)。有可能會發出一個直接的MongoDB查詢來獲取你需要的數據。但是,這不是你應該做的原因是多方面的。對於自定義查詢,您應該考慮在報表數據庫(RDB)中設計自己的事實/維度表,並創建您自己的聚合流水線處理器。

https://doc.sitecore.net/products/sitecore%20experience%20platform/xdb%20configuration/walkthrough%20creating%20a%20rate%20page%20custom%20aggregation

有一些默認的事實表和維表,雖然如此,你可能會考慮利用它們作爲你的數據源。

至於實際發出查詢對RDB,看看在Sitecore.Analytics.Reporting.config以下配置節點:

reporting/dataProvider 

您可以通過Sitecore的工廠實例吧:

var provider = (Reporting.ReportDataProviderBase) Factory.CreateObject("reporting/dataProvider", true); 

,然後發出這樣的詢問:

var response = provider.GetData("reporting", "YOUR QUERY HERE", Reporting.CachingPolicy.WithCacheDisabled); 

如果你哈VE分佈式(尤其是基於雲計算的)設置,確保執行該代碼或者具有直接訪問針對遠程報告服務報表服務器或發出查詢服務器:

https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/xDB_configuration/Configure_a_reporting_service_server.aspx

+0

謝謝!這讓我走了很長的路。當我有機會剖析這些信息並將其付諸實踐時,我會進行更新。 – rasicoc

+0

有沒有更新? :) –

相關問題