Revoke Promotion
14 オーダー・マーカーおよび商品マーカー の使用
オーダー・マーカーおよび商品マーカーを使用すると、オーダーまたは商品に任意の情報を追加し、その 情報をアプリケーションで使用するために永続化できます。
この目標を別の方法で達成するには、カスタム・プロパティを使用します。ただし、カスタム・プロパティが保 持するデータは通常1つのみであるため、格納するデータのタイプごとに1つのカスタム・プロパティが必 要になります。マーカーを使用すると、複数の情報を1つのリポジトリ項目に格納し、サポートする条件、処 理、イベント、およびマーカーを作成、検索、削除するように設計されたサーブレットBeanを設定できます。
このような機能があるため、カスタム・プロパティよりもマーカーをお薦めします。
オーダー・リポジトリのmarkerおよびcommerceItemMarkerの各リポジトリ項目タイプには同じプロパティ があり、これはすべて文字列です。
key value data
さらに、orderおよびcommerceItem項目タイプのリポジトリ定義には、マーカーのsetを格納する
markersプロパティも含まれています。
keyプロパティによって、1つの種類のマーカーは別のマーカーと区別されます。keyはマーカー・タイプと 考えることができ、これはマーカー・データを編成する原則として使用されます。keyプロパティが、value のスーパーセットである場合があります。同様に、dataプロパティは、valueのサブセットである場合があり ます。
マーカーが機能する仕組みを次に示します。
1. マーカー・マネージャを構成します。マーカー・マネージャは、マーカーの作成や削除 など、マーカーとオーダーの間、またはマーカーと商品の間におけるすべての相互作 用を容易にします。
2. いつ、どのようにマーカーを作成し、オーダーまたは商品に添付するかを定義するコー ドを作成します。
3. アプリケーションでは、特定のマーカーをチェックし、マーカーに基づいて応答するシナ リオまたはサーブレットBeanを使用できます。
4. パフォーマンス向上のため、必要でなくなったマーカーは削除します。
詳細は、『ATG Web Commerce Platform API Reference』のatg.markersパッケージを参照してください。
マーカー・マネージャの構成
オーダー・マーカーおよび商品マーカーは、次のコンポーネントによって管理されます。
/atg/commerce/markers/OrderMarkerManager
/atg/commerce/markers/CommerceItemRepositoryMarkerManager
アプリケーションで、新しいマーカーの追加、既存のマーカーの削除またはオーダー上のマーカーに関す る情報の問合せを行うと、マネージャ・コンポーネントは、マークされた項目(orderまたはcommerceItem)、
マーカー(markers)を保持する項目のプロパティ、およびマーカー(marker)の役割を果たす項目のタイ プを識別して、これらの処理を調整します。
マネージャ・コンポーネントには、オーダーと商品のマーカーを検索、追加および削除するためのメソッドが 備えられています。また、APIを使用してプロパティを追加することもできます(この使用方法は、購入時ギ フト販促で説明します。『ATG Web Commerce Programming Guide』を参照してください)。マネージャ・コン ポーネントは、キー、値およびデータの任意の組合せを使用してマーカーを取得します。
マーカー・マネージャは、マーカーを追加すると、使用するように構成されているマーカーの複製ルールと 検証ルールを適用します。これらのコンポーネント設定にはデフォルト値があり、サーブレットBeanで逆の 値を指定するとコンポーネント設定を上書きできます。
デフォルトでは、単一のマーカー・マネージャがすべてのマーカー・アクティビティを管理します。特定タイプ のマーカーに必要な、様々な検証ルールおよび複製ルールを使用するために、マーカー・マネージャ・コ ンポーネントを追加作成できます。
マーカー複製モードの設定
マーカー・マネージャは、マーカーが追加されると、作成したマーカーに使用するデフォルト複製モードを 指定します。マーカー・マネージャが受け入れるdefaultDuplicationModeプロパティの3つの値は次 のとおりです。
ALLOW_DUPLICATES REPLACE_DUPLICATES NO_DUPLICATES
マーカー・マネージャが、指定されたオーダーまたは商品の既存のマーカーと同じマーカーを作成すること を要求されると、マーカー・マネージャは新しいマーカーを破棄する(NO_DUPLICATES)か、複製によってオ リジナルを置換する(REPLACE_DUPLICATES)か、またはオリジナルに追加して新しいマーカーを受け入れ
る(ALLOW_DUPLICATES)ことができます。マーカーの数が少ない方が、特定のマーカーに対する問合せの
応答は早くなります。
NO_DUPLICATESまたはREPLACE_DUPLICATESを指定した場合、マーカー・マネージャは比較コンポーネント を使用して、新しいマーカーが既存のマーカーの複製であるかどうかを判定します。
defaultMarkerDuplicateComparatorプロパティは、デフォルトで
/atg/markers/CompareByDefaultPropertiesに設定されており、この場合、key、valueおよびdataの プロパティに同じ値が設定されていると、2つのマーカーは同一と見なされます。Oracle ATG Web Commerce には、もう1つのコンポーネント(/atg/markers/userprofiling/CompareByKeyAndValue)が含まれていま す。このコンポーネントは、keyプロパティとvalueプロパティの値のみに基づいて等価性を判定します。
マーカーの一意性の定義
指定したマーカーのプロパティまたは定義したビジネス・ロジックに基づいて、一意性を判定する独自のコンポー ネントを作成できます。1つの方法としては、複数の比較コンポーネントを提供し、それぞれのコンポーネントを
(マーカーのkeyによって識別された)特定タイプのマーカーに必要な一意性の条件に合わせて調整します。
マーカー・プロパティの値に基づいて等価性を判定する比較コンポーネントを作成するには 1. atg.markers.CompareByPropertiesクラスのコンポーネントを作成します。
2. propertiesTocompareプロパティを、マーカー・プロパティまたは比較して等価性を
判定するプロパティに設定します。
3. 複数の比較コンポーネントがある場合は、markerDuplicateComparatorsマップ・プ ロパティを更新して、各コンポーネントを使用します。キーをマーカーのkey値に設定し、
値を比較コンポーネントに設定します。
定義したビジネス・ロジックに基づいて等価性を判定する比較コンポーネントを作成するには 1. atg.markers.MarkerDuplicateComparatorのサブクラスを作成し、そのクラスのコ
ンポーネントを作成します。
2. 複数の比較コンポーネントがある場合は、markerDuplicateComparatorsマップ・プ ロパティを更新して、各コンポーネントを使用します。キーをマーカーのkey値に設定し、
値を比較コンポーネントに設定します。
マーカー検証の構成
アプリケーションでマーカーを作成する場合、指定する必要があるのはkeyプロパティ値の情報のみです。必 要に応じて、すべてのマーカーのkey値を6文字以上とするなど、マーカーの準拠基準をより厳格にできます。
あるいは、検証要件を、マーカー・プロパティには関係のない、アプリケーション固有のビジネス・ロジックに基づ くようにすることもできます。使用するマーカーに適した検証基準を実現する検証クラスを作成してください。
定義する検証基準は、マーカーのタイプによって異なることがあります。key Xを含むマーカーにはkeyお よびvalueの値が必要ですが、key Yを含むマーカーには、カスタム・プロパティのexpirationDateの 日付値が必要となるなどの場合です。各検証コンポーネントはkeyに対して照合する必要があります。特 定のマーカー・マネージャによって作成されたすべてのマーカーに対応する、1つの検証コンポーネントを 作成する方法はありません。
新しい検証標準を定義するには、次の手順を実行します。
1. 検証基準のセットごとにクラスを作成します。このクラスは、
atg.markers.MarkerValidatorContainerインタフェースを実装する必要がありま す。各クラスのコンポーネントを作成します。
2. 定義した各検証コンポーネントを使用するように、マーカー・マネージャの
markerValidatorsマップ・プロパティを更新します。キーをマーカーのkey値に設定
し、valueを検証コンポーネントに設定します。たとえば、次のようになります。
markerValidators=X=/atg/KeyXValidator,Y=/atg/KeyYValidator 1. 想定されるkeyごとに検証コンポーネントを定義した場合のみ、マーカー・マネージャ
のalwaysValidateプロパティをtrueに設定します。定義していない場合はfalse 設定のままにします。このとき、検証コンポーネントにマップされたこれらのマーカーは、
いずれにしてもこのコンポーネントを使用します。
2. 移入されるkey、valueおよびdataの他にマーカーのプロパティが検証基準に必要 な場合は、マーカー・マネージャ・コンポーネントの
オーダーまたは商品のマーク付け
マーカー機能を使用するには、オーダーまたは商品がマーク付けされる状況を定義する必要があります。
エラーなしでフォームが発行されたときに表示される、フォームの成功ページでは、
AddMarkerToOrderDropletまたはAddMarkerToItemDropletサーブレットBeanを使用できます。
AddMarkerToOrderDropletまたはAddMarkerToItemDropletサーブレットBeanの詳細は、付録A:
Oracle ATG Web CommerceサーブレットBeanを参照してください。
マーク付けされたオーダーまたは商品の使用
オーダーまたは商品に付けたマーカーは、様々な方法で使用できます。オーダーまたは商品に特定の マーカーがあるかどうかに応じてテキストを表示したり、処理を開始するJSPを設計できます。あるいは、
マーカー・アクティビティが発生した場合にのみシナリオを進めるようにできます。例については、以降のシ ナリオを参照してください。これらの例はすべて、オーダーおよび商品のマーカーに適用されます。
サーブレット Bean を使用したオーダー・マーカーまたは商品マーカーの検索
特定のオーダーまたは商品にあるマーカーの検索には、複数のサーブレットBeanを使用できます。これら のサーブレットBeanを使用する場合は、操作するオブジェクトを示す入力パラメータを指定します。指定し なかった場合は、アクティブなオーダーまたは商品が使用されます。
HasMarkerDropletサーブレットBean(商品の場合)およびOrderHasMarkerDropletサーブレット
Bean(オーダーの場合)を使用してマーカーのkey、valueまたはdataプロパティ値を指定すると、特定
のマーカーをチェックできます。
OrderHasLastMarkerDropletサーブレットBeanは、指定されたオーダーに添付された最終マーカーを
特定します。指定された特定のkey、value、dataまたは他のマーカー・プロパティ値が最終マーカーにあ る場合にのみ、その最終マーカーを返すように指定できます。また、このサーブレットBeanを使用すると、
マーカーが存在するかどうかの判定の他、マーカー自体にアクセスすることもできます。
最後に、OrderHasLastMarkerWithKeyDropletを使用すると、特定のkeyを持つオーダーに追加され た最終マーカーに、一致する値とデータが存在するかどうかを判定できます。
ここで説明したサーブレットBeanの詳細は、付録A: Oracle ATG Web CommerceサーブレットBeanを参 照してください。
オーダーにマーカーがある場合のシナリオの進行
アクティブなオーダーに特定のマーカーが存在する場合にのみシナリオを進める場合は、シナリオでマー カー条件を使用します。オーダー・マーカーに関連する、3つの条件を使用できます。
オーダーにオーダー・マーカーが存在する場合にシナリオが応答するようにする場合は、
Order has a marker条件を使用します。
Order's last marker条件を使用すると、指定したkey、valueおよびdataの値が オーダーの最終マーカーに存在する場合にのみ、次のシナリオ要素に進むことを指定 できます。
Order's last marker with keyという名前の3番目の条件を使用すると、ここで指
定したvalueおよびdataの値を持つ特定のkeyを含む最終マーカーがオーダーに
存在する場合にのみ、次のシナリオ要素に進むことを指定できます。