私は Tridion にかなり慣れていないので、コンテンツ エディターがコンポーネントを作成し、複数の日付範囲 (利用可能な日付) をそれに割り当てることができる機能を実装する必要があります。これらは、検索機能を提供するためにブローカーから照会する必要があります。
当初、これは単一の開始日と終了日のみを必要としていたため、個別のメタ データ フィールドとして実装されていました。
複数の開始日と終了日を割り当てることができるように、スキーマの「使用可能な日付」メタデータ フィールド内に埋め込みスキーマを使用することを提案しています。
ただし、フィールドが複数の値を許可するようになったため、データは、単一の値しか許可されていなかったときのように「KEY_DATE_VALUE」列の日付値としてではなく、「KEY_STRING_VALUE」列のカンマ区切りの値としてブローカーに保存されます。開始値と終了値。
例えば。
KEY_NAME | KEY_STRING_VALUE終了日
| 2012-04-30T13:41:00, 2012-06-30T13:41:00
start_date | 2012-04-21T13:41:00, 2012-06-01T13:41:00
単純なクエリ ロジックを使用して、日付に基づいて検索に必要なアイテムを取得できなくなったため、ブローカーのクエリで問題が発生しています。
これらのコンマ区切りの日付を解析し、それらに基づいて検索する C# ロジックを書き始める前に、過去に同様の要件/経験があり、必要なコード解析の量を減らすために別の方法でこれを実装した人がいるかどうか疑問に思っていました。ブローカーのクエリを使用して検索を完了します。
私は Tridion 2009 でこれを開発していますが、5.3 Broker を使用しているため (従来の理由から)、クエリは現在次のようになっています (単一の開始日/終了日):
query.SetCustomMetaQuery((KEY_NAME='end_date' AND KEY_DATE_VALUE>'" + startDateStr + "') AND (ITEM_ID IN(SELECT ITEM_ID FROM CUSTOM_META WHERE KEY_NAME='start_date' AND KEY_DATE_VALUE<'" + endDateStr + "')))";
どんな助けでも大歓迎です。