Dev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityOptimizely AcademySubmit a ticketLog In
Dev Guide

Catalog system breaking changes

Breaking changes to catalog APIs, managers, DTOs, and related infrastructure in Commerce Connect 15.

This article covers breaking changes to the catalog system, including catalog APIs, managers, DTOs, logging infrastructure, inventory, and merchant-related functionality in Commerce Connect 15.

ICatalogSystem method removals

Multiple obsolete methods have been removed from Mediachase.Commerce.Catalog.ICatalogSystem. These methods were marked obsolete since February 2020 with guidance to use the content API instead.

GetCatalogEntriesDto overloads (removed)

The following overloads have been removed:

  • GetCatalogEntriesDto(int parentEntryId, string entryType, string relationType)
  • GetCatalogEntriesDto(int parentEntryId, string entryType, string relationType, CatalogEntryResponseGroup responseGroup)
  • GetCatalogEntriesDto(string name, string entryType)
  • GetCatalogEntriesDto(string name, string entryType, CatalogEntryResponseGroup responseGroup)
  • GetCatalogEntriesDto(int catalogId, int parentNodeId, CatalogEntryResponseGroup responseGroup)
  • GetCatalogEntriesDto(int catalogId, CatalogEntryResponseGroup responseGroup)
  • GetCatalogEntriesDto(int catalogId)
  • GetCatalogEntriesDto(string catalogName, CatalogEntryResponseGroup responseGroup)
  • GetCatalogEntriesDto(string catalogName)
  • GetCatalogEntriesDto(string catalogName, int parentNodeId, CatalogEntryResponseGroup responseGroup)
  • GetCatalogEntriesDto(string catalogName, int parentNodeId)

GetCatalogEntriesByNodeDto overloads (removed)

  • GetCatalogEntriesByNodeDto(string catalogName, string parentNodeCode)
  • GetCatalogEntriesByNodeDto(string catalogName, string parentNodeCode, CatalogEntryResponseGroup responseGroup)

GetAssociatedCatalogEntriesDto overloads (removed)

  • GetAssociatedCatalogEntriesDto(int parentEntryId, string associationName)
  • GetAssociatedCatalogEntriesDto(int parentEntryId, string associationName, CatalogEntryResponseGroup responseGroup)
  • GetAssociatedCatalogEntriesDto(string parentEntryCode, string associationName)
  • GetAssociatedCatalogEntriesDto(string parentEntryCode, string associationName, CatalogEntryResponseGroup responseGroup)

Migration path

Use IContentLoader and the catalog content API:

📘

Note

It’s important to note that IContentLoader does not offer direct one-to-one method equivalents.

// Before (Commerce 14) - DTO-based
var entries = catalogSystem.GetCatalogEntriesDto(catalogName,
    parentNodeId, responseGroup);

// After (Commerce 15) - Content API
var entries = _contentLoader.GetChildren<EntryContentBase>(parentNodeReference);

For associations between entries and entries, use IAssociationRepository. For relations between nodes and nodes, and nodes and entries IRelationRepository.

TemplateName removal from CatalogEntryDto

The TemplateName/DisplayTemplate concept for catalog entries is no longer used. The following members have been removed from Mediachase.Commerce.Catalog.Dto.CatalogEntryDto:

  • CatalogEntryRow.DefaultTemplateName constant
  • CatalogEntryDataTable.TemplateNameColumn property
  • CatalogEntryDataTable.AddCatalogEntryRow(...) overload with TemplateName parameter
  • CatalogEntryRow.TemplateName property
  • CatalogEntryRow.IsTemplateNameNull() method
  • CatalogEntryRow.SetTemplateNameNull() method
  • CatalogEntryRow.Properties.TemplateName expression

Entry display is determined by the content type and rendering framework. XML catalog export no longer includes DisplayTemplate for entries, and CSV imports no longer support the TemplateName column for products.

TemplateName removal from CatalogNodeDto

The same TemplateName removal applies to Mediachase.Commerce.Catalog.Dto.CatalogNodeDto:

  • CatalogNodeRow.DefaultTemplateName constant
  • CatalogNodeDataTable.TemplateNameColumn property
  • CatalogNodeDataTable.AddCatalogNodeRow(...) overload with TemplateName parameter
  • CatalogNodeRow.TemplateName property
  • CatalogNodeRow.IsTemplateNameNull() method
  • CatalogNodeRow.SetTemplateNameNull() method
  • CatalogNodeRow.Properties.TemplateName expression

