Найти элементы sitecore с определенным профилем OMS? - PullRequest
1 голос
/ 07 октября 2010

Мне нужно найти все элементы в Sitecore (или, скорее, в содержимом), которые имеют определенный профиль OMS (комплект маркетинга), отмеченный в атрибуте «Отслеживание». Кажется, что атрибут Tracking хранится в формате XML и имеет необработанное значение, например

<tracking>
  <profile name="Widdly Scuds"><!-- some irrelevant keys... --></profile>
</tracking>

и мне нужно, например, выбрать все предметы с профилем "Widdly Scuds".

Первым решением, о котором я подумал, был быстрый запрос по атрибуту Tracking. Запрос Sitecore или XML придется обходить все содержимое каждый раз, что будет вероятно недопустимо медленным, но я попробую, если нет альтернативы.

Это первый быстрый запрос, который я пробовал:

fast://*[@Tracking = '%Widdly Scuds%']

но это возвращает 0 результатов. Итак, я попробовал это:

fast://*[@Tracking = '<tra%']

и это (что соответствует именам многих профилей:

fast://*[@Tracking = '%A%']

И это также возвращает 0 результатов. Я не совсем уверен, как отслеживание хранится или запрашивается, но это кажется необычным, поскольку я не могу получить какие-либо результаты от него.

Запрос должен быть достаточно быстрым, чтобы его можно было выполнить несколько десятков раз во время рендеринга короткой страницы (вероятно, не более 20-30 секунд). Результаты могут кэшироваться некоторое время, но не очень долго. На главной странице раздела сайта, над которым я работаю, необходимо отобразить количество элементов для каждого профиля, к которому я обращаюсь, и, возможно, будет 50-ти профильных.

Итак, как мне быстро получить все товары с определенным маркетинговым профилем?

Редактировать: Я закончил с использованием Lucene. Подробности этого приключения появятся в будущих вопросах, может быть ...

Ответы [ 2 ]

1 голос
/ 13 октября 2010

Если вы используете запрос или перебираете потомков, избегайте запуска запроса с / если возможно - начинайте с эквивалента /sitecore/content/someitem.

Другой подход - использовать Lucene или другой поисковый индекс. См. Ссылку на Sitecore для получения дополнительной информации .

1 голос
/ 07 октября 2010

Тьфу, поле Tracking фактически сохраняется как __Tracking. Упс. Таким образом, запрос в конечном итоге будет

 fast://*[@__Tracking = '%"Widdly Scuds"%']

У этого все еще есть проблемы, так как он все еще пытается запросить XML с помощью строковых операций, и я могу закончить с ошибкой позже, если профиль и ключ имеют одно и то же имя, но пока это работает достаточно хорошо.

...