Sitecore Fast Query дает исключение Parse
Почему я получаю эту ошибку с кодом ниже ParseException: End of string expected at position 4.
Здесь код: ошибка находится на третьей строке.
var db = Sitecore.Configuration.Factory.GetDatabase("web");
string query = @"fast:/sitecore/content/foodservice/home/Products/3492-5326/3518-7";
Item item = db.SelectSingleItem(query);
return item;
Можно ли использовать быстрый запрос с SelectSingleItem()
? Я пытался избежать get folder contents and loop through each item until I find the target solution.
Предложения?
Ответы
Ответ 1
Это ошибка при использовании быстрого запроса и SelectSingleItem(). Проблема исправлена в выпуске Sitecore CMS 6.3.0 rev.100716. См. Примечания к выпуску. Поскольку мы используем 6.2, мне пришлось переписать мой метод для использования запроса Sitecore вместо быстрого запроса.
Ответ 2
При использовании Sitecore Query вам необходимо избегать имен элементов с тире. Из SDN:
Элементы с тире в именах ( "-" ) должны быть включены в символы "#". Пожалуйста, используйте такой синтаксис:/sitecore/content/Home/# About-us #. В противном случае вы можете получить следующую ошибку: Недопустимый источник поиска "/sitecore/content/TestSiteB/Home/About-us": Конец строки, ожидаемый в позиции 38. Кроме того, имя элемента должно быть включено в символы "#", если оно содержит "и" или "или", и используется до символов "//". Например: "/sitecore/content/Главная/# новости и события #//".
UPDATE:
Я подтвердил, что это относится и к Fast Query.
End of string expected at position 27.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: Sitecore.Data.Query.ParseException: End of string expected at position 27.
Source Error:
Line 21: protected void Page_Load(object sender, EventArgs e)
Line 22: {
Line 23: Sitecore.Context.Database.SelectSingleItem("fast:/sitecore/Content/Home/Test-Item");
Line 24:
Line 25: Model = Sitecore.Context.Item;
Тот же код отлично работает С#escapes #:
Sitecore.Context.Database.SelectSingleItem("fast:/sitecore/Content/Home/#Test-Item#");