カスタムプロセッサを作成する

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

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

双方向同期を機能させるには、Sitecoreと外部システムから発信された2つのエンティティをそれぞれ比較するプロセッサが存在する必要があります。

基本プロセッサSitecore.Commerce.Pipelines.Products.ResolveChangesProcessorほとんどの作業を行い、比較に使用するように構成されたSynchronizationStrategyを解決します。

プロセッサの責任は、Sitecoreと外部システムからそれぞれ2つの製品エンティティを読み取り、変更を比較して解決し、結果のエンティティと結果を保存する必要がある場所を示すものを返すことです。

メモ

現在のResolveChangesProcessor実装では、保存される結果のエンティティのコレクションが1つだけ保存されるため、方向が両方に設定されている場合は、同じインスタンスがSitecoreと外部システムの両方に保存されます。

カスタムバージョンでは、異なるバージョンを2つの別々のコレクションに保存して、それぞれ2つのシステムに保存することができます。

手記

Sitecoreと外部システムからそれぞれ製品エンティティを読み取る2つのプロセッサは、干渉しないように、結果を2つの異なるパイプライン引数に書き込む必要があります。

特定のエンティティタイプのカスタムプロセッサを作成するには:

  1. ResolveChangesProcessorプロセッサから継承する新しいクラスを作成します。

    コンストラクタは空のままにしますが、必ず基本コンストラクタを呼び出してください。

  2. GetSitecoreEntitiesメソッドをオーバーライドします。

    このメソッドは、格納されたSitecoreエンティティを読み取り、指定されたタイプのオブジェクトの列挙可能なコレクションを返す必要があります。 PipelineArgsコレクションの名前付け規則では、タイプ名の先頭にSitecoreという単語をキーとして付けます。たとえば、SitecoreManufacturers.

  3. GetExternalCommerceSystemEntitiesメソッドをオーバーライドします。

    このメソッドは、格納された外部エンティティを読み取り、指定された型のオブジェクトの列挙可能なコレクションを返す必要があります。 PipelineArgsの名前付け規則は、単に型名をキーとして使用することです。たとえば、Manufacturers.

  4. SaveEntitiesメソッドをオーバーライドします。

    このメソッドは、結果のエンティティをPipelineArgsコレクションに保存する必要があります。名前付け規則では、型名をキーとして使用します。たとえば、Manufacturers.

ResolveManufacturerChangesプロセッサの実装を次のコード スニペットに示します。

public class ResolveManufacturersChanges : ResolveChangesProcessor

{
/// <summary>
/// Initializes an instance of the <see cref="ResolveManufacturersChanges" /> class.
/// </summary>
/// <param name="synchronizationStrategy">The synchronization strategy.</param>
public ResolveManufacturersChanges([NotNull] ISynchronizationStrategy synchronizationStrategy) : base(synchronizationStrategy)
{
}

/// <summary>
/// Gets entities stored in Sitecore.
/// </summary>
/// <param name="args">The arguments.</param>
/// <returns>Sitecore entities.</returns>
protected override IEnumerable<ProductEntity> GetSitecoreEntities(ServicePipelineArgs args)
{
return args.Request.Properties["SitecoreManufacturers"] as IEnumerable<ProductEntity> ?? Enumerable.Empty<Manufacturer>();
}
/// <summary>
/// Gets entities stored in external commerce system.
/// </summary>
/// <param name="args">The arguments.</param>
/// <returns>External commerce system entities.</returns>
protected override IEnumerable<ProductEntity> GetExternalCommerceSystemEntities(ServicePipelineArgs args)
{
return args.Request.Properties["Manufacturers"] as IEnumerable<ProductEntity> ?? Enumerable.Empty<Manufacturer>();
}
/// <summary>
/// Saves the entities to the arguments.
/// </summary>
/// <param name="args">The arguments.</param>
/// <param name="productEntities">The product entities.</param>
protected override void SaveEntities(ServicePipelineArgs args, IEnumerable<ProductEntity> productEntities)
{
args.Request.Properties["Manufacturers"] = productEntities.Cast<Manufacturer>();
}
}
この記事を改善するための提案がある場合は、 お知らせください!