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

Low-level APIs

Describes low-level APIs, which are considered legacy functionality, but can be useful in specific scenarios. Optimizely recommends using Catalog Content APIs in Commerce Connect.

📘

Note

You should work with the catalog to use the Catalog content APIs. However, Optimizely Commerce Connect 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 are available in the following namespace:

  • Mediachase.Commerce.Catalog

Low-level APIs, which are considered legacy functionality, can be useful in specific scenarios.

  • Context classes are singletons that retrieve and save data from a database and put that data into collections or Data Transfer Objects (DTOs).
  • 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 that retrieves and updates information in the catalog.
  • The current property is an instance of a class that 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 metadata 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.