Quan Mai
Jul 23, 2020
visibility 2300
star star star star star
(4 votes)

New ReferenceConverter method in Commerce 13.21

As you might have heard - ReferenceConverter is your friend. It is very lightweight way to map between the ContentReference and code of catalog content, instead of having to load the content - which is both slow and expensive. Whenever you have chance, ReferenceConverter should be used.

But it is now even better. In Commerce 13.21, ReferenceConverter has a new method to get multiple codes at once. It looks like this

public virtual IDictionary<ContentReference, string> GetCodes(IEnumerable<ContentReference> contentLinks, CatalogContentType catalogContentType)

A common scenario for this new method is when you need to get all variants of a product (by using IRelationRepository), then get all prices or inventories for those variants. Instead of

var allVariantCodes = allVariantLinks.Select(x => _referenceConverter.GetCode(x));

You can now call

var allVariantCodes = _referenceConverter.GetCodes(allVariantLinks, CatalogContentType.CatalogEntry).Values;

The former can result in multiple database roundtrips - depending on how many variants you have. The latter always results in at most 1 database roundtrip. As we all know each roundtrip adds overhead, so there will be a performance improvement.

Jul 23, 2020

Comments

Stefan Holm Olsen
Stefan Holm Olsen Jul 23, 2020 10:43 AM

This is great news, Quan.

I have been wishing for this for some time.

Aria Zanganeh
Aria Zanganeh Jul 30, 2020 12:31 AM

woohoo .. now my schedule jobs that import catalog can run faster!

Mari Jørgensen
Mari Jørgensen Aug 4, 2020 11:05 AM

Great! Keep em coming! ;)

Stefan Holm Olsen
Stefan Holm Olsen Aug 15, 2020 05:03 PM

@Quan Mai: I have a similar optimization wish for batch loading CMS content without first loading core data.

I once raised this thread related to ContentAreaItem batch loading, which resulted in many roundtrips even when I called IContentLoader.GetItems on the content area items.

Do you know whether the CMS team has something planned for this?

error Please login to comment.
Latest blogs
Composition Over Inheritance: Why Your Content Contract Is Not a Base Class

Inside the structural conformance pattern in SaaS CMS — from server-side inheritance to pipeline governance. A contract in Optimizely SaaS CMS is...

Vipin Banka | Sep 19, 2026

Optimizely Opti ID Integration: Why the API Key Was Missing from the DXP Management Portal

While working on an Optimizely CMS 12 Opti ID integration recently, we ran into an issue that initially appeared to be related to SSO authenticatio...

Madhu | Sep 18, 2026 |

Extending a Contract: What You Can Override

Contracts share fields across content types — but not every field setting can be overridden. Push the same contract onto several components, and CM...

Chirag Khanna | Sep 18, 2026 |

Building a Blazor Server UI Inside the Optimizely CMS 13 Admin Shell

What I learned shipping a Blazor Server UI inside Optimizely CMS 13 — Razor components in a NuGet package, the Blazor hub next to MapContent(),...

Stanisław Szołkowski | Sep 17, 2026 |