Tridion Taxonomy查询示例的任何良好来源

时间:2012-04-25 21:10:14

标签: filtering taxonomy tridion2009 tridion

我有一个场景,我发布了数千个使用特定类别/关键字分类的组件演示文稿,但组件还有自定义元数据字段,用于定义顶部 n 。将显示。基本上,我需要根据关键字过滤一组组件,根据自定义元数据对它们进行排序,只选择前N个。

我理解如何列出项目并创建基本过滤器(来自API中的过滤器项列表)但我需要过滤元数据字段(例如,带有最新元数据的三个项目“priorityDate”)。

从我正在阅读的内容中,我希望从分类搜索中获取所有记录(使用TaxonomyKeywordCriteria),然后手动(对QueryRunner执行SQL)检索所有组件的元数据以进行过滤/排序。

我肯定错过了一些东西(感觉不对,有1/2 API调用,然后在页面SQL脚本中)...如果没有,QueryRunner查询将被缓存在Taxonomy Query.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);

1 个答案:

答案 0 :(得分:12)

在JSP中使用SQL似乎不合适,因为它是数据层逻辑,不应出现在演示文稿中。此外,如果Tridion使用新版本更新数据库结构,则存在自定义SQL可能停止工作的风险。您最好使用Broker API,而不是依赖于Broker DB中的自定义SQL语句。

我认为最好的办法是尽量减少所需的数据库命中数。 API允许按关键字过滤(您也可以按自定义元素进行过滤,但这对您没有帮助,因为您提到要按给定的自定义元字段进行排序)。您有两种方法可以按关键字获取CP列表,然后您可以对其进行排序:

  1. Query.execureQuery()。这将返回一个tcm URI列表,这意味着必须单独进行数据库命中以检索CustomMetadata对象和CP(ComponentPresentationFactory.GetComponentPresetation(tcmUri))。这可能(并且可能会)变得很重,直到所有内容都被充分缓存。
  2. ComponentPresentationFactory.getTaxonomyComponentPresentations()。您可以将一组关键字传递给此方法,然后返回更多的CP。这意味着一个快速数据库查询。在CM侧,在组件模板中将自定义元字段值的呈现添加为HTML注释。然后返回到传递端,只需从返回集的每个CP中解析出该值,然后在应用程序服务器(而不是数据库)上进行排序。这比执行许多数据库查询要快。
  3. 您的问题主题询问分类法查询示例的一些示例。在2011年的文档中查看sdllivecontent门户。 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论坛是另一个好地方。以下是一些带有一些示例代码的线程:

    1. https://forum.sdltridion.com/topic.asp?TOPIC_ID=6690&SearchTerms=taxonomy,query
    2. https://forum.sdltridion.com/topic.asp?TOPIC_ID=5619&SearchTerms=taxonomy,query