Подтвердить что ты не робот

Любые хорошие источники для примеров запросов таксономии Tridion

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

Я понимаю, как перечислять элементы и создавать базовые фильтры (из списка элементов фильтра в API), но мне нужно отфильтровать поле метаданных (например, три элемента с последними метаданными "priorityDate" ).

Из того, что я читаю, мне следовало бы взять все записи из поиска таксономии (используя TaxonomyKeywordCriteria), а затем вручную (SQL, выполненный против QueryRunner), чтобы получить все метаданные компонентов для фильтрации/сортировки.

Я, должно быть, что-то пропустил (не так уж хорошо, что есть вызов API 1/2, а затем на странице SQL script)..., и если бы запрос QueryRunner не был кэширован вместе с результатами таксономического запроса .executeQuery()

Пример кода:

ItemTypeCriteria isComponent = new ItemTypeCriteria(16);
TaxonomyKeywordCriteria taxonomyKeywordCriteria = new TaxonomyKeywordCriteria(taxURI, taxKeywordURI, true);
Criteria[] allCriteria = {isComponent, isTDIPublication, isArticle, taxonomyKeywordCriteria}; 
AndCriteria andCriteria = CriteriaFactory.And(allCriteria);
Query query = new Query();         
query.setCriteria(andCriteria);
4b9b3361

Ответ 1

Использование SQL внутри вашего JSP не кажется подходящим, поскольку логика уровня данных и не должна присутствовать в презентации. Кроме того, если Tridion обновляет структуру базы данных с новой версией, тогда существует риск, что ваш пользовательский SQL может перестать работать. Вам лучше использовать API-интерфейс Broker и не полагаться на пользовательские инструкции SQL в Брокерскую БД.

Я думаю, что лучше всего попытаться минимизировать количество требуемых запросов к базе данных. API позволяет фильтровать по ключевым словам (вы также можете фильтровать пользовательские мета, но это вам не поможет, поскольку вы упомянули, что хотите сортировать по заданному мета-полю). У вас есть два варианта получения списка CP по ключевым словам, которые вы можете сортировать:

  • Query.execureQuery(). Это возвращает список URI tcm, что означает, что для получения объектов CustomMetadata и CP (ComponentPresentationFactory.GetComponentPresetation(tcmUri)) необходимо сделать отдельный клик БД. Это может (и, вероятно, будет) затягиваться, пока все не будет достаточно кэшировано.
  • ComponentPresentationFactory.getTaxonomyComponentPresentations(). Вы можете передать массив ключевых слов этому методу и получить более широкий набор CP. Это означает один быстрый запрос БД. На стороне CM в шаблоне компонента добавьте рендеринг значения Custom Meta в качестве комментария HTML. Затем на стороне доставки просто проанализируйте это значение из каждого CP возвращаемого набора и выполните сортировку на сервере приложений (а не в БД). Это будет быстрее, чем выполнение многих запросов БД.

В теме вопроса задаются примеры примеров запросов в области таксономии. Взгляните на портал sdllivecontent в документации 2011 года. API почти такой же, как и в 2009 году (есть только тонкие отличия, однако есть несколько примеров построения фильтров, предоставляемых там: http://sdllivecontent.sdl.com/LiveContent/web/pub.xql?action=home&pub=SDL_Tridion_2011&lang=en-US#addHistory=true&filename=DevelopingAFilter.xml&docid=concept_0AB6D192D7AB4EC18892631F519EF1DD&inner_id=&tid=&query=&scope=&resource=&eventType=lcContent.loadDocconcept_0AB6D192D7AB4EC18892631F519EF1DD

Форум sdltridionworld - еще одно хорошее место, если вы просматриваете темы. Вот несколько потоков с некоторым примером кода: