我有一个场景,我发布了数千个使用特定类别/关键字分类的组件演示文稿,但组件还有自定义元数据字段,用于定义顶部 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);
答案 0 :(得分:12)
在JSP中使用SQL似乎不合适,因为它是数据层逻辑,不应出现在演示文稿中。此外,如果Tridion使用新版本更新数据库结构,则存在自定义SQL可能停止工作的风险。您最好使用Broker API,而不是依赖于Broker DB中的自定义SQL语句。
我认为最好的办法是尽量减少所需的数据库命中数。 API允许按关键字过滤(您也可以按自定义元素进行过滤,但这对您没有帮助,因为您提到要按给定的自定义元字段进行排序)。您有两种方法可以按关键字获取CP列表,然后您可以对其进行排序:
您的问题主题询问分类法查询示例的一些示例。在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论坛是另一个好地方。以下是一些带有一些示例代码的线程: