Revoke Promotion
13 商品コレクションのフィルタリング
Oracle ATG Web Commerceでは、製品に対して機能するように設計された単独コレクション・フィルタリン
グ・コンポーネントおよびチェーンされたコレクション・フィルタリング・コンポーネントを用意することによって、
このプラットフォームのコレクション・フィルタリング機能を拡張しています。
コレクション・フィルタリングについて説明するこの章は、次の項から構成されています。
製品コレクション・フィルタリングが機能する仕組み コレクション・フィルタリング・コンポーネントの使用 複数サイトのギフト・リストとウィッシュ・リストのフィルタリング コレクション・フィルタリングの詳細は、次の資料を参照してください。
コレクション・フィルタリングの一般的な説明については、『ATG Web Commerce Personalization Programming Guide』のコレクションのフィルタリングを参照してください。
CollectionFilterサーブレットBeanのリファレンス情報については、ATG Web Commerce Page Developer’s Guide』の付録B: ATG サーブレットBeanを参照してくださ い。
APIコレクション・フィルタリングに関するドキュメントは、『ATG Web Commerce Platform API Reference』のatg.service.collections.filterパッケージおよび
atg.commerce.collections.filterパッケージを参照してください。
製品コレクション・フィルタリングが機能する仕組み
単独コレクション・フィルタまたはチェーン内のフィルタを使用してコレクションから製品をフィルタできます。
この例は、フィルタのチェーンで定義されている条件を満たす製品のコレクションをレンダリングする方法を 示しています。レンダリングされたコレクションは将来使用するためにキャッシュされます。
販売中のアクティブな製品のリストをWebページ上で顧客に表示することを考えてみましょう。それを実行 するには、JSP内でコレクション・フィルタリング・サーブレットBean(ProductFilterDroplet)を使用して、
コレクション・フィルタリング・コンポーネント(ProductFilter)にアクセスし、そのコンポーネントがフィルタ のチェーンを製品のコレクションに適用します。ProductFilterDropletおよびその他のコレクション・フィ ルタリング・サーブレットBeanの詳細は、CollectionFilterを参照してください。
ProductFilterの役割は、別々のコレクション・フィルタをチェーン状に連結し、そのチェーンを実行する
ことです。次の例では、ProductFilter.filtersプロパティがStartEndDateFilterと
InventoryFilterという2つのコレクション・フィルタを識別しているものと想定しています。これらのフィル
タは集団的に作用して、販売されていない製品(StartEndDateFilter)および在庫がない製品
(InventoryFilter)を削除します。
JSPコードは次のようになります。
<dspel:droplet name="/atg/commerce/collections/filter/droplet/
ProductFilterDroplet">
<dsp:param name="collection" param="item.childproducts/>
<dsp:param name="collectionIdentifierKey" value="catid-0067-hardscape"/>
<dspel:oparam name="output">
Featured Plants:<p>
<dsp:droplet name="/atg/dynamo/droplet/ForEach">
<dsp:param name="array" param="filteredCollection"/>
<dsp:oparam name="output">
<dspel:valueof param="element"/>
</dspel:oparam>
</dsp:droplet>
</dspel:oparam>
<dspel:oparam name="empty">
There are currently no outdoor plants </dspel:oparam>
</dspel:droplet>
このJSPを実行すると、ProductFilterDropletは製品をProductFilterコンポーネントに渡して、
チェーンを実行します。
最初のコンポーネントは、現在の日付を、個々の製品のstartDateプロパティおよび endDateプロパティ内の値と比較するStartEndDateFilterです。アクティブでない 製品(「開始されていない」製品またはすでに「終了した」製品)は放棄され、残った製品 がInventoryFilterに渡されます。
InventoryFilterは、在庫マネージャと通信して、スロット内のすべての製品の可用
性を調べます。在庫がなくなっている製品はコレクションから削除されます。
ProductFilterでキャッシュが使用可能になっていれば、FilterCacheコンポーネン トは、プレフィルタされたコレクションとフィルタされた結果に関する情報を保存します。こ のJSPのそれ以降のレンダリングでは、キャッシュされているプレフィルタされたコレク ションを現在のプレフィルタされたコレクションと比較します。適切な場合は、キャッシュさ れているフィルタされた結果が使用されます。キャッシュの詳細は、『ATG Web Commerce Personalization Programming Guide』 のコレクションのフィルタリングを参照 してください。
コレクション・フィルタリング・コンポーネントの使用
コレクション・フィルタリング・コンポーネントは、一意の条件セットに基づいてコレクション内のオブジェクトを 減らすコンポーネントです。Oracle ATG Web Commerceは、3つのコレクション・フィルタリング・コンポーネ ントを備えています。
InventoryFilterの使用
ExcludeItemsInCartFilterの使用 ProductFilterの使用
CartSharingFilterの使用
これらのコンポーネントは、別のリソース(シナリオまたはサーブレットBean)からコレクションを受け取り、結 果として生成されたコレクションを呼び出し元のリソースに返します。シナリオでコレクション・フィルタリング・
コンポーネントを使用するには、コレクション・フィルタリング・コンポーネントを使用するFilter Slot Contents処理要素を定義します。このシナリオ処理については、『ATG Web Commerce Personalization Programming Guide』を参照してください。サーブレットBeanを使用してコレクション・フィルタリング・コン ポーネントにアクセスするための具体的な手順は、次の各項のコンポーネントの説明に含まれています。
コレクションには任意の種類のオブジェクトを格納できますが、ここで説明するコレクション・フィルタリング・コ ンポーネントは、タイプがProductのRepositoryItemsに対して作用するように定義されていることを念 頭に置いてください。コレクション内のすべての非Product項目はコンポーネントによって無視され、結果 セットに含まれます。
InventoryFilter の使用
atg.commerce.collections.filter.InventoryFilterクラスのコンポーネントである
/atg/registry/CollectionFilters/InventoryFilterコンポーネントは、在庫の可用性が特定の状 態にある製品をコレクションから除外するために使用されます。
InventoryFilterは、個々の製品のSKUについてInventoryManagerで定義されている在庫ステー タスをInventoryFilter.IncludeInventoryStatesプロパティで指定されているステータスと比較しま す。製品のいずれかのSKUがIncludeInventoryStatesプロパティに含まれているステータスを持って いれば、その製品は結果セット・コレクションに残ります。デフォルトで、
InventoryFilter.IncludeInventoryStatesは、1000(在庫あり)、1002(プレ・オーダー可能)および 1003(バック・オーダー可能)という値を持っているため、これらの値のいずれかが含まれているすべての製 品が返されるコレクションに追加されます。
InventoryFilterDropletサーブレットBean(直接)およびProductFilterDroplet(フィルタ・チェー ンの一部として)を経由して、InventoryFilterコンポーネントにアクセスできます。コレクション・フィルタ のコンテンツをキャッシュすることもできますが、独自のキャッシュ・メカニズムを持っている
CachingInventoryManagerのような在庫マネージャを使用している場合は、InventoryFilterのコン テンツをキャッシュしないことをお薦めします。キャッシュの詳細は、『ATG Web Commerce Personalization Programming Guide』のコレクションのフィルタリングを参照してください。
ExcludeItemsInCartFilter の使用
atg.commerce.collections.filter.ExcludeItemsInCartFilterクラスのコンポーネントである /atg/registry/CollectionFilters/ExcludeItemsInCartFilterコンポーネントは、ユーザーの ショッピング・カート内にあるすべての製品をコレクションから削除するために使用されます。このコンポーネ
ントは、shoppingCartPathプロパティを利用して、現在のユーザーのショッピング・カートを見つけます。
デフォルト値は/atg/commerce/ShoppingCartです。
ExcludeItemInCartFilterDropletを(直接)経由してExcludeItemsInCartFilterコンポーネント にアクセスできます。コレクション・フィルタのコンテンツをキャッシュすることもできますが、キャッシュされたコ ンテンツが再利用される可能性が低く、キャッシングがリソースの浪費になるため、
ExcludeItemsInCartFilterから返される結果をキャッシュしないことをお薦めします。キャッシュの詳細
は、『ATG Web Commerce Personalization Programming Guide』のコレクションのフィルタリングを参照してく ださい。
ProductFilter の使用
atg.service.collections.filter.ChainedFilterクラスのコンポーネントである
/atg/registry/CollectionFilters/ProductFilterコンポーネントは、フィルタの条件を製品のコレ クションに適用するコレクション・フィルタのチェーンを作成するために使用されます。
ProductFilterは、ProductFilter.filtersプロパティで定義されている個々のフィルタに次々と製品 を渡し、個々のコレクション・フィルタによって指定されている条件を満たす最終的なコレクションを生成しま す。デフォルトで、ProductFilter.filtersは、StartEndDateFilterおよびInventoryFilterに設 定されます。
ProductFilterDropletサーブレットBeanを使用して、JSPでProductFilterコンポーネントにアクセ スできます。ProductFilterDropletを使用すると、結果として生成されるコンテンツはデフォルトでキャッ シュされます(cacheEnabledがtrueに設定されます)。ChainedFilterクラスおよびキャッシングの詳 細は、『ATG Web Commerce Personalization Programming Guide』のコレクションのフィルタリングを参照し てください。
CartSharingFilter の使用
Oracle ATG Web Commerceの複数サイト機能を使用している場合、
atg.commerce.collections.filter.ItemSiteFilterクラスのコンポーネントである
/atg/registry/CollectionFilters/CartSharingFilterコンポーネントは、入力項目コレクションの サイトIDによって入力項目コレクションをフィルタします。
このフィルタは、atg.ShoppingCart共有可能タイプの構成に基づいて、同じ共有グループ内にある製品 のみを返します(『ATG Web Commerce Programming Guide』の複数のCommerceの構成に関する項を参 照してください)。
2つの追加プロパティであるincludeDisabledSitesとincludeInactiveSitesは、どのサイト状態が 考慮されるかを決定します(デフォルトで両方がfalseに設定されます)。共有可能タイプがない場合でも、こ れらのフィルタは考慮されます。現在のサイトがない場合は、フィルタリングされずにすべての品目が返され ます。
JSPでCartSharingFilterコンポーネントにアクセスできます。CollectionFilterを参照してください。
複数サイトのギフト・リストとウィッシュ・リストのフィルタリング
Oracle ATG Web Commerceは、ギフト・リストおよびギフト品目のコレクションをフィルタし、顧客のサイト・コ ンテキストに適したリスト/品目のみを表示する機能を備えています。複数サイト環境では、
Profile.giftlistsやProfile.wishlist.giftlistItemsなどのリポジトリ項目のプロパティを参照 することによってギフト・リストまたはギフト品目のコレクションを取得するたびに、複数のサイトから取得され た品目が含まれている可能性のあるフィルタされていないリストが返されます。これらの状況では、コレクショ ンをフィルタする必要があるかどうかを検討し、フィルタする必要があれば、この項で説明するフィルタ機能 を実装する必要があります。
フィルタリングはウィッシュ・リストで特に重要です。顧客は1つのウィッシュ・リストしか持てないため、複数の サイトから取得された品目が1つのウィッシュ・リスト内に存在する可能性が高くなります。ウィッシュ・リスト品 目の表示をサイト・コンテキストに適した品目のみに限定するには、サイト・コンテキスト外のサイトに属する すべての品目を除外する必要があります。
2つのコンポーネントがギフト・リストとギフト品目のフィルタリングを手助けします。