我一直在努力使用此Sitecore查询代码。发布所有项目,查询在XPath Builder中工作,但它总是在后面的代码中返回0结果。我从没有其他人抱怨的代码示例中复制了这个,但仍然没有得到任何结果。我尝试使用“query:”附加,但它会引发语法错误。
string query = "/sitecore/content/ShrinersHospital2/CareAndTreatment//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']";
Item[] items = Sitecore.Context.Database.SelectItems(query);
答案 0 :(得分:5)
此特定问题与发布问题有关。查询的项目修改了模板,增量发布无法正确推送更改。智能发布使代码开始工作。
我还被告知,当发生类似这样的事情时,我应该使用以下代码在两个数据库上进行测试:
Database master = Factory.GetDatabase("master");
master.SelectItems(query);
Database web = Factory.GetDatabase("web");
web.SelectItems(query);
答案 1 :(得分:3)
我遇到了同样的问题并找到了以下解决方案:
Item[] items = Sitecore.Context.Database.SelectItems(query);
由于您的代码在(当前)上下文中执行,因此无法正常工作。代码在路径中执行
/ Sitecore的/内容/ ShrinersHospital2 / CareAndTreatment
通过上面的查询,您可以告诉sitecore从路径
进行搜索/ Sitecore的/内容/ ShrinersHospital2 / CareAndTreatment / Sitecore的/内容/ ShrinersHospital2 / CareAndTreatment
将返回0项作为结果,因为该路径不存在。
尝试以下查询:
string query = "//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']";
Item[] items = Sitecore.Context.Database.SelectItems(query);
当您将数据库切换到" web"时,您没有上下文,并且您的"开始"路径是/。然后下面的代码返回带有查询的项目,因为路径存在
/ sitecore / content / 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);