Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more

Navigation [hide] [expand]
ARCHIVED This content is retired and no longer maintained. See the latest version here.

This topic describes how to organize and leverage catalogs to extend functionality for browsing, searching, and displaying items in a product catalog, essential features for e-commerce websites.

Catalog structure

Set up the structure of the catalog with products and variants/SKUs based on how you intend to work with the data. You can use a product grouping under the categories, or you can work directly with stock keeping units (SKUs). If you will have only one SKU per product, there does not need to be a product.

The system also supports multi-level product inheritance to attach products as variants to a product. The child product can have further child variants. In the following example image from the fashion industry, a product in Commerce is a style for 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 the style level, and 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 Enterprise Resource Planning (ERP) or Product Information Management (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, and so on. Because you have multiple templates, you can mix products and SKUs in listings.

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

Overview

  • Context classes are singletons that retrieve and save data from database and that put into collections or Data transfer Objects (DTOs).
  • Configuration classes are singletons that retrieve configuration information from config files.
  • Manager classes also 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 retrieves and updates 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.
  • eCommerce Framework (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 resembles the database with one-to-one mapping to related tables and their fields. 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

C#
ICatalogSystem target = CatalogContext.Current;
            CatalogDto catalogs = target.GetCatalogDto();
            foreach (CatalogDto.CatalogRow catalog in catalogs.Catalog)
            {
                existingCatalogId = catalog.CatalogId;
                break;
            }

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

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

C#
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.
  • Other classes that are useful in retrieving other catalog data are 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.

Related topics

Last updated: Oct 12, 2015