HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

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 (PaaS).

📘

Note

You should work with the catalog to use the Catalog content APIs. However, Optimizely Commerce (PaaS) 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.

  • 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 (PaaS) 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 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.