This content is archived. See latest version here

This section covers the specific features of the Catalogs system, describing how you can organize and leverage it to extend functionality for browsing, searching, and displaying items in a product catalog, features that are essential for e-commerce websites.

Catalog structure

How you set up the structure of the catalog with products and variants/SKUs depends on how you intend to work with the data. You can use a product grouping under the categories, or you can work directly with SKUs. If you are only going to have one SKU per product, then there does not need to be a product.

The system also supports multi-level product inheritance, meaning that you can attach products as variants to a product, and the child product can have further child variants. In the example image below from the fashion industry, a "product" in Commerce is a "style" for instance a "sweatshirt". A specific color of that shirt is a "variant" linked to the product, and the combination of a specific size and color is a "SKU". Enrichment is primarily done on style level, but images and color are added on variant level. The SKU is the sellable unit with a set price. Typically, some of the information may be retrieved from an external ERP or PIM system integrated with EPiServer Commerce.

Catalog structure example

If you have multiple SKUs per product, then you will also need to create a page template for this. You can have as many page templates as you want, typically you will have one for SKUs, one for each type of product, one for bundles etc. Since you have multiple templates, you can mix products and SKUs in listings.

Classes for working with catalogs are available in the Mediachase.Commerce.Catalog namespace.


  • Context classes are singletons used to retrieve and save data from database and put into collections or DTOs.
  • Configuration classes are singletons used to retrieve configuration information from config files.
  • Manager classes also are used to retrieve and save data from the database. Sometimes the context class will use the manager classes to access the database.
  • Primary interface: CatalogContext.Current.
  • The Current property is the singleton instance of the object used to retrieve and update information in the catalog.
  • The current property is an instance of a class which implements the ICatalogSystem interface. By default, Mediachase.Commerce.Catalog.Impl.CatalogContextImpl is used. This is located in BusinessLayer/CommerceLib/Catalog/Impl - SiteContextImpl.cs.
  • ECF also provides a starting version of a web service implementation class: Mediachase.Commerce.Catalog.Impl.CatalogContextProxyImpl - SiteContextProxyImpl.cs.
  • The ECF Catalog interface returns either DTOs or Objects. The DTOs represent typed datasets. Typed dataset resemble the database with one-to-one mapping to related tables and their fields. The objects are a bit leaner and easier to work with, and are recommended for data retrieval.
  • The DTO classes are located in BusinessLayer/CommerceLib/Catalog/Dto.
  • The objects are located in BusinessLayer/CommerceLib/Catalog/Objects.
  • The Entry and CatalogNode objects are the most fundamental objects you will be accessing.
  • DTOs are best for saving catalog data.

Example: looking for changed data in the DTO and saving new, changed, or deleted data

ICatalogSystem target = CatalogContext.Current;
            CatalogDto catalogs = target.GetCatalogDto();
            foreach (CatalogDto.CatalogRow catalog in catalogs.Catalog)
                existingCatalogId = catalog.CatalogId;

            CatalogEntryDto dto = target.GetCatalogEntriesDto(existingCatalogId, response);
            // Catalog entry  create and set properties
            CatalogEntryDto.CatalogEntryRow catalogEntryRow = dto.CatalogEntry.NewCatalogEntryRow();
            catalogEntryRow.ApplicationId = CatalogConfiguration.Instance.ApplicationId;

You can also create objects from DTO objects. For example, there is a constructor for CatalogNode that allows you to pass a CatalogNodeRow in):

1 public CatalogNode(CatalogNodeDto.CatalogNodeRow input)
  • To access the meta data fields, use the ItemAttributes property of the object.
  • You will find that the Entry and CatalogNode objects contain virtually all of the associated information as properties.
  • There are also other classes that are useful in retrieving other catalog data in BusinessLayer/CommerceLib/Catalog/Managers.

Pricing features

Catalog pricing, tiered pricing and custom sale types offer flexible ways to define multiple prices for products. Refer to Pricing for more information.

See also

  • Refer to the Catalog content section for more information on how to work with catalog items as content.
  • Refer to EPiServer Service API for information on how to integrate catalogs with external systems.

Last updated: Oct 21, 2014