RequestContextプロパティ

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

ServiceProviderRequestクラスのRequestContext特性を使って、パイプラインプロセッサとパイプライン間で情報を交換できます。

例えば、CommerceServer Connect ECSはRequestContextプロパティを利用してバスケットをプロセッサ間で共有し、パイプライン実行中にバスケットが一度だけロードされることでプロセッサのモジュール性と性能を向上させています。

以下はAddCartLinesパイプラインの簡略版です:

<commerce.carts.addCartLines>

True Basket Total

上記の例では、カートリッジ関連操作の最初のプロセッサはResolveBasketプロセッサを使用します。このプロセッサはCommerce Serverバスケットの読み込みとリクエストコンテキストの設定を担当します。他のすべてのプロセッサはリクエストコンテキストからCommerce Serverバスケットを取得します。

最後のプロセッサRunSaveCartは別のパイプラインを呼び出してバスケットを保存します。リクエストコンテキストは自動的にこのパイプラインに流れ、バスケットを取得してコンテンツを保存できます。

以下はCartPipelineContext効用クラスを示しています:

public class CartPipelineContext : PipelineContext { protected CartPipelineContext() : base(PipelineContextNames.CartPipelineContext) { this.HasBasketErrors = false; } public Basket Basket { get; set; } public static CartPipelineContext Get(ServiceProviderRequestContext requestContext) { CartPipelineContext pipelineContext = requestContext.PropertiesPipelineContextNames.CartPipelineContext as CartPipelineContext; if (pipelineContext == null) { pipelineContext = new CartPipelineContext(); requestContext.PropertiesPipelineContextNames.CartPipelineContext = pipelineContext; } return pipelineContext; } }

上記のコードでは、静的Get()メソッドがRequestContextプロパティからCartPipelineContextインスタンスを作成・取得する便利な方法を提供しています。リクエストコンテキストのPropertiesコレクションにキー/値ペアが追加されていることに注目してください。この名前を一意にすることが重要です。これにより、他のプロセッサが追加できるリクエストコンテキスト項目と矛盾しないようにします。

以下はResolveBasketプロセッサからのコードの一部です:

IOrderRepository repository = CommerceTypeLoader.CreateInstance(); var cartContext = CartPipelineContext.Get(args.Request.RequestContext); cartContext.Basket = repository.GetBasket(Guid.Parse(userId), cartName);

CartPipelineContext.Get()クラスへの呼び出しは最初のプロセッサから発行されるため、コンテキストクラスが作成され、RequestContextコレクションに追加されます。次に、コードは単に実際のCommerce ServerバスケットにcartContext.Basketクラスを設定します。

他のすべてのプロセッサ、RunSaveCartパイプラインも含めて、RequestContextプロパティからバスケットを取得するために以下の手順を単純に実行します。

var cartContext = CartPipelineContext.Get(request.RequestContext); Assert.IsNotNull(cartContext, "cartContext"); Assert.IsNotNull(cartContext.Basket, "cartContext.Basket");

この時点で、cartContext.Basketクラスを使ってCommerce Serverバスケットで必要な操作(例えば行項目の追加)を行うことができます。

この記事を改善するための提案がある場合は、 お知らせください!