The concept of personalization is a wide range. I’m working on a project that needs personalization and started to learn. One cool thing I learn from “Foundation” project (Foundation is a very good sample of all Episerver offerings) is how to build a code to use Episerver Tracking Commerce. Again I’m learning and please advise me if I can improve any part of it 🙂
Please read through how to install tracking Nuget package from here
The next step is to create a separate project in your solution and add a commerce tracking package to the solution. Then add a class as below:
public interface ICommerceTrackingService
{
Task<TrackingResponseData> TrackOrder(HttpContextBase httpContext, IPurchaseOrder order);
}
public class CommerceTrackingService: ICommerceTrackingService
{
private readonly IContextModeResolver contextModeResolver;
private readonly TrackingDataFactory trackingDataFactory;
private readonly ITrackingService trackingService;
private readonly ServiceAccessor<IContentRouteHelper> contentRouteHelperAccessor;
public CommerceTrackingService(IContextModeResolver contextModeResolver,
TrackingDataFactory trackingDataFactory,
ITrackingService trackingService,
ServiceAccessor<IContentRouteHelper> contentRouteHelperAccessor)
{
this.contextModeResolver = contextModeResolver;
this.trackingDataFactory = trackingDataFactory;
this.trackingService = trackingService;
this.contentRouteHelperAccessor = contentRouteHelperAccessor;
}
public async Task<TrackingResponseData> TrackOrder(HttpContextBase httpContext, IPurchaseOrder order)
{
if (contextModeResolver.CurrentMode != ContextMode.Default)
{
return null;
}
var trackingData = trackingDataFactory.CreateOrderTrackingData(order, httpContext);
return await trackingService.TrackAsync(trackingData, httpContext, contentRouteHelperAccessor().Content);
}
}
I put both interface and class in the same file to simplify the post but if you want you can separate them.
Next step is to change you StructureMap to scan new project (this is optional depending on your StructureMap structure)
context.StructureMap().Configure(config =>
{
config.Scan(scan =>
{
scan.TheCallingAssembly();
scan.Assembly("EPiServer.Sample.Commerce.Personalization");
scan.WithDefaultConventions();
scan.LookForRegistries();
});
});
The next step is to call the track order. We want to do that when the order is being placed. So after cart converted to purchase order you can call your TrackOrder function:
commerceTrackingService.TrackOrder(httpContext, purchaseOrder);
This will push all relevant data from order to tracking engine to help the recommendation engine to get a better understanding of the user behavior.
I recommend to checkout “Foundation” project that has a very comprehensive sample.