2011-01-26 68 views
2

我一直在努力與此Sitecore查詢代碼。所有項目都已發佈,查詢在XPath Builder中工作,但始終在後面的代碼中返回0結果。我從代碼示例中複製了這個,沒有人抱怨,仍然沒有結果。我嘗試追加「查詢:」但它會引發語法錯誤。在代碼背後的代碼中使用工作Sitecore查詢

string query = "/sitecore/content/ShrinersHospital2/CareAndTreatment//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']"; 

Item[] items = Sitecore.Context.Database.SelectItems(query); 

回答

5

這個問題與發佈問題有關。查詢的項目已修改模板,增量發佈未能正確推送更改。智能發佈使代碼開始工作。

我還獲悉,當這樣的事情發生了,我應該使用的代碼兩個數據庫測試如下:

Database master = Factory.GetDatabase("master"); 
master.SelectItems(query); 

Database web = Factory.GetDatabase("web"); 
web.SelectItems(query); 
3

我有同樣的問題,找到了以下解決方案:

Item[] items = Sitecore.Context.Database.SelectItems(query); 

由於您的代碼在(當前)上下文中執行,所以這不起作用。和代碼路徑執行

/Sitecore的/內容/ ShrinersHospital2/CareAndTreatment

與您上面的查詢告訴Sitecore的從路徑搜索

/Sitecore的/內容/ ShrinersHospital2/CareAndTreatment/sitecore/content/ShrinersHospital2/CareAndTreatment

這將返回0 ite結果爲ms,因爲路徑不存在。

嘗試以下查詢:

string query = "//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']"; 
Item[] items = Sitecore.Context.Database.SelectItems(query); 

當您打開數據庫「網絡」,你沒有背景和你的「開始」路徑是/。然後下面的代碼返回項目進行查詢,因爲存在的路徑

/Sitecore的/內容/ ShrinersHospital2/CareAndTreatment

string query = "/sitecore/content/ShrinersHospital2/CareAndTreatment//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']"; 
var database = Sitecore.Configuration.Factory.GetDatabase("web"); 
items = database.SelectItems(query);