Don't miss out Virtual Happy Hour this Friday (April 26).

Try our conversational search powered by Generative AI!

Loading...
Applies to versions: 10 and higher
Other versions:
ARCHIVED This content is retired and no longer maintained. See the version selector for other versions of this topic.

Low-level APIs

Recommended reading 
Note: This documentation is for the preview version of the upcoming release of CMS 12/Commerce 14/Search & Navigation 14. Features included here might not be complete, and might be changed before becoming available in the public release. This documentation is provided for evaluation purposes only.

Note: The recommended approach to working with the catalog is to use the Catalog content APIs. However, Optimizely Commerce also has a number of low-level APIs for working with the catalog. Most of them are considered legacy, but can be useful in specific scenarios.

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 a database and put that data into collections or Data Transfer Objects (DTOs).
  • [New in Commerce 14] CatalogOptions options class for catalog configuration options.
    (Versions 10-13: 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

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:

public CatalogNode(CatalogNodeDto.CatalogNodeRow input) 
  • To access the meta data fields, use the object's ItemAttributes property.
  • The Entry and CatalogNode objects contain virtually all of the associated information as properties.
  • Other classes useful in retrieving other catalog data reside in BusinessLayer/CommerceLib/Catalog/Managers.
Do you find this information helpful? Please log in to provide feedback.

Last updated: Jul 02, 2021

Recommended reading