Commerce Engineプラグインの要素

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

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

Commerce Coreインフラストラクチャは、Commerceプラグインを構成するさまざまなコア クラスを定義します。

このトピックでは、Commerceマイクロサービス プラグインが一般的に貢献する主要なオブジェクト クラスの一部を紹介します ( Commerce Coreの概要 トピックでは、Commerceのコア オブジェクトと概念のより包括的な一覧を提供します)。

メモ

Commerce.Engine.SDKの一部としてパッケージ化されたVisual Studio拡張機能をインストールすると、Sitecore.Commerce.Plugin.Sampleプロジェクト テンプレートは、これらの一般的なクラスのほとんどにサンプルを提供します。

エンティティ

コマースプラグインはエンティティを提供できます。コマース エンティティは、コアCommerceEntityクラスに基づいており、電子商取引に固有の主要なビジネス概念を直接表すように設計されています。たとえば、Sitecore.Commerce.Plugin.OrdersプラグインはOrdersエンティティとSalesActivityエンティティを提供し、Sitecore.Commerce.Plugin.Cartsプラグインはcartsエンティティを提供します。

エンティティークラスは、永続ストレージに1つのユニットとして格納されます。カスタム定義エンティティを格納するためにデータベーススキーマを管理する必要はありません。

Commerceエンティティには、Service APIを使用して取得するために使用する一意の識別子があります。

コンポーネント

Commerce Coreは、構成の拡張性を可能にする基本構造であるコンポーネント クラスを定義します。Commerceプラグインは、Commerceエンティティを拡張する方法としてコンポーネントを提供できます。たとえば、可用性プラグインSitecore.Commerce.Plugin.Availabilityは、Sitecore.Commerce.Plugin.Catalogの一部であるSellableItemエンティティを拡張するitemAvailabilityComponentを提供します。通常、コンポーネントをエンティティに関連付けるには、パイプラインにフックします。

次に、itemAvailabilityComponentの例を示します。

namespace Sitecore.Commerce.Plugin.Availability
{
    using System;
    using Sitecore.Commerce.Core;
    /// <summary>
    /// The item availability component.
    /// </summary>
    public class ItemAvailabilityComponent : Component
    {
        /// <summary>
        /// Gets or sets the item identifier.
        /// </summary>
        /// <value>
        /// The item identifier.
        /// </value>
        public string ItemId { get; set; }
        /// <summary>
        /// Gets or sets the available quantity.
        /// </summary> 
       /// <value>
        /// The available quantity.
        /// </value>
        public decimal AvailableQuantity { get; set; }
        /// <summary>
        /// Gets or sets the available date.
        /// </summary>
        /// <value>
        /// The available date.
        /// </value>
        public DateTimeOffset AvailableDate { get; set; }
        /// <summary>
        /// Gets or sets a value indicating whether this instance is available.
        /// </summary>
        /// <value>
        /// <c>true</c> if this instance is available; otherwise, <c>false</c>.
        /// </value>
        public bool IsAvailable { get; set; }
        /// <summary>
        /// Gets or sets the availability expires.
        /// </summary>
        /// <value>
        /// The availability expires.
        /// </value>
        public DateTimeOffset AvailabilityExpires { get; set; }
    }
}

モデル

コマースプラグインは、エンティティやコンポーネント内で再利用可能なPOCO クラスであるモデルを提供できます。モデルを使用して、コマンド応答またはAPI要求応答の一部として返されるデータを作成および表示できます。

次に、CreateOrderモデル クラスの例を示します。

namespace Sitecore.Commerce.Plugin.Orders
{    using Sitecore.Commerce.Core;
    /// <summary>
    /// Defines the created order model.
    /// </summary>
    /// <seealso cref="Sitecore.Commerce.Core.Model" />
    public class CreatedOrder : Model
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreatedOrder"/> class.
        /// </summary>
        public CreatedOrder()
        {
            this.OrderId = string.Empty;
        }
        /// <summary>
        /// Gets or sets the order identifier.
        /// </summary>
        /// <value>
        /// The order identifier.
        /// </value>
        public string OrderId { get; set; }
    }
}

