カスタムプロダクトエンティティを実装してください
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
メイン製品テンプレートと対応オブジェクトにフィールドを追加するか、サブアイテムに追加するかを決める際、そのフィールドがすべての製品に適用されるかどうか自問してください。
主な製品実体を拡張するために:
-
デフォルトの製品テンプレート(/sitecore/templates/CommerceConnect/Products/Product)を継承し、さらにフィールドを追加して拡張するカスタムテンプレートを作成します。
-
デフォルトのSitecore.Commerce.Entities.Products.Productクラスから継承し、さらにプロパティを拡張するカスタムプロダクトクラスを作成します。
-
デフォルトのSitecore.Commerce.Data.Products.ProductRepositoryクラスから継承するカスタムProductRepositoryクラスを作成します。
-
拡張プロパティを保存・ロードするために、以下の2つのメソッドをオーバーライドしてください。これらのメソッドの基本実装を呼び出します:
- protected override void UpdateEntityItem(Item entityItem, Product entity)
- protected override void PopulateEntity(Item entityItem, Product entity)
-
Sitecore.Commerce.Product.configファイルのProductRepository要素を更新するには:
- 属性タイプの値をカスタム製品リポジトリクラスの完全なタイプ名に置き換えてください。以下のスニペットはイタリック体のタイプ値を記載しています。
- サブ要素テンプレートのテンプレートのIDセットを置き換えます。テンプレートの値が斜体で表記された以下のスニペットをご覧ください。
-
IncludeTemplatesセクションで、ProductTemplateIDのGUIDを更新してください。
詳細については、製品索引をご覧ください。
-
Sitecore.CommerceProduct.configファイルのCommerce.Entitiesセクションで、Productエンティティエントリのtype属性を更新します:
<commerce.Entities>
-
Sitecore.Commerce.Products.LuceneDefaultIndexConfiguration.configファイルのExcludeTemplatesセクションで、ProductTemplateIDのGUIDを更新します。
詳細はデフォルト 指数をご覧ください。
-
双方向同期を使用する場合は、デフォルトのSitecore.Commerce.Pipelines.Products.SynchronizeProductEntity.ResolveProductChangesクラスから継承するカスタムResolveProductChangesクラスを作成します。
関連リポジトリのアイテムを参照する新しいプロパティ(例えばManufacturers、など、関連するリポジトリ内のアイテムを参照し、その値を埋め込むなど。 PopulateEntityFieldCollectionsなどの内部ヘルパーメソッドも提供されています。以下は、プロダクトエンティティを読み込む際にManufacturersコレクションがどのように埋め込まれるかの例です。
entity.Manufacturers = this.PopulateEntityFieldCollections(
entityItem,
"Manufacturer",
typeof(Manufacturer),
new Dictionary<string, string> { { "ExternalId", "ExternalID" }, { "Name", "Name" }, { "Description", "Description" } })
.Cast
The actual manufacturer type should be created by calling the Create method on the type Sitecore.Commerce.Entities.EntityFactory, but this is left out to simplify the example. The PopulateEntityFieldCollections method has the following signature:
///
private IEnumerable
他の製品事業体にも同じ手順を踏みます。