---
title: "カートラインの延長"
slug: "extending-a-cart-line"
abstract: ""
---
# カートラインの延長

Sitecore XC構成的 *拡張* パターンを用いて既存のソリューションを簡単に拡張することをサポートします。合成拡張性はアップグレードを妨げず、同じCommerceエンティティを拡張しようとする複数のプラグイン間の懸念を分離する方法でソリューションを拡張することを可能にします。

## シナリオ:獲得したロイヤルティポイントをカートの列に加算し、順番に取り入れます。

商品を注文の一部にする最も簡単な方法は、AddCartLineパイプライン中にSellableItemからカートラインにコンポーネントをコピーすることです。

カートラインを延長するには:

1.  先ほど参照した同じNodeConfigurationファイルを開き、AddCartLineパイプラインを見つけてください:
    
    -----------------------------------------------------------------
    Sitecore.Commerce.Plugin.Carts
    IAddCartLinePipeline (Sitecore.Commerce.Plugin.Carts.CartLineArgument => Sitecore.Commerce.Plugin.Carts.Cart)
    ------------------------------------------------------------
    Plugin.Catalog.ValidateSellableItemBlock (Sitecore.Commerce.Plugin.Carts.CartLineArgument => Sitecore.Commerce.Plugin.Carts.CartLineArgument)
    ------------------------------------------------------------
    Plugin.Carts.AddCartLineBlock (Sitecore.Commerce.Plugin.Carts.CartLineArgument => Sitecore.Commerce.Plugin.Carts.Cart)
    ------------------------------------------------------------
    Plugin.Carts.ICalculateCartLinesPipeline (Sitecore.Commerce.Plugin.Carts.Cart => Sitecore.Commerce.Plugin.Carts.Cart)
    ------------------------------------------------------------
    Plugin.Carts.ICalculateCartPipeline (Sitecore.Commerce.Plugin.Carts.Cart => Sitecore.Commerce.Plugin.Carts.Cart)
    ------------------------------------------------------------
    Plugin.GiftCards.AddCartLineGiftCardBlock (Sitecore.Commerce.Plugin.Carts.Cart => Sitecore.Commerce.Plugin.Carts.Cart)
    ------------------------------------------------------------
    Plugin.Carts.PersistCartBlock (Sitecore.Commerce.Plugin.Carts.Cart => Sitecore.Commerce.Plugin.Carts.Cart)
    ------------------------------------------------------------
    Plugin.Carts.WriteCartTotalsToContextBlock (Sitecore.Commerce.Plugin.Carts.Cart => Sitecore.Commerce.Plugin.Carts.Cart)
    -----------------------------------------------------------------
    
2.  Cartをパラメータとして取り、Cartを返し、AddCartLineBlockの後に実行する別のコンポーネントを作成します。
    
3.  Cartsプラグインからエンティティにアクセスするには、参照を追加してください。例えば:
    
    /// <summary>
     /// The execute.
     /// </summary>
     /// <param name="arg">
     /// The SampleArgument argument.
     /// </param>
     /// <param name="context">
     /// The context.
     /// </param>
     /// <returns>
     /// The <see cref="SampleEntity"/>.
     /// </returns>
     public override Task<Cart> Run(Cart cart, CommercePipelineExecutionContext context)
     {
     Condition.Requires(cart).IsNotNull("The argument can not be null");
     //var result = this.\_pipeline.Run(arg, context).Result;
     return Task.FromResult(cart);
     }
    
4.  以下の構成を加えます:
    
    .ConfigurePipeline<IAddCartLinePipeline>(
     configure =>
     {
     configure.Add<AddCartLineLoyaltyBlock>().After<AddCartLineBlock>();
     })
    
5.  前回のシナリオと同様に、ブロックをロジックなしで実行し、必要なオブジェクトがオブジェクトコレクションにあるかどうかを確認するためにブレークポイントを追加します。このパーツをテストするには、カートにSellableItemを追加します。PostmanではCartsAPISamples/Add Cart Line Without Variantに移動して実行します。これによりアイテムがカートに追加されます。
    
6.  オブジェクトコレクションを見るとSellableItemが見え、CartLineArgumentを取得してLineプロパティを使うことで追加された行にたどり着くことができます。 SellableItemからカートラインにコンポーネントをコピーします。例えば:
    
    public override Task<Cart> Run(Cart cart, CommercePipelineExecutionContext context)
     {
     Condition.Requires(cart).IsNotNull("The argument can not be null");
     var sellableItem = context.CommerceContext.GetObjects<SellableItem>().First();
     var arg = context.CommerceContext.GetObjects<CartLineArgument>().First();
     var cartLine = arg.Line;
     cartLine.SetComponent(sellableItem.GetComponent<LoyaltyComponent>());
     return Task.FromResult(cart);
    
    今後は、商品がカートに追加されるたびに、その商品のロイヤルティポイントがカートに加算されます。これはCommerce Connectコンポーネントを使ってストアフロントにマッピング・表示できます。
    
    解を実行して商品をカートに追加してPostmanで検証できます。商品はカートラインのコンポーネントになったため、注文が行われるとカート内の他のコンポーネントとともに自動的に注文ラインにコピーされます。
    
7.  この例では、Postmanで注文を終えます。
    
8.  物理的なフルフィルメントオプション、フェデレーテッドペイメントオプションを追加し、注文を完成させ、完了した注文結果からOrderIDをコピーします。
    
9.  PostmanでGetOrderに移動し、OrderIDを貼り付けて注文を取り出します。完成した注文でLoyaltyComponentを確認できます。