コント ローラー

コントローラーは、プラグインのコマンドとして実装されたコマース機能を公開します。たとえば、カスタムコマンドを定義し、このコマンドをREST APIを介して公開する場合は、カスタムコントローラーアクションを定義する必要があります。コントローラー クラスはODATAに準拠しており 、標準のASP.NET Coreモデル ビュー コントローラー (MVC) パターンに基づいています。

コマンド

プラグインは、Sitecore XCの外部向けAPIのように動作するコマンドを定義します。コマンド クラスは、アクションを実行したり、呼び出されたときにイベントをトリガーしたりするために必要なすべての情報を定義し、カプセル化します。

コマンドは、Commerce Engine内で内部的にアクションをトリガーして、他のパイプラインを実行したり、他のアクションを実行したりすることもできます。たとえば、コントローラーを使用してSellable商品を取得する呼び出しでは、GetSellableItemCommandが呼び出され、GetSellableItemパイプラインが実行されます。

パイプライン

Commerce Coreは、拡張性をサポートするパイプライン フレームワークを定義します。Commerceプラグインでは、パイプラインはビジネス ロジックのコンテナーとして機能します。パイプライン クラス自体は通常軽量であり、主にパイプライン自体の定義を表します。たとえば、Ordersプラグインで定義されているICreateOrderPipelineクラスを次に示します。

namespace Sitecore.Commerce.Plugin.Orders
{
    using Sitecore.Commerce.Core;
    using Sitecore.Framework.Pipelines;
    /// <summary>
    /// Defines the create order pipeline.
    /// </summary>
    [PipelineDisplayName(OrdersConstants.Pipelines.CreateOrder)]
    public interface ICreateOrderPipeline :IPipeline<CartEmailArgument, Order, CommercePipelineExecutionContext>
    {
    }
}

コマースパイプラインはブロックで構成されています。パイプラインブロックは、動作、アクション、およびビジネスロジックの実装を担当します。

コードを使用して 、Commerce Engineのパイプラインとブロックを作業および拡張 し、特定のコマース ソリューションの要件を満たします。

次に、注文時に割り当てられる一意のIDを生成する役割を担うCommerceパイプライン ブロックOrderPlacedAssignConfirmationIdBlockの例を示します。

namespace Sitecore.Commerce.Plugin.Orders
{
  using System;
  using System.Globalization,
  using System.Threading.Tasks;
  using Sitecore.Commerce.Core;
  using Sitecore.Commerce.Core.Commands
  using Sitecore.Framework.Conditions;
  using Sitecore.Framework.Pipelines;
  using Microsoft.Extensions.Logging;                  
  {
   public class OrderPlacedAssignConfirmationIdBlock : AsyncPipelineBlock<Order, Order, CommercePipelineExecutionContext>
    {
     private readonly GenerateUniqueCodeCommand _generateUniqueCodeCommand;
     public OrderPlacedAssignConfirmationIdBlock(GenerateUniqueCodeCommand generateUniqueCodeCommand)
     {
      _generateUniqueCodeCommand = generateUniqueCodeCommand;
     }
     public override async Task<Order> RunAsync(Order arg, CommercePipelineExecutionContext context)
     {
       Condition.Requires(arg).IsNotNull($"{Name}: The order can not be null");
      var uniqueCode = Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture);
      try
        {
          uniqueCode = await _generateUniqueCodeCommand.Process(context.CommerceContext).ConfigureAwait(false);

        }
      catch (Exception ex)
        {
          context.CommerceContext.LogException($"{Name}-UniqueCodeException", ex);
        }
      arg.OrderConfirmationId = uniqueCode;
      return arg;
    }
  }
}

サイトコアの設定