Node display is determined by the content type and rendering framework. XML catalog export no longer includes DisplayTemplate for nodes, and CSV imports no longer support the TemplateName column for categories.

Catalog logging infrastructure removal

The entire obsolete catalog logging infrastructure has been removed:

  • Mediachase.Commerce.Catalog.Data.CatalogLogAdmin – Removed. This class was marked obsolete since August 2020 and was superseded by the standard logging infrastructure using LogDto and LogAdmin.
  • Mediachase.Commerce.Catalog.Managers.CatalogLogManager – Removed. The static methods GetCatalogLog and SaveLog are no longer available. Use the standard logging infrastructure (LogDto and LogAdmin classes) for application logging.
  • Mediachase.Commerce.Catalog.Dto.CatalogLogDto – Removed, including CatalogLogDto.Designer.cs, CatalogLogDto.xsd, CatalogLogDto.xsc, and CatalogLogDto.xss.

ContentGuidAdmin removal

Mediachase.Commerce.Catalog.Data.ContentGuidAdmin has been removed. This class was marked obsolete since August 2020. If you require this functionality, use Mediachase.Commerce.Catalog.Internal.ContentGuidAdmin, which provides the same functionality.

📘

Note

The Internal namespace class should only be used when absolutely necessary, as it is marked for internal use.

IInventoryService.List() removal

The Mediachase.Commerce.InventoryService.IInventoryService.List() method has been removed. This method could potentially load all inventory records in the system, which is not scalable. Use targeted query methods instead:

// Before (Commerce 14) - Loads all inventory
var allInventory = _inventoryService.List();

// After (Commerce 15) - Query by specific criteria
var entryInventory = _inventoryService.QueryByEntry(new[] { entryCode });
var warehouseInventory = _inventoryService.QueryByWarehouse(warehouseCode);

Merchant removal

The merchant functionality and all related database objects have been removed. The merchant functionality is considered legacy. Use modern content API patterns for managing catalog-related data.

CatalogItemChangeManager changes

The following obsolete members have been removed from Mediachase.Commerce.CatalogItemChangeManager:

Removed MemberReplacement
DisableCatalogEventDrivenIndexingSettingKey constantUse CatalogOptions.DisableCatalogEventDrivenIndexing
Constructor without IOptions<CatalogOptions>Use the constructor with IOptions<CatalogOptions>
NotifyChanges(IEnumerable<IBulkChangeItem<CatalogEntryChange>>)Use CatalogItemChangeNotifier
NotifyChanges(IEnumerable<int>)Use CatalogItemChangeNotifier

CatalogLogger constructor change

The parameterless constructor of Mediachase.Commerce.Catalog.Loggers.CatalogLogger has been removed. Use the constructor with IPrincipalAccessor and IHttpContextAccessor parameters.

SeoAddressResolver changes

The following obsolete members have been removed from EPiServer.Commerce.Routing.SeoAddressResolver:

  • Constructor with ICatalogSystem and ReferenceConverter – Use constructor with SeoUriContentReferenceResolver instead.
  • GetCatalogContentLink(CatalogEntryDto) method
  • GetCatalogContentLink(CatalogNodeDto) method

ThumbnailUrlResolver constructor change

The EPiServer.Business.Commerce.Catalog.ThumbnailUrlResolver constructor without ReferenceConverter has been removed. Use the constructor that includes the ReferenceConverter parameter.

CatalogBuilder constructor change

The EPiServer.Business.Commerce.Catalog.Provider.Construction.CatalogBuilder constructor without CatalogMetaObjectRepository has been removed. Use the constructor that includes the CatalogMetaObjectRepository parameter.

CatalogItemAssetImportExport constructor change

The Mediachase.Commerce.Assets.ImportExport.CatalogItemAssetImportExport constructor without IAssetUrlResolver has been removed. Use the constructor that includes the IAssetUrlResolver parameter.

MetaDataChanged event behavior change

On MetaDataChanged events, the sync with content type model repository is now done synchronously (if possible) and not in a background thread. This may affect startup performance in implementations with large metadata models.