Sitecore Experience CommerceでShared Environments databaseを復元するとカタログが破損する


概要

Sitecore Experience CommerceでShared Environments databaseの復元を行うとき、MappingsテーブルのCatalogエントリのParentIdMasterデータベースのCatalogsアイテムのIDと一致しない場合、カタログが破損することがあります。この事象は、下記の場合に発生する可能性があります:

いずれの場合でも、mappingテーブルのcatalogエントリのparentIDは、Master DBのCatalogsアイテムのIDと異なってきます。

この事象が起きた場合、下記の症状が発生します。

上記の事象が発生した場合、まず下記の手順に従ってチェックをしてください。

  1. SQLクエリを実行する。
    SELECT *
    FROM [Your_SharedEnvironments].[sitecore_commerce_storage].[Mappings]
    where EntityId like '%entity-catalog%'
  2. 表示されたエントリのParentIDをチェックします。
  3. コンテンツ ツリーでCatalogsアイテムのIDをチェックします。アイテムへのデフォルト パスは/sitecore/content/Sitecore/Storefront/Home/Catalogsです。
  4. Parent IDとCatalogsのアイテムIDは一致する必要があります。いずれかのIDが異なる場合、mappingテーブルが正しい値を保持しなくなり、カタログがSitecoreにバインドすることができなくなります。

解決策

事象を解消するには、次のソリューションをご検討ください。

  1. 以下を続行する前に、Shared Environments databaseをバックアップします。
  2. 下記のクエリをShared Dbに対して実行し、古い(不正な)ParentIdを削除します。
    DELETE
    FROM [Your_SharedEnvironments].[sitecore_commerce_storage].[Mappings]
    WHERE EntityId = 'Entity-Catalog-[Catalog name from query above]' AND ParentId = '[Invalid Parent Id from query above]'
  3. CMサーバーを起動し、「Commerce」のタブから「Refresh Commerce Cache」をクリックします。次に、「Delete Data Templates」と「Update Data Templates」をクリックします。
  4. Catalogsアイテム下でカタログの保存を試します。カタログが正常に開く場合、masterとwebインデックスをリビルドします。
  5. 事象が解消しない場合、キャッシュの問題でないことを確実にするためにCMサーバーを再起動し、その後、手順4をもう一度実施します。