-  Commerce
Jul 6, 2016
  7148
(9 votes)

New campaign and promotion system in Episerver Commerce

It's been in development and testing with beta customer for a while and with Commerce 9.19.0 it has finally dropped the beta stamp!

A terminology issue - in the user interface we use the term "discount" and in code / APIs we use the term "Promotions".

Why a new promotion system?

Discounts are one of the most effective ways to incentivize a shopper to complete the purchase. It's therefore a central feature in any e-commerce product and needs to be easy to use, flexible and performant.

The old promotion system in Episerver Commerce is based on the rules engine, a part of Windows Workflow Foundation v3, which has been obsoleted by Microsoft. It's also using a fairly advanced and complex UI to define the promotions which is not at the usability level that we strive for. These were the primary factors driving us to re-write the promotion system.

The idea is that we (Episerver) will provide most of the basic types of promotions that will be needed, and allow complete customization for those that have needs beyond what we provide out-of-the-box. For the marketer / merchandizer that will use those promotions we have a simple "fill in the blanks" metaphor.

What is it - exactly?

The main parts are:

  • New campaign concept
  • Code-centric definition of promotions
  • New UI for managing campaigns and discounts
  • Extensible promotion engine

Let's go thru them one-by-one, starting with the campaign concept. In the old promotion system campaigns were only used to hold dates and associate a promotion with the campaign. Initially the new campaign concept is little more than that but in the near future you will see a lot more benefits with the new campaigns, such as instant tracking of order value per campaign etc. Technically it's a content type in Episerver CMS and can be imported/exported in the same way as any normal content in CMS.

Promotions consists of two parts, a promotion data that holds metadata about the promotion such as which products/categories that the promotion applies to, required quantity, type and value of the actual discount that can be awarded etc. The second part is the promotion processor which implements the actual logic of checking if the promotion condition has been fulfilled, as well as returning information about the reward (if any) that should be applied.

We have tried really hard to make it as easy as possible to create new promotion types, with a lot of the hard work being done by the underlying promotion engine. Source code for the built-in promotion types will shortly be published on GitHub.

A lot of work has also gone into the new UI to make the process of creating and managing your campaigns and discounts a quick and intuitive process. Please let us know if we've succeeded.

Finally the promotion engine that drives the whole thing. The design goals were performance, simplicity and extensibility. You can find detailed information for developers here: http://world.episerver.com/documentation/Items/Developers-Guide/Episerver-Commerce/9/Marketing/marketing/

What's next?

Removing the beta stamp doesn't mean that we're done. We will add more promotion types, more features in the UI, improve performance, add capabilities etc. Removing the beta stamp is a signal that we will not make breaking changes, we're happy with the stability and general usability of this feature.

...and please - if you have feedback let us know!

Jul 06, 2016

Comments

Please login to comment.
Latest blogs
Searchable settings page

In my current project which has been actively developed for quite some time we have a big classig settings page. Unfortunately the placement and...

Per Nergård (MVP) | Apr 6, 2026

Forcing Lowercase URLs in Optimizely CMS During Auto-Translation

Learn how to fix uppercase and punctuation issues in Optimizely CMS 12 URL segments caused by LanguageManager auto-translation using a custom...

Stuart | Apr 2, 2026 |

Stott Robots Handler v7 for Optimizely CMS 13

Stott Robots Handler version 7 is now available for  Optimizely PaaS CMS 13 . This is includes updates to support the switch from a Site based...

Mark Stott | Apr 2, 2026

Automating Block Translations in Optimizely

Stop manual block-by-block translations. Learn how to use the TranslateOrCopyContentAreaChildrenBlockForTypes config to automate Optimizely CMS...

Stuart | Apr 1, 2026 |