---
title: "CXACartContextサービス"
slug: "the-cxacartcontext-service"
abstract: "CXACartContextサービスおよびサポートする手法の概要。"
---
# CXACartContextサービス

CXACartContextサービスはカート関連のメソッドを扱い、カート数のキャッシュ管理を行います。

> !注Sitecore XC 10で導入されたCXACartContextサービスは、CartContextサービスに代わるものです。以前CartContextが行っていたTriggerCartUpdateEventやSubscribeHandlerなどのイベントは、代わりに消費CXAObservableに移行されました。

CXACartContextサービスは以下の手法を実行します。[CXAObservable](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/the-cxaobservable-service.html "The CXAObservable service")とやり取りし、さまざまな[共有イベント](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/sxa-storefront-shared-events.html "SXA Storefront shared events")を利用します。

-   方法:説明
-   IsCartCountCached:はカートリッジ数をキャッシュすべきかどうかを示すブール値を取得します。もしそれが真であれば、カート数はブラウザ sessionStorageに保存されます。
-   IsCachedCartCountAvailable: はブラウザでカート数が利用可能かどうかを示すブール値 sessionStorage。もしそれが真であれば、 GetCachedCartCount メソッドでキャッシュされたカート数を取り出します。
-   GetCachedCartCountカート数の値を取得します。
-   UpdateCachedCartCount: ブラウザ sessionStorageでカートリッジ数を更新します。
-   DeleteCachedCartCount: はブラウザからキャッシュされたカートリッジ数を削除します sessionStorage。
-   AddCartLine: AddCartLine APIエンドポイントへの呼び出し
-   AddBundleCartLine: AddBundleCartLine APIエンドポイントへの呼び出し。
-   AddCartLinesWithSublines: AddCartLinesWithSublines APIエンドポイントへの呼び出し。
-   RemoveCartLine: RemoveShoppingCartLine APIエンドポイントへの呼び出し。
-   UpdateCartLineQuantity: UpdateCartLineQuantity APIエンドポイントへの呼び出し。
-   GetCart: GetCart APIエンドポイントへの呼び出し。 GetCart メソッドに複数の呼び出しがある場合、それらの呼び出しはプールされ、GetCart APIエンドポイントに対しては1つのAjax呼び出しのみが実行されます。 CXACartContext サービスはカートリッジオブジェクトのコピーを保持します。その後、このメソッドに呼び出すたびにカートオブジェクトはコールバック関数に戻されます。キャッシュされたカートオブジェクトは、プロモーションコードの適用などカートメソッドが実行されるたびに無効化されます。
-   GetMinicart: recalculateTotals が真であるか、コンテキストがカートリブを取得しているかキャッシュされたカートリッジオブジェクトを持っている場合、メソッドへの呼び出しを転送 GetCart 。そうでなければ、エンドポイントAPI GetMinicartを呼び出します。
-   GetCartLinesCount: GetCartLinesCount APIエンドポイントへの呼び出し。
-   RemoveMinicartLine: RemoveMinicartLine APIエンドポイントへの呼び出し。
-   GetPromoCodes: は GetCart メソッドへの呼び出しを転送します。バックエンドが同じカートリッジオブジェクトを返し、不要なAjax呼び出しを減らすために他の GetCart コールと共有できるからです。
-   ApplyPromotionCode: ApplyDiscount APIエンドポイントへの呼び出し。
-   RemovePromotionCode: RemoveDiscount APIエンドポイントへの呼び出し。

CXACartContextは、カートオブジェクトが特定のAjax呼び出しの応答で受信された際にCXAObservableを通じてイベントCXAEvent.CartUpdatedを発行します。以下のようなものが含まれます:

-   AddCartLine
-   AddBundleCartLine
-   AddCartLinesWithSublines
-   RemoveCartLine
-   UpdateCartLineQuantity
-   GetCart
-   GetMinicart
-   RemoveMinicartLine
-   GetPromoCodes

上記のすべてのメソッドは異なるAPIエンドポイントに呼び出しているかもしれませんが、すべてのAPIエンドポイントは同じCartJsonResultモデルを返すため、イベントはcartオブジェクトをイベント引数として発行できます。

SXA Storefrontは複数の [共有イベント](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/the-cxaobservable-service.html "The CXAObservable service")を使用しています。以下のセクションではカートモデルの詳細とコールシーケンスの説明を紹介します。

## 更新されたカートモデル

以下のクラス図は、CXAEvent.CartUpdatedイベントのモデルを示しており、cart-minicart-model.js、 cart-freeegiftselections-model.js、およびcart-lines-model.jsに見られます。Free Gift Selectionレンダリング、Minicartレンダリング、またはショッピングカートラインのレンダリングがCXAEvent.CartUpdatedイベントに従属すると、返される応答はSitecore.Commerce.XA.Feature.Cart.Models.JsonResults.CartJsonResultであり、これは更新されたカートです。

![Class diagram for the CXAEvent.CartUpdated event](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/101/sitecore-experience-commerce/images/DiagramCXAEventCartUpdated.png)

## ミニカートの更新コールシーケンス

以下の図は、ミニカート更新時の呼び出し順序を示しています。

![Sequence diagram showing the Minicart update call sequence](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/101/sitecore-experience-commerce/images/MiniCartEmitEventDiagram.png)