This topic describes how to work with customer groups. You can manage contacts within customer groups, and apply specific pricing and discounts by group, and personalization. You can assign a customer (user) or an organization to a customer group. This drives two areas in the system:
- Selling prices - price eligibility for a customer group.
- Eligibility for discount campaigns.
There is a priority to these-if a customer group is assigned to an organization, this drives pricing and campaign eligibility.
Create customer groups in the Commerce Manager administration interface, and then apply them to contacts and organizations. Customer groups are common to both contacts and organizations, and you can apply them to customer segments that are targeted for marketing campaigns and customer group-specific pricing, included for variants.
Classes in this topic are available in the following namespaces:
How it works
Customer Group is available as a field for both customer and organization records. The CustomerContact class exposes this field as CustomerGroup, and the Organization class exposes it as OrgCustomerGroup, with get and set public accessors available for both. These fields use a descriptive string value representation of the Customer Group to which a customer or organization belong. Internally the field stores the strings as integers that map to the string values, so the acceptable values are limited by that mapping. But the acceptable values can be expanded at runtime. This capability is provided through the Business Foundation (BF) library. The acceptable values are shared between the two fields as the "ContactGroup" MetaEnum type. See MetaEnum class for working with the BF dynamic enum implementation.
As a BF field, CustomerGroup does not exist in the database in the initial installation but is added when you run AutoInstallMetaDataModule during initial site load. The default values available in the field are included in code in the enum CustomerGroup.eContactGroup, although the enum is of limited use otherwise. The eContactGroup enum is fixed at compile time and will not change at runtime when the list is edited in the application or in code by external processes.
The accessor properties on the Organization and CustomerContact are the preferred means of accessing these data, but if you need to access the values directly, use EntityObjectHelper.GetStringEntityEnumProperyValue(). The field name for the CustomerContact version of the BF field is stored as a constant in ContactEntity.FieldCustomerGroup, and the equivalent field name for the Organization Business Foundation field is stored as a constant in OrganizationEntity.FieldOrgCustomerGroup.
The CustomerContact class has an additional get-only property named EffectiveCustomerGroup that combines these data.
- If the CustomerContact is associated with an Organization, and that Organization has a CustomerGroup assigned, then EffectiveCustomerGroup returns that CustomerGroup.
- If no Organization is assigned to the CustomerContact or if the assigned Organization does not have a CustomerGroup assigned, then EffectiveCustomerGroup returns the CustomerGroup recorded on the CustomerContact record itself, if any.
This evaluation is not recursive on the Organization hierarchy, so only the Organization to which the CustomerContact belongs directly is considered and any parent Organizations of that Organization are ignored.
Note: Upgrade: EffectiveCustomerGroup replaced the existing CustomerGroup field in places where it is appropriate. Pricing and promotions now evaluate customer group membership based on EffectiveCustomerGroup.
Using customer groups on promotions
Customer groups are not applied directly to a single promotion. They are controlled at the Campaign level by means of Customer Segments, which can take membership in a Contact group as a condition. While it is possible to edit these in code, that is not typically needed and is not recommended.
Using customer groups on pricing
Refer to the Customer specific pricing section of the Pricing documentation.