SXAのストアフロントがCommerce Engineに呼び起こす

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

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

Commerce Connectは異なる外部コマースシステムと連携して設計されているため、各サービスレイヤーにはデフォルトのドメインモデルが付属しています。これらのドメインモデルは、各サービスレイヤーが対象とするシナリオに必要な共通データAPI表しています。Sitecore XC 9.3以前は、Commerce EngineへのAPIすべての呼び出しはCommerce Connectサービス層を経由していました。Commerce Connectはまた、xDBにおけるSitecoreの分析イベントをトリガーするExperience Analyticsとの統合 としても機能します。分析が不要な場合、通話は店舗から直接Commerce Engineへ送る方が理にかなっており、以下の図が示すように、ドメインモデル間のデータをマッピングする不要な作業を回避できます。

Storefront calls to Commerce Engine

サービス層APIはストアフロントとコマースエンジン間で共通データを渡します。サービス層APIはExperience Analytics(XA )と統合されており、詳細なデータを収集して、顧客がコマースシナリオで行うアクションに基づくレポート、パーソナライズ、マーケティング自動化を可能にします。XAとの統合が不要な場合、Commerce Connectをバイパスすることで柔軟性とパフォーマンスが向上します。Commerce Engineを呼び出すことで、ドメインモデルへのデータのマッピングやドメインモデルからの呼び戻しが直接不要になります。マッピング自体はリソースを消費し、拡張に対応するためにカスタムオブジェクトを定義・登録する必要があるため、拡張が容易ではありません。JSON形式でデータを渡す方が、コード登録が不要でパフォーマンスオーバーヘッドも少ないため、拡張や消費が容易です。そのため、Sitecore XC 9.3からは、Experience Analyticsとのやり取りを伴わず、直接Commerce Engineに向かうAPI通話が新機能として導入されました。

以下のセクションでは、直接通話の実装パターンや、Commerce Engineへの直接通話の方法を示す例を紹介します。

!注現在も通話はContent Delivery(CD)サーバーの役割を経由しています。つまり、AJAXの通話の場合、通話は依然として顧客のブラウザから発信され、まずCDインスタンスに送られ、そこから直接Commerce Engineへ送られます。将来のリリースでは、通話は顧客のブラウザから直接行い、Commerce Engineに送られ、CDインスタンスをバイパスしてCommerceエンジンに送られる可能性があります。これはCommerce Engine APIの適切なセキュリティ対策が整っている前提です。

実装パターン

実装パターンの一般的な説明は6つの部分から成ります。

  1. Commerce EngineのターゲットメソッドにURIを取得してください。
  2. HTTPリクエストヘッダーにコンテキスト情報を追加します。
  3. リクエストの本文に入力パラメータを追加してください。
  4. HTTPリクエストを非同期でSendします。
  5. 結果を待って。
  6. HTTP結果の本文を文字列値として返します。これは常にJSON形式(呼び出しコードで解釈される)です。

以下のコードは、店舗からCommerce Engineに直接電話をかけて顧客の設定や選択に基づいて商品バンドルの価格を取得する実装パターンの例です。

///

/// Gets the bundle selection price. /// /// /// string of JSON containing prices public virtual async Task GetBundleSelectionPrice(BundleItemModel model) { // Obtain URI to targeted method for Commerce Engine var uri = new Uri(CommerceEngineConfiguration.Instance.ShopsServiceUrl + "GetBundleSelectionPrice"); // Add context information in header var request = new HttpRequestMessage(HttpMethod.Post, uri); request.Headers.Add("ShopName", StorefrontContext.CurrentStorefront.ShopName); request.Headers.Add("Environment", EngineConnectUtility.GetShopEnvironment()); request.Headers.Add("EffectiveDate", GetCurrentDate().ToString(CultureInfo.InvariantCulture)); request.Headers.Add("Language", Context.Culture.Name); request.Headers.Add("Currency", StorefrontContext.CurrentStorefront.SelectedCurrency); request.Headers.Add("IsRegistered", Context.User.IsAuthenticated.ToString(CultureInfo.InvariantCulture)); request.Headers.Add("Authorization", CommerceEngineConfiguration.Instance.AccessToken);

// set content by adding the input parameter containing the model var modelStr = JsonConvert.SerializeObject(model); request.Content = new StringContent(modelStr, Encoding.UTF8, "application/json");

// Wait for the result var result = await HttpClient.SendAsync(request).ConfigureAwait(false);

return await result.Content.ReadAsStringAsync().ConfigureAwait(false); }

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