Document Properties
Kbid2561P0
Last Modified24-Jun-2020
Added to KB12-Mar-2014
Public AccessEveryone
StatusOnline
Doc TypeGuidelines, Concepts & Cookbooks
Product
  • ICM 7.6
  • ICM 7.7
  • ICM 7.8
  • ICM 7.9
  • ICM 7.10

Concept - Customer Segmentation Managed Service

Product Version

7.5

Product To Version


Status

final

1 Introduction

In some projects the customer segmentation is done in another system and there is no easy way, except from the existing import to static segments, to determine customer segments live from outside. This means dynamic segmentation from a 3rd party system requires a tremendous amount of project work.

So a need for dynamic segmentation in standard Intershop product is identified. This leads to introduction of a new managed service: the Customer Segmentation Service. It is intended to make it much easier to exchange and enhance the standard segmentation service with a 3rd party integration that delivers the customer segments for a user or determines if a user is part of a specific segment.

1.1 References

Concept - Customers and Users

Concept - Managed Service Framework

Cookbook - Customer Segmentation

2 Overview

The customer segmentation managed service has to provide CustomerSegmentBOs. A standard implementation exists which delegates the retrieval of CustomerSegmentBOs to the default UserGroupPO / ConsumerGroupPO internal implementation. In addition to this, it is possible to create other implementations of this service which serve as adapters to external systems which in turn provide other customer segments. It is possible to have several segmentation services running simultaneously providing segments from various sources - the different implementations are not exclusive, but they work together, meaning that all retrieved customer segments from distinct customer segment BO repositories can be combined.

It should be possible to assign a customer segment to other business objects, regardless of where the segment came from (internal customer segmentation implementation or external system). This is possible for the standard business objects to which customer segments can be assigned, like Price Lists, Catalog Views, Promotions, Campaigns and A/B Tests.

3 Implementation Details

There are 2 new cartridges created, part of f_checkout component set:

  • bc_customer_segment- contains the interface of the service;
  • ac_customer_segment_std- contains the service definition and standard (internal) implementation based on the underlying UserGroupPO / ConsumerGroupPO, together with component instances needed for registering this implementation.

There is one additional cartridge which contains a CAPI test checking if the default service implementation is correctly registered in the services registry.

The interface for customer segmentation service is defined in bc_service cartridge -  com.intershop.component.customer.segment.capi.service.CustomerSegmentationService:

CustomerSegmentationService
/**
 * Defines interface for services which provide customer segments from some
 * internal (Intershop) or external source (system).
 */
public interface CustomerSegmentationService
{
     /**
     * Retrieves all customer segments the provided {@code customerBO} belongs
     * to.
     * 
     * @param customer
     *            the {@link CustomerBO} instance whose assigned customer
     *            segments need to be retrieved. The argument can be null.
     * @return a collection of all {@code CustomerSegmentBO} instances assigned
     *         to the {@code customer}. It is expected that implementations
     *         will return a non-null result.
     */
    public Collection<CustomerSegmentBO> getCustomerSegments(CustomerBO customer);
    
    /**
     * Retrieves all customer segments known to this service.
     * @return a collection of all {@code CustomerSegmentBO} instances.
     * It is expected that implementations will return a non-null result.
     */
    public Collection<CustomerSegmentBO> getAllCustomerSegments();
}

The standard service definition resides in ac_customer_segment_std cartridge:  com.intershop.adapter.customer.segment.standard.internal.StandardCustomerSegmentationServiceDefinition. The ac_customer_segment_std cartridge also contains the component implementation and instance needed for registration of this standard customer segmentation service in the manged services registry:

services.component
<implementation name="com.intershop.adapter.customer.segment.standard.internal.StandardCustomerSegmentationServiceDefinition" class="com.intershop.adapter.customer.segment.standard.internal.StandardCustomerSegmentationServiceDefinition" 
                    implements="ServiceDefinition"/>
    <!-- Registering the ServiceDefintion instance to the (global) ServiceDefinitionRegistry -->
    <fulfill requirement="serviceDefinition" of="serviceDefinitionRegistry">
        <instance with="ServiceDefinitionRegistry.Entry">
            <fulfill requirement="cartridgeID" value="ac_customer_segment_std" />
            <fulfill requirement="groupID" value="service.group.name.CustomerSegment_Services" />
            <fulfill requirement="serviceDefinitionID" value="StandardCustomerSegmentationServiceDefinition" />
            <fulfill requirement="localizationKeyForName" value="service.definition.name.StandardCustomerSegmentationServiceDefinition" />
            <fulfill requirement="serviceDefinition">
                <instance with="com.intershop.adapter.customer.segment.standard.internal.StandardCustomerSegmentationServiceDefinition" />
             </fulfill>
        </instance>
    </fulfill>

Because the CustomerSegmentBO is a business object it should be managed by a CustomerSegmentBORepository. So it is expected that implementations of the customer segmentation managed service that connect to an external system make use of a CustomerSegmentBORepository, that is specific to that service definition or the external system the service connects to.

Extending the com.intershop.component.customer.segment.capi.service.AbstractCustomerSegmentationServiceDefinition abstract class in bc_customer_segment removes the need for a custom implementation of the service interface. Instead only a custom CustomerSegmentBORepository is needed. In this case  com.intershop.component.customer.segment.capi.service.StandardCustomerSegmentationServiceImpl is used as implementation of the service interface. This standard implementation is simple - it just retrieves all segments by a CustomerSegmentBORepository and uses ORMCustomerSegmentBOImpl.isCustomerBOAssigned(CustomerBO) to determine which segments are assigned to the corresponding customer.

Disclaimer

The information provided in the Knowledge Base may not be applicable to all systems and situations. Intershop Communications will not be liable to any party for any direct or indirect damages resulting from the use of the Customer Support section of the Intershop Corporate Web site, including, without limitation, any lost profits, business interruption, loss of programs or other data on your information handling system.

Customer Support
Knowledge Base
Product Resources
Support Tickets