12

特定のカテゴリ/キーワードで分類された数千のコンポーネント プレゼンテーションが公開されているシナリオがありますが、コンポーネントには上位nを定義するためのカスタム メタデータ フィールドもあります。それが表示されます。基本的に、キーワードに基づいて一連のコンポーネントをフィルタリングし、カスタム メタデータに基づいてそれらを並べ替え、上位 N 個のみを選択する必要があります。

アイテムを一覧表示し、(API のフィルター アイテムのリストから) 基本的なフィルターを作成する方法は理解していますが、メタデータ フィールド (たとえば、最新のメタデータ "priorityDate" を持つ 3 つのアイテム) でフィルター処理する必要があります。

私が読んでいるものから、タクソノミー検索からすべてのレコードを取得し (TaxonomyKeywordCriteria を使用)、手動で (QueryRunner に対して SQL を実行)、すべてのコンポーネントのメタデータを取得してフィルター処理/並べ替えを行うことが期待されます。

私は確かに何かを逃したに違いありません (1/2 API 呼び出しとページ内 SQL スクリプトがあるのは適切ではないと感じています)...そうでない場合は、Taxonomy Query.executeQuery() の結果と一緒に QueryRunner クエリがキャッシュされます。

コード例:

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);
4

1 に答える 1

12

JSP 内で SQL を使用することは適切ではないようです。これはデータ層のロジックであり、プレゼンテーションに存在するべきではないからです。また、Tridion が新しいリリースで DB 構造を更新すると、カスタム SQL が機能しなくなるリスクがあります。Broker API を使用したほうがよいでしょう。また、Broker DB へのカスタム SQL ステートメントに依存する必要はありません。

最善の策は、必要なデータベース ヒット数を最小限に抑えることだと思います。API では、キーワードによるフィルタリングが可能です (カスタム メタでフィルタリングすることもできますが、特定のカスタム メタ フィールドで並べ替えたいと述べたので、それは役に立ちません)。キーワードで CP のリストを取得して並べ替えるには、次の 2 つのオプションがあります。

  1. Query.execureQuery()。これは、tcm URI のリストを返します。つまり、CustomMetadata オブジェクトと CP (ComponentPresentationFactory.GetComponentPresetation(tcmUri)) を取得するには、別の DB ヒットを行う必要があります。すべてが十分にキャッシュされるまで、これは重くなる可能性があります (おそらくそうなるでしょう)。
  2. ComponentPresentationFactory.getTaxonomyComponentPresentations()。このメソッドにキーワードの配列を渡すと、より大きな CP のセットを取得できます。これは、1 つのクイック DB クエリを意味します。CM 側では、コンポーネント テンプレートにカスタム メタ フィールド値のレンダリングを HTML コメントとして追加します。次に、配信側に戻って、返されたセットの各 CP からその値を解析し、(DB ではなく) アプリケーション サーバーで並べ替えを行います。これは、多くの DB クエリを実行するよりも高速です。

あなたの質問のトピックは、分類クエリの例のいくつかの例を求めています。2011 年のドキュメントで sdlllivecontent ポータルを参照してください。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_0AB6D192D7AB4EC18892631DDD5191EF

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
于 2012-04-26T00:27:12.900 に答える