This content is archived. See latest version here

Last updated: Mar 31 2014

This section covers the features of the Catalogs system, describing how to 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 catalog structure 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 will only have one SKU per product, you do not need 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 an instance a "sweatshirt". A specific color of that shirt is a "variant" linked to the product, and the combination of 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 information is retrieved from an external ERP or PIM system integrated with Episerver Commerce.

Catalog structure example

If you have multiple SKUs per product, you need to create a page template for this. You can have as many page templates as you want. Typically, you 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 uses 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 access.
  • 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.
  • The Entry and CatalogNode objects contain virtually all of the associated information as properties.
  • There are classes that are useful for 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

Do you have feedback on this documentation? Send an email to For development-related questions and discussions, refer to our Forums on