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
Feature | Is 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
Feature | Is supported |
---|---|
Creating a cart | ✅ |
Fetching a cart | ✅ |
Deleting a cart | ✅ |
Cloning a cart | ✅ |
Restoring a cart | ✅ |
Saving a cart | ✅ |
Cart - operations on entries
Feature | Is 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
Feature | Is 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
Feature | Is supported |
---|---|
Getting user order | ✅ |
Placing an order | ✅ |
Cancel an order | ✅ |
Getting mocked payment request | ✅ |
Getting mocked payment response | ✅ |
Registration & Session management
Feature | Is supported |
---|---|
Creating a user | ✅ |
Fetching a user | ✅ |
Signing a user in | ✅ |
Signing a user out | ✅ |
Refreshing user token | ✅ |
User data & Operations
Feature | Is 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 | ✅ |
Consent management
Feature | Is supported |
---|---|
Fetching consent templates | ✅ |
Giving a consent | ✅ |
Removing a consent | ✅ |
Getting a consent template | ✅ |
Miscellaneous
Feature | Is supported |
---|---|
Fetching countries | ✅ |
Fetching country regions | ✅ |
Fetching titles | ✅ |
Fetching base store configuration | ✅ |
B2B Features
B2B Products
Feature | Is supported |
---|---|
Getting a product | ✅ |
Getting a list of products from category | ✅ |
B2B Carts
Feature | Is 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
Feature | Is supported |
---|---|
Create user registration request | ✅ |
Get user | ✅ |
B2B Orders
Feature | Is 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
Feature | Is 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
Feature | Is supported |
---|---|
Get available payment types | ✅ |
B2B Cost centers
Feature | Is supported |
---|---|
Get active cost ceners | ✅ |
Get cost centre details | ✅ |
Get budgets for cost center | ✅ |
Get all cost centers | ✅ |
Assisted Service Module
Customer 360
Feature | Is supported |
---|---|
Get Customer 360 data | ✅ |
Agent
Feature | Is supported |
---|---|
Get points of service | ✅ |
Customer Lists
Feature | Is supported |
---|---|
Get Customer Lists | ✅ |
Customer
Feature | Is supported |
---|---|
Create customer | ✅ |
Autocomplete information | ✅ |
Bind cart | ✅ |
Customer List
Feature | Is 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:
- Create an address (
createCartAddress
SDK method) withoutdistrict
field, - Patch it with the field (
updateUserAddress
SDK method), - 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);
}