Customizing creation of new customers
In Xperience, you can customize how the system creates new customers. This is suitable especially when you want to process additional actions during the creation of a new customer, or when you want to replace the custom creation process completely.
To customize creating of new customers, you need to implement a class that inherits from the CustomerInfoProvider class:
Prepare an assembly (Class Library project) with class discovery enabled in your Xperience solution (or use an existing one). See Adding custom assemblies.
- Reference the project from both your live site and Xperience administration (CMSApp) projects.
Create a new class in your project in Visual Studio (for example CustomCustomerInfoProvider.cs) that inherits from the CustomerInfoProvider class and registers the custom InfoProvider:
[assembly: RegisterCustomProvider(typeof(CustomCustomerInfoProvider))] public class CustomCustomerInfoProvider : CustomerInfoProvider { }
Override the default Set method.
Save your project and reload your Xperience website.
The system now uses the custom CustomerInfoProvider class with the modified method.
Example – Adding extra credit to newly registered customers
This example demonstrates adding extra credit to the credit account of every newly registered customer.
using System;
using CMS;
using CMS.Ecommerce;
using CMS.SiteProvider;
[assembly: RegisterCustomProvider(typeof(CustomCustomerInfoProvider))]
public class CustomCustomerInfoProvider : CustomerInfoProvider
{
public override void Set(CustomerInfo info)
{
if (info == null)
{
throw new ArgumentNullException(nameof(info));
}
// Indicates whether the set object is a new customer
bool newCustomer = info.CustomerID <= 0;
// Updates or creates the customer based on the default process
base.Set(info);
// Adds extra credit for each new registered customer
if (newCustomer && info.CustomerIsRegistered)
{
// Creates a new credit event object
CreditEventInfo extraCredit = new CreditEventInfo();
// Sets the credit event's general properties
extraCredit.EventName = "Extra credit for a new customer";
extraCredit.EventDate = DateTime.Now;
extraCredit.EventDescription = "This is starting credit for a new customer.";
extraCredit.EventCustomerID = info.CustomerID;
// Sets the credit event's value in the site's main currency
extraCredit.EventCreditChange = 100;
// Sets the credit as site or global credit according to the current site's settings
extraCredit.EventSiteID = ECommerceHelper.GetSiteID(SiteContext.CurrentSiteID, ECommerceSettings.USE_GLOBAL_CREDIT);
// Saves the credit event to the database
CreditEventInfo.Provider.Set(extraCredit);
}
}
}