SCsapcommercejobs
Blogsap commerce cloud

sap commerce cloud

Multi-Site Order Code Generation in SAP Commerce (US vs IN Real Example)

In real-world SAP Commerce Cloud projects, businesses often run multiple websites (multi-site setup) and require different order number formats per region. For example, US orders may start with “U” while India orders start with “I”. In this article, we’ll implement a practical solution for multi-site order code generation.

Av
Avinash Jadhav

May 1, 20262 min read

1. Business Requirement

Let’s take a real example:

WebsiteRequirementsamsung.com/en-usOrder code → 14 digits, prefix Usamsung.com/en-inOrder code → 16 digits, prefix I

Example Output:

U00000000000123
I0000000000004567

2. Why Default Configuration is Not Enough

SAP Commerce provides basic configuration like:

keygen.order.code.digits=8
keygen.order.code.type=numeric

But limitations:

  • No site-specific logic
  • No dynamic prefix support
  • Same format across all websites

👉 So we need customization

3. Solution Overview (4-Step Approach)

We’ll implement this using:

  1. Multiple key generators
  2. Spring configuration
  3. Custom Java class
  4. Site-based logic

4. Step 1: Define Properties in local.properties

Add separate configurations:

# US
keygen.us.order.code.name=us_order_code
keygen.us.order.code.start=U0000000000000
keygen.us.order.code.type=alphanumeric
keygen.us.order.code.digits=14

# IN
keygen.in.order.code.name=in_order_code
keygen.in.order.code.start=I000000000000000
keygen.in.order.code.type=alphanumeric
keygen.in.order.code.digits=16

👉 These properties define:

  • Separate number series
  • Different formats per country

5. Step 2: Configure Beans in core-spring.xml

Create multiple key generators:

<bean id="usOrderCodeGenerator" class="de.hybris.platform.servicelayer.keygenerator.impl.PersistentKeyGenerator">
    <property name="key" value="${keygen.us.order.code.name}"/>
    <property name="digits" value="${keygen.us.order.code.digits}"/>
    <property name="start" value="${keygen.us.order.code.start}"/>
    <property name="type" value="${keygen.us.order.code.type}"/>
</bean>

<bean id="inOrderCodeGenerator" class="de.hybris.platform.servicelayer.keygenerator.impl.PersistentKeyGenerator">
    <property name="key" value="${keygen.in.order.code.name}"/>
    <property name="digits" value="${keygen.in.order.code.digits}"/>
    <property name="start" value="${keygen.in.order.code.start}"/>
    <property name="type" value="${keygen.in.order.code.type}"/>
</bean>

6. Step 3: Create Custom Generator Class

Create a class:

public class B2BOrderCodeGenerator extends PersistentKeyGenerator {

    private PersistentKeyGenerator usOrderCodeGenerator;
    private PersistentKeyGenerator inOrderCodeGenerator;

    @Override
    public String generate() {
        // logic will go here
        return super.generate();
    }

    // getters & setters
}

7. Step 4: Add Site-Based Logic

Override generate():

@Override
public String generate() {

    String currentSite = getCurrentSite(); // pseudo logic

    if ("US".equalsIgnoreCase(currentSite)) {
        return usOrderCodeGenerator.generate().toString();
    } else if ("IN".equalsIgnoreCase(currentSite)) {
        return inOrderCodeGenerator.generate().toString();
    }

    return super.generate();
}

👉 You can fetch site using:

  • BaseSiteService
  • getCurrentBaseSite()

8. Wire Custom Generator in Spring

<bean id="b2bOrderCodeGenerator" class="com.custom.B2BOrderCodeGenerator">
    <property name="usOrderCodeGenerator" ref="usOrderCodeGenerator"/>
    <property name="inOrderCodeGenerator" ref="inOrderCodeGenerator"/>
</bean>

Then replace default generator with this bean.

9. Final Output

SiteOrder Code ExampleUSU00000000000123INI0000000000004567

10. Common Pitfalls

❌ Using same key for both generators
→ Leads to duplicate or mixed sequences

❌ Not configuring separate number series
→ Logic won’t work

❌ Forgetting Spring wiring
→ Default generator will still be used

11. Best Practices

  • Always create separate key names per site
  • Keep logic simple and maintainable
  • Use configuration + code combination
  • Test in multi-site environment

Conclusion

Multi-site order code generation is a common real-world requirement in SAP Commerce Cloud. By combining:

  • Configuration properties
  • Spring beans
  • Custom logic

You can build scalable and flexible solutions tailored to business needs.

What’s Next?

👉 Next: PersistentKeyGenerator in SAP Commerce (Complete Deep Dive for Developers)

Related Resources