Promotion engine
Describes how the Optimizely Commerce Connect promotion engine works and how it is used when calculating discounts on a shopping cart.
Promotion engine flow
Classes in this topic are available in the following namespace:
EPiServer.Commerce.Marketing
Calculate promotions
PromotionEngine evaluates the conditions of all active promotions and rewards specific orders when the conditions are fulfilled. The following example uses the promotion engine to calculate promotions through the order API:
var cart = ServiceLocator.Current.GetInstance<IOrderRepository>().LoadOrCreateCart<Cart>(PrincipalInfo.CurrentPrincipal.GetContactId(), Cart.DefaultName);
IEnumerable<RewardDescription> rewardDescriptions = ServiceLocator.Current.GetInstance<IPromotionEngine>().Run(cart);Get promotion prices
The following example gets discounted entries for the current market:
var promotionEngine = ServiceLocator.Current.GetInstance<IPromotionEngine>();
var currentMarket = ServiceLocator.Current.GetInstance<ICurrentMarket>();
IEnumerable<DiscountedEntry> discountedEntries = promotionEngine.GetDiscountPrices(entryLink, currentMarket);Get promotion prices for a collection of entries:
var promotionEngine = ServiceLocator.Current.GetInstance<IPromotionEngine>();
var currentMarket = ServiceLocator.Current.GetInstance<ICurrentMarket>();
var market = currentMarket.GetCurrentMarket();
IEnumerable<DiscountedEntry> discountedEntries = promotionEngine.GetDiscountPrices(entryLinks, market, market.DefaultCurrency);Evaluate entries
The following example evaluates a single entry:
IEnumerable<RewardDescription> rewardDescriptions = ServiceLocator.Current.GetInstance<IPromotionEngine>().Evaluate(entryLink);The following example evaluates a collection of entries:
IEnumerable<RewardDescription> rewardDescriptions = ServiceLocator.Current.GetInstance<IPromotionEngine>().Evaluate(entryLinks);Get promotions and items for campaign
The following example gets promotions and items for a campaign:
IEnumerable<PromotionsItems> promotionItemsList = ServiceLocator.Current.GetInstance<IPromotionEngine>().GetPromotionItemsForCampaign(campaignLink);Calculate promotions using workflows
Run the promotion system with the workflow system (legacy) to calculate and remove promotions. Updated workflow activities use EPiServer.Commerce.Marketing.IPromotionEngine to make calculations and manipulate the cart.
The workflows use the promotion system by default. Use one of the following methods to disable it:
- Update
Configs\ecf.app.config:<Application defaultApplicationName="ECApplication"> <Features> <add feature="WorkflowsVNext" state="Disabled" type="Mediachase.Commerce.Core.Features.WorkflowsVNext, Mediachase.Commerce" /> </Features> </Application> - Use the
ServiceLocator:var featureSwitch = ServiceLocator.Current.GetInstance<IFeatureSwitch>(); featureSwitch.Features.Add(new WorkflowsVNext()); featureSwitch.DisableFeature(WorkflowsVNext.FeatureWorkflowsVNext);
Related blog post: Old promotion system is (already) dead, long live the new promotion system
Updated 20 days ago
