---
title: "推奨製品パイプライン"
slug: "the-recommended-products-pipeline"
abstract: "推奨製品パイプラインの概要およびパイプラインの議論。"
---
# 推奨製品パイプライン

おすすめ商品はSXAストアフロントで2通りサポートされており、メールキャンペーンの一部としてレンダリングするか、店舗サイト(Commerce Search Resultsレンダリングと検索範囲を用いて)でレンダリングできます。いずれの場合もGetRecommendedProductsパイプラインが使用されます。

GetRecommendedProductsパイプラインが実行されると、得られた製品IDのリストが利用され、カタログアイテムや製品詳細を取得し、対応するレンダリングモデルを合成して商品カードをレンダリングします。パイプラインへの入力は型GetRecommendedProductsArgsの引数オブジェクトです。パイプラインを実行する結果は製品アイテムIDのリストであり、パイプライン引数オブジェクトのRecommendedProductsIdListプロパティに保存されます。

以下の図は、推奨製品の決定方法を3つのシナリオで示しています。

-   マーケティングオートメーションキャンペーンから商品推薦メールが送信された場合、またはList Managerセグメンテーションルールを用いて送信された場合、注文IDが商品推薦を決定するために使われます。EXMクエリパラメータに注文IDがない場合は、最後の注文IDがProductsQueryプロパティまたはCommerce Interactionsキャッシュから取得されます。
-   商品を推奨する一括メールキャンペーンが送信されたとき。この場合、最後の注文IDはProductsQueryプロパティまたはCommerce Interactionsキャッシュから取得されます。
-   検索範囲を使ってライブストアフロントサイトで推奨商品を表示する場合。この場合、推奨商品は検索範囲の結果から取得されます。

> !注ScopeIdはCommerce Search Resultsレンダリングおよび関連する検索範囲をレンダリングする際にのみパイプラインの引数に渡されます。

パイプラインプロセッサのうち1つが推奨製品の評価に成功すると、他のプロセッサは無視されます。

![Get Recommended Products pipeline process](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/102/sitecore-experience-commerce/images/RecommendedProductsPipelineProcess.png)

## GetRecommendedProductsパイプライン

デフォルトでは、GetRecommendedProductsパイプラインには以下の表に示されるように4つのプロセッサが存在します。これらはリストされた順序で実行されます。最初のプロセッサの条件が満たされると、プロセッサは製品アイテムIDを取得し、RecommendedProductsIdListプロパティとSuccessプロパティを設定して、これ以上の処理が不要であることを示します。

各プロセッサが実行を開始する前に、RecommendedProductsIdListプロパティがすでに設定されているかを確認します。設定されている場合は、さらなる処理をスキップして次のプロセッサに移ります。つまり、明示的な注文IDが引数として渡された場合、優先されます。また、明示的な注文IDが存在せず、クエリを指定して結果が返された場合は、それ以上の処理は行われません。フォールバックとして、メールキャンペーンで推奨商品レンダリングを行う際、現在の顧客の最後の注文がCommerceInteractionsCache面から連絡の対象として検索されます。そうでなければ、Commerce Search Resultsレンダリングを使用する場合、ScopeIdを使います。

プロセッサ

概要

FromOrder

Email Experience Manager(EXM)キャンペーンクエリ文字列(つまりキャンペーンカスタム値からの) *OrderId* を使って [、推奨製品プロバイダー](https://doc.sitecore.com/xp/ja/developers/102/sitecore-experience-commerce/customizing-the-algorithm-for-recommended-products.html)から商品リストを取得します。

FromQuery

レンダリングデータソースのアイテムから **Productsクエリ** フィールドに移動し、検索マネージャーを使ってインデックスに対してクエリを実行し、アイテムのリストを取得します。

FromLastOrder

連絡先の最後の注文IDを取得し、 [推奨商品提供者](https://doc.sitecore.com/xp/ja/developers/102/sitecore-experience-commerce/customizing-the-algorithm-for-recommended-products.html)に渡します。

FromSearchScope

フォールバックスコープIDを取得し、そのスコープで定義されたクエリを実行して推奨すべき製品を決定します。

推奨製品メールメッセージの場合、パイプラインを実行して結果がリストがないか、製品IDの空リストになった場合、製品推奨表示は代わりに「CXA-DoNotSend」をHTMLマークアップの一部として出力し、メール送信を拒否します。推奨事項が含まれていないメールを送信しないため、CheckForCommerceFlagプロセッサは「CXA-DoNotSend」というテキストを検証し、含まれる場合はEXM SendEmailパイプラインを放棄するため、メールは送信されません。

> !重要一般的に、EXMが処理しなければならないレンダリングにロジックを注入するのは避けてください。なぜなら、EXMがメールを送信するのをスマートに止める方法はないからです。ベストプラクティスでは、レンダリングに使われた *データはEXM*がメール本文をレンダリングする前に取得すべきです。マーケティングオートメーションキャンペーンから自動メールキャンペーンがトリガーされると、マーケティングオートメーションアクションCommerce Emailがデータを取得し、EXMがメール本文をレンダリングする前にカスタム値として渡します。通常のメールキャンペーンでRecommended Productsメールを送信する場合、Recommended Productsレンダリング処理時にカスタム値が取得されます。

## GetRecommendedProductsPipelineArgs argument

レンダリングリポジトリには、レンダリングデータソース、カスタムパラメータ(オーダー ID)、クエリ文字列パラメータを使ってパイプラインの引数プロパティを埋めるために呼び出される*GetRecommendedProductsPipelineArgs*メソッドが含まれています。その結果得られたオブジェクトはパイプラインに渡されます。

パイプラインの引数タイプには以下の特性が含まれます:

財産

概要

RecommendedProductsIdList

推奨商品IDのリストを保存します。最初に値は含まれません。

ProductsQuery

インデックスから商品項目を取得するクエリを格納します。

MaxNumberOfRecommendedProducts

RecommendedProductsIdListプロパティで取得・返却すべき推奨商品の最大数を示す整数を含む。

RelationshipFieldName

プロバイダーが使用するフィールド名をパスします。  
  
デフォルトのプロバイダー実装では、製品アイテムの関係フィールドを使って推奨商品を選択します。デフォルトでは **RelatedSellableItemToSellableItem** の関係フィールドを使用します。レンダリングパラメータに別の関係フィールドを設定し、パイプラインに渡すことができます。

Success

推奨製品リストが正常に計算されたかどうかを示します。プロセッサが製品IDのリストを取得したら、その値を *True*に設定します。

IsRecommendedProductsReady

推奨製品リストが存在し、空っぽでないかを示します。

> !注[推奨製品の決定方法をカスタマイズ](https://doc.sitecore.com/xp/ja/developers/102/sitecore-experience-commerce/customizing-the-algorithm-for-recommended-products.html "Customizing the algorithm for recommended products")するには、GetRecommendedProductsパイプラインを拡張し、新しいプロセッサーやカスタムプロパティを追加できます。これはEmailRecommendedProductsRepositoryのGetRecommendedProductsPipelineArgsメソッドを上書きすることで行えます。