configure.sitecoreクラスは、プラグインが定義するすべてのパイプラインからのブロック定義を一覧表示、調整、および登録する役割を担います。パイプライン設定によって、各パイプラインブロックを実行する順序が決まります。パイプラインは、起動時にconfigure.sitecoreクラス内の情報を使用して、実行するブロックを認識します。既存のパイプラインに新しいカスタムブロックを追加する場合、または新しいパイプラインを作成する場合は、カスタムパイプラインとブロックをconfigure.sitecoreクラスに挿入して、必要な順序で処理されるようにする必要があります。

以下は、サンプルのBraintree支払プロバイダー プラグイン (Commerce Engine SDKの一部として含まれています) で提供されるconfigure.sitecoreクラスの例です。

namespace Plugin.Sample.Payments.Braintree
{
    /// <summary>
    /// The payments braintree configure sitecore class
    /// </summary>
    /// <seealso cref="Sitecore.Framework.Configuration.IConfigureSitecore" />
    public class ConfigureSitecore : IConfigureSitecore
    {
        /// <summary>
        /// The configure services.
        /// </summary>
        /// <param name="services">
        /// The services.
        /// </param>
        /// 
        public void ConfigureServices(IServiceCollection services)
        {
            var assembly = Assembly.GetExecutingAssembly();
            services.RegisterAllPipelineBlocks(assembly);

            services.Sitecore().Pipelines(config => config
                 .ConfigurePipeline<IGetClientTokenPipeline>(d => { d.Add<GetClientTokenBlock>(); })
                .ConfigurePipeline<ICreateOrderPipeline>(d => { d.Add<CreateFederatedPaymentBlock>().Before<CreateOrderBlock>(); })
                .ConfigurePipeline<IReleaseOnHoldOrderPipeline>(d => { d.Add<UpdateFederatedPaymentBlock>().After<ValidateOnHoldOrderBlock>(); })
                .ConfigurePipeline<IRefundPaymentsPipeline>(d => { d.Add<RefundFederatedPaymentBlock>().Before<PrepArgumentToPersistEntityBlock<Order>>(); })
                .ConfigurePipeline<ICancelOrderPipeline>(d => { d.Add<VoidCancelOrderFederatedPaymentBlock>().After<GetPendingOrderBlock>(); })
                .ConfigurePipeline<IRunningPluginsPipeline>(c => { c.Add<RegisteredPluginBlock>().After<RunningPluginsBlock>(); })
                .ConfigurePipeline<IReleasedOrdersMinionPipeline>(c => { c.Add<SettleOrderSalesActivitiesBlock>().After<SettlePaymentFaultBlock>(); }));
            services.RegisterAllCommands(assembly);
        }
    }
}

Commerce Engineポリシーは、Commerce Engine内の機能またはCommerceマイクロサービスの動作または機能に影響を与える設定のグループです。コマース ポリシーは通常、ビジネス ニーズによって推進され、多くの場合、ストアフロントの動作に影響を与えます。ポリシーは大量にキャッシュされ、デプロイ シナリオの外部で値が変更されることはほとんどありません。ポリシー設定は、.JSON構成ファイルを使用して構成します。 ブートストラップ プロセスでは、構成が一元化されたポリシー ストアに初期化されます。

次に、ポリシー定義クラス (CartCouponsPolicyの例を示します。

using Sitecore.Commerce.Core;
namespace Sitecore.Commerce.Plugin.Coupons
{
    /// <summary>
    /// The CartCouponsPolicy.
    /// </summary>
    public class CartCouponsPolicy : QualifyPolicy
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CartCouponsPolicy"/> class.
        /// </summary>
        public CartCouponsPolicy()
        {            MaxCouponsInCart = 5;
        }
        /// <summary>
        /// Gets or sets the maximum coupons in cart.
        /// </summary>
        /// <value>
        /// The maximum coupons in cart.
        /// </value>
        public int MaxCouponsInCart { get; set; }
    }
}

手先

コマースプラグインは ミニオンに貢献できます。コマース ミニオンはワーカー プロセスであり、プロセス内の特定のタスクを実行するための基本的な作業単位として実装されます。

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