1. 製品同期

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

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

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

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

ベースプロセッサSitecore.Commerce.Pipelines.Products.ResolveChangesProcessorほとんどの作業を行い、比較用に設定されたSynchronizationStrategyを解析します。

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

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

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

!注Sitecoreから製品エンティティを読み取る責任を持つ2つのプロセッサは、結果を2つの異なるパイプライン引数に書き込み、干渉しないようにしなければなりません。

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

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

    コンストラクタは空にしておき、ベースコンストラクタを必ず呼び出してください。

  2. GetSitecoreEntitiesメソッドを上書きしてください。

    メソッドは保存されたSitecoreエンティティを読み取り、与えられた型の可算可能なオブジェクトの集合を返さなければなりません。 PipelineArgsコレクションの命名規則は、型名の前にkeyとしてSitecoreという単語を接頭辞として付けることです。例えば、SitecoreManufacturers。

  3. GetExternalCommerceSystemEntitiesメソッドを上書きしてください。

    メソッドは保存された外部エンティティを読み取り、与えられた型のオブジェクトの列挙可能な集合を返さなければなりません。 PipelineArgsの命名規則は、単に型名をキーとして使うことです。例えば、Manufacturers。

  4. SaveEntitiesメソッドを上書きしてください。

    メソッドは得られたエンティティをPipelineArgsコレクションに保存しなければなりません。命名規則としては型名をキーとして使います。例えば、Manufacturers。

ResolveManufacturerChangesプロセッサの実装は以下のコードスニペットで示されています。

public class ResolveManufacturersChanges : ResolveChangesProcessor

{ ///

/// Initializes an instance of the class. /// /// The synchronization strategy. public ResolveManufacturersChanges(NotNull ISynchronizationStrategy synchronizationStrategy) : base(synchronizationStrategy) { }

///

/// Gets entities stored in Sitecore. /// /// The arguments. /// Sitecore entities. protected override IEnumerable GetSitecoreEntities(ServicePipelineArgs args) { return args.Request.Properties"SitecoreManufacturers" as IEnumerable ?? Enumerable.Empty(); } /// /// Gets entities stored in external commerce system. /// /// The arguments. /// External commerce system entities. protected override IEnumerable GetExternalCommerceSystemEntities(ServicePipelineArgs args) { return args.Request.Properties"Manufacturers" as IEnumerable ?? Enumerable.Empty(); } /// /// Saves the entities to the arguments. /// /// The arguments. /// The product entities. protected override void SaveEntities(ServicePipelineArgs args, IEnumerable productEntities) { args.Request.Properties"Manufacturers" = productEntities.Cast(); } }

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