2013-01-05 55 views
1

我將Sitecore項目桶實施到Sitecore 6.4,.NET 2.0的項目中。Sitecore項目桶查詢全部返回null

我已經安裝了所有東西,並且所有東西似乎都正常工作。我創建了一個物品桶和一個可拆卸的模板。搜索用戶界面在內容編輯器查詢中完美工作。我還可以在Sitecore Index Viewer以及Sitecore Rocks Index實用程序中查詢我的項目索引。

然而,當我嘗試執行代碼的用戶界面,我永遠不會得到任何結果,不管我用什麼方法。對於我嘗試運行的每種類型的查詢,我總是得到空值。我試過BucketManager,搜索擴展方法和BucketQuery都無濟於事。

我也有調試日誌功能,當我在通過搜索選項卡我看到的日誌記錄查詢內容編輯器進行搜索,但是當我的代碼執行任何日誌條目任何產生。有沒有人知道爲什麼會發生這種情況。非常樂意提供更多的信息來嘗試和追蹤。

Item root = MasterDatabase.GetItem(Constants.ARI_BUCKET_LOCATION_ID); 

var items = root.Search(out hitCount, 
text: "*", 
indexName: "itembuckets_buckets", 
location: root.ID.ToString(), 
language: "en", 
startDate: "01/01/2013", 
endDate: "12/31/2013", 
numberOfItemsToReturn: 100, 
pageNumber: 1, 
templates: tmpInventoryRate.ID.ToString()); 

var itemresults = root.Search(out hitCount, numberOfItemsToReturn: 100, language: "en"); 

var results = BucketManager.Search(root, out hitCount, templates: tmpInventoryRate.ID.ToString()); 

var textresults = BucketManager.Search(MasterDatabase.GetItem(Constants.ARI_BUCKET_LOCATION_PATH), out hitCount, text: "OEH", location: root.ID.ToString()); 

var pathresults = BucketManager.Search(MasterDatabase.GetItem(Constants.ARI_BUCKET_LOCATION_PATH), out hitCount, templates: tmpInventoryRate.ID.ToString()); 

var queryresults = new BucketQuery().WhereTemplateIs("*").Run(root, 100); 

有一點要注意,我好奇的是,上面的代碼,不必Sitecore.Context訪問DAL模塊中執行,但MasterDatabase.GetItem()調用是否確實檢索主數據庫中的項目,但我不知道是否有潛在引用Bucket API代碼上下文中的某處?

回答

4

OK,所以張貼後,我跟着下來我最後的評論大約語境,並使用反射來挖入Sitecore.ItemBucket.Kernel.Util.IndexSearcherSitecore.ItemBucket.Kernel.Managers的路徑。 BucketManager我看到這兩個類確實參考了上下文項。 我的問題的一部分是我從服務器端處理腳本開始,它不是Sitecore內容樹的一部分,因此不通過處理管道,所以這就是爲什麼我沒有上下文可用在執行期間。

的答案埋在這裏,我發現從web.config中<site>設定編程設置當前上下文的方式:Set Active Site as Context

使用然後我用下面的使用塊,設置所需的站點作爲當前語境下,像這樣:

  int hitCount; 
      Item root = MasterDatabase.GetItem(Constants.ARI_BUCKET_LOCATION_ID); 

      using (new SecurityDisabler()) 
      { 
       Sitecore.Context.SetActiveSite("website"); //Set Current Context 
       var items = root.Search(out hitCount, 
            text: "*", 
            indexName: "itembuckets_buckets", 
            location: root.ID.ToString(), 
            language: "en", 
            startDate: "01/01/2013", 
            endDate: "12/31/2013", 
            numberOfItemsToReturn: 100, 
            pageNumber: 1, 
            templates: "{3B0476F4-C3C4-43DD-8490-2B3FF67C368B}"); 
      } 

做出這個改變後,我收到了我的桶物品!

邊注意:同樣,只是作爲一個筆記,任何人可能會沿着與這個問題無關的代碼示例走向相同的路徑,但我遵循代碼示例時遇到了一些問題。請確保您已在您的web.config中正確設置<site name='website' ... content='master' >設置,以使用開發人員指南中使用的Sitecore.Context.ContentDatabase.GetItem()方法,並且我還在搜索器類中看到了一些引用Context.ContentDatabase的類。

希望這節省了別人多一點時間,比拿我!

+0

這是一個很好的發現。我也曾嘗試使用Sitecore.Context.SetActiveSite()來設置上下文,但沒有在安全禁用器中運行它!我真的希望Sitecore會給我們一個bug更新項目桶的東西更新.... – geedubb