インデックスの再構築の際にNullReference例外がスローされる


解説

検索インデックスの再構築が、未処理の例外で失敗する場合があります。Sellable商品が複数のカタログと関連付けられている場合、そのカタログのうちの1つがStorefrontに表示されるようコンテンツ エディタで選択されていないと、この問題が発生します。ログには、次のメッセージが出力されます:

Exception: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
--->
Exception: System.NullReferenceException
Message: Object reference not set to an instance of an object.
Source: Sitecore.Commerce.Engine.Connect
   at Sitecore.Commerce.Engine.Connect.SitecoreDataProvider.Parsers.ExternalSettingsParser..ctor(JToken entity)
   at Sitecore.Commerce.Engine.Connect.DataProvider.ReadOnlyCatalogDataProvider.GetItemTemplate(CatalogRepository repository, ID itemId, String sharedPropertyName, ID defaultTemplateId)
   at Sitecore.Commerce.Engine.Connect.DataProvider.ReadOnlyCatalogDataProvider.GetItemDefinition(ID itemId, CallContext context)
   at Sitecore.Data.DataProviders.DataProvider.GetItemDefinition(ID itemID, CallContext context, DataProviderCollection providers)
   at Sitecore.Data.DataSource.GetItemInformation(ID itemID)
   at Sitecore.Data.DataSource.GetItemData(ID itemID, Language language, Version version)
   at Sitecore.Nexus.Data.DataCommands.GetItemCommand.‎‬‫‎‪‏‫‏‬‬‏‫‪‭‌​‫‪‮‭‎‬‎‏‏‮(ID , Language , Version , Database )
   at Sitecore.Nexus.Data.DataCommands.GetItemCommand.​‏‬‎‏‭‮‬‎‫‭‍‮‎‭‪‮‍‌‌‬‫‮(ID , Language , Version , Database )
   at Sitecore.Data.Engines.DataCommands.GetItemCommand.DoExecute()
   at Sitecore.Data.Engines.EngineCommand`2.Execute()
   at Sitecore.Data.Managers.ItemProvider.GetItem(ID itemId, Language language, Version version, Database database)
   at Sitecore.Data.Managers.ItemProvider.GetItem(ID itemId, Language language, Version version, Database database, SecurityCheck securityCheck)
   at Sitecore.ContentTesting.Pipelines.ItemProvider.GetItem.GetItemUnderTestProcessor.Process(GetItemArgs args)
   at (Object , Object )
   at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
   at Sitecore.Data.Managers.DefaultItemManager.GetItem(ID itemId, Language language, Version version, Database database, SecurityCheck securityCheck)
   at Sitecore.Data.Managers.DefaultItemManager.GetItem(ID itemId, Language language, Version version, Database database)
   at Sitecore.Data.Managers.ItemManager.GetItem(ID itemId, Language language, Version version, Database database)
   at Sitecore.Commerce.Engine.Connect.Search.Crawlers.AllCatalogItemsCrawler.TryGetItem(ID deterministicId)
   at Sitecore.Commerce.Engine.Connect.Search.Crawlers.AllCatalogItemsCrawler.Add(IProviderUpdateContext context, CancellationToken cancellationToken)
   at Sitecore.ContentSearch.FlatDataCrawler`1.RebuildFromRoot(IProviderUpdateContext context, IndexingOptions indexingOptions, CancellationToken cancellationToken)
   at Sitecore.Commerce.Engine.Connect.Search.Crawlers.AllCatalogItemsCrawler.RebuildFromRoot(IProviderUpdateContext context, IndexingOptions indexingOptions, CancellationToken cancellationToken)
   at Sitecore.ContentSearch.SolrProvider.SolrSearchIndex.PerformRebuild(Boolean resetIndex, Boolean optimizeOnComplete, IndexingOptions indexingOptions, CancellationToken cancellationToken)
   at Sitecore.ContentSearch.SolrProvider.SolrSearchIndex.Rebuild(Boolean resetIndex, Boolean optimizeOnComplete)

解決策

この問題を解決するには、次のHotfixをダウンロードし、インストールしてください:

Sitecore XC 9.1 (Initial Release)用: SC Hotfix 347459-1 CommerceEngineConnect 3.0.46.zip 

このHotfixは特定のSitecore XCバージョン専用に作成されたものであるため、他のSitecore XCバージョンにインストールしたり、(互換性が確認できるまでは)他のHotfixと組み合わせてインストールしたりしないでください。Sitecore XCインスタンスに他のHotfixが既にインストールされている場合、互換性チェックのご依頼をSitecoreサポートにご連絡ください。

ZIPファイルを解凍し、インストールの手順書や関連のファイルを確認してください。HotfixはCMインスタンスにインストールしてから、貴社の標準の開発方法にて他のインスタンスと同期する必要があります。