Vue Storefront is now Alokai! Learn More
Supported Features

Supported Features

This page shows the SAP Commerce Cloud features supported by this integration.

API Reference

You can find all available SAPCC module methods, their description and examples in the API Reference.

Category & Product

FeatureIs supported
Getting a product✅
Getting a list of products✅
Getting product references✅
Getting product suggestions✅
Searching for products✅
Getting product reviews✅
Creating a product review✅
Fetching a category✅
Fetching a category tree with catalog version✅
Fetching combined product & category data✅

Cart - primary operations

FeatureIs supported
Creating a cart✅
Fetching a cart✅
Deleting a cart✅
Cloning a cart✅
Restoring a cart✅
Saving a cart✅

Cart - operations on entries

FeatureIs supported
Adding cart entry✅
Adding cart entry and getting cart✅
Removing cart entry✅
Removing cart entry and getting cart✅
Updating cart entry✅
Updating cart entry and getting cart✅

Cart - checkout operations

FeatureIs supported
Assigning email to a cart✅
Creating a cart address✅
Removing a cart address✅
Replacing a cart address✅
Fetching cart delivery modes✅
Replacing cart delivery mode✅
Creating cart payment details (Used for demo purposes only)🚧 Partial
Replacing cart payment details (Used for demo purposes only)🚧 Partial
Adding cart voucher✅
Adding cart voucher and getting cart✅
Removing cart voucher✅

Payment & Order

FeatureIs supported
Getting user order✅
Placing an order✅
Cancel an order✅
Getting mocked payment request✅
Getting mocked payment response✅

Registration & Session management

FeatureIs supported
Creating a user✅
Fetching a user✅
Signing a user in✅
Signing a user out✅
Refreshing user token✅

User data & Operations

FeatureIs supported
Updating a user✅
Changing user password✅
Getting user address✅
Getting user addresses✅
Creating user address✅
Deleting user address✅
Updating user address✅
Fetching user carts✅
Fetching user order history✅
FeatureIs supported
Fetching consent templates✅
Giving a consent✅
Removing a consent✅
Getting a consent template✅

Miscellaneous

FeatureIs supported
Fetching countries✅
Fetching country regions✅
Fetching titles✅
Fetching base store configuration✅

B2B Features

B2B Products

FeatureIs supported
Getting a product✅
Getting a list of products from category✅

B2B Carts

FeatureIs supported
Get current cart✅
Update delivery address for cart✅
Update quantity of the product in cart✅
Create additional quantity of products in cart✅
Upate cost center for cart✅
Update payment type for cart✅

B2B Users

FeatureIs supported
Create user registration request✅
Get user✅

B2B Orders

FeatureIs supported
Create cart from prev. order✅
Create an order✅
Create a replenishment order✅
Get order history of org. branch✅
Get order from org. branch✅

B2B Order approval

FeatureIs supported
Get list of orders to be approved for a given user✅
Approve/reject order✅
Get details of the order to be approved✅

B2B Payment types

FeatureIs supported
Get available payment types✅

B2B Cost centers

FeatureIs supported
Get active cost ceners✅
Get cost centre details✅
Get budgets for cost center✅
Get all cost centers✅

Assisted Service Module

Customer 360

FeatureIs supported
Get Customer 360 data✅

Agent

FeatureIs supported
Get points of service✅

Customer Lists

FeatureIs supported
Get Customer Lists✅

Customer

FeatureIs supported
Create customer✅
Autocomplete information✅
Bind cart✅

Customer List

FeatureIs supported
Get customer list details✅
Search customers✅

Limitations of SAP Commerce Cloud

This section presents limitations coming from the SAP Commerce Cloud and possible workarounds.

Setting district field in a new address is being lost

When creating a new address, the district field is being lost. It is a known issue in SAP Commerce Cloud. It happens because in the controller responsible for creating an address, the district field is not being set. However, it is being set in the controller responsible for updating an address. You can follow this flow to address this issue.

As a workaround, you can:

  1. Create an address (createCartAddress SDK method) without district field,
  2. Patch it with the field (updateUserAddress SDK method),
  3. Fetch updated address using (getUserAddress SDK method).

This workaround works only for a logged in user. Guest user can't use an update address endpoint as it is restricted to logged in users.

It is possible to create user with the same email multiple times

Even though, it looks like it is possible. In reality, SAP responds with data you provided + UID which is Random string but it doesn't create a new user in that scenario.

We can find code responsible for that in SAP's source code:

// ...
// Part of method responsible for creating an user
try {
  customerFacade.register(registerData);
} catch (final DuplicateUidException ex) {
    userExists = true;
    LOG.debug("Duplicated UID", ex);
}
final String userId = user.getUid().toLowerCase(Locale.ENGLISH);
httpResponse.setHeader(YcommercewebservicesConstants.LOCATION, getAbsoluteLocationURL(httpRequest, userId));
final CustomerData customerData = getCustomerData(registerData, userExists, userId);
return getDataMapper().map(customerData, UserWsDTO.class, fields);

// ...
// Here we can see what's happening if userExists === true
protected CustomerData getCustomerData(final RegisterData registerData, final boolean userExists, final String userId)
{
    final CustomerData customerData;
    if (userExists)
    {
      customerData = customerFacade.nextDummyCustomerData(registerData);

        // if user exists, make sure return the customer.uid is the same with exist one
        alignCustomerUidWithExistUser(userId, customerData);
    }
    else
    {
        customerData = customerFacade.getUserForUID(userId);
    }
    return customerData;
}

/**
  * Generate dummy customer data with random customerId to return if user already exists in database.
  *
  * * @param registerData
  *          data provided by user during registration
  * @return
*/
CustomerData nextDummyCustomerData(final RegisterData registerData);

// ...
@Override
public CustomerData nextDummyCustomerData(final RegisterData registerData)
{
  final CustomerModel userModel = new CustomerModel();
  setCommonPropertiesForRegister(registerData, userModel);
  userModel.setCustomerID(UUID.randomUUID().toString());

  return getCustomerConverter().convert(userModel);
}