Быстрый запрос Sitecore дает исключение Parse

Почему я получаю эту ошибку с кодом ниже ParseException: End of string expected at position 4.

Вот код: Ошибка в 3-й строке.

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. предложений?


person kirk.burleson    schedule 17.11.2010    source источник
comment
связанный вопрос: stackoverflow.com/questions/3687405/escaping-reserved-words   -  person Christian Hagelid    schedule 14.12.2011
comment
Кто-нибудь знает, как избежать специальных символов, используемых в текстовых полях, таких как апостроф в описании элемента контента? stackoverflow.com/questions/16847831/   -  person longda    schedule 31.05.2013


Ответы (2)


При использовании Sitecore Query вам необходимо отделять имена элементов дефисами. Из SDN:

Элементы, в названиях которых есть прочерк («-»), должны быть заключены в символы «#». Используйте такой синтаксис: /sitecore/content/Home/#About-us#. В противном случае вы можете получить следующую ошибку: Invalid lookup source "/sitecore/content/TestSiteB/Home/About-us": Конец строки ожидается в позиции 38. Кроме того, имя элемента должно быть включено в символы «#», если оно содержит «и» или «или» и используется перед символами «//». Например: "/sitecore/content/Home/#новости и события#//".

ОБНОВЛЕНИЕ: я подтвердил, что это относится и к 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#");
person nickwesselman    schedule 17.11.2010
comment
Я использую Sitecore Fast Query, а не Sitecore Query. Тире не проблема. - person kirk.burleson; 17.11.2010
comment
Уверены ли вы? Вы пробовали убежать от них? Я бы предположил, что Fast Query будет использовать ту же логику синтаксического анализа, что сделает тире обязательным требованием. - person nickwesselman; 20.11.2010
comment
Я уверен, что это не тире. Моя ошибка находится на позиции 4, и вокруг нее нет тире. Я использовал другое решение. Спасибо! - person kirk.burleson; 24.11.2010
comment
Не могли бы вы опубликовать свое решение здесь для следующего человека, у которого возникнет такая проблема? - person nickwesselman; 24.11.2010
comment
@ techphoria414 Спас меня сегодня с этим при использовании SPE. - person Coding101; 10.02.2017
comment
И как это сделать, если они просто вводят путь через Item.Paths.Path? Ожидает ли это, что я найду каждое имя элемента в пути с тире, и или или и манипулирую строкой перед ее использованием? - person Paul; 06.09.2018
comment
Чтобы ответить на мой собственный вопрос выше - можно просто заменить все дефисы в пути дефисами, окруженными решетками (#), например: item.Paths.Path.Replace("-", "#-#"). - person Paul; 07.09.2018

Это ошибка при использовании Fast Query и SelectSingleItem(). Проблема устранена в выпуске Sitecore CMS 6.3.0 rev.100716. См. примечания к выпуску. Поскольку мы используем 6.2, мне пришлось переписать свой метод, чтобы использовать запрос Sitecore вместо быстрого запроса.

person kirk.burleson    schedule 24.11.2010
comment
Похоже, что теперь это проблема в 6.5.0 (версия 121009), но для запроса Sitecore (но на позиции 5). Радость. - person longda; 22.03.2013
comment
Это также проблема в Sitecore 6.6, поэтому, если ошибка была исправлена, она была повторно введена. - person Mark; 18.11.2014
comment
Мы используем 8.1 update 2 и также сталкиваемся с этим. Если запрос имеет префикс fast: или query:, он просто не работает. - person Markos; 17.03.2017
comment
Все еще проблема на Sitecore 9.2 - person Anderson Fortaleza; 26.05.2020