0
点赞
收藏
分享

微信扫一扫

SAP Commerce Cloud,通过 ycommercewebservices OCC APIs 进行结账的一个技术限制

三千筱夜 2022-02-28 阅读 61

您是在公共基础设施中使用 SAP Commerce Cloud 的客户,并且您正在通过任何使用 OCC REST API 的店面实施无头架构。 您面临以下问题:


  1. 您想要实现单页结账 UI 而不是多步骤结账 UI。 你需要实现一个单一的 API 来一次性满足各种更新,而不是现有的单独的 API 端点面临性能问题。
  2. 您需要一个能够一次性预填充所有默认值的 API(如果它们存在),而不是让消费者在再次选择每个值之前进行结账和保存默认值。

如果客户试图模仿单页结帐:

例如 客户在同一页面上组合送货地址和方法,并一个接一个地发送两个 api 调用

后端目前无法处理这个问题。 第二个调用可能会过早发送,因为第一个调用尚未完成处理。 某些 OCC 缓存也可能导致错误响应(但尚未得到证实)。

这些新的 API 的开发方式:

(1) 创建一个新的类 CartNameDefaultsSetter, 继承自 AbstractCartDefaultsSetter:

package org.training.defaults.impl;

import de.hybris.platform.commercefacades.order.data.CartModificationData;
import de.hybris.platform.commerceservices.service.data.CommerceCartParameter;
import de.hybris.platform.core.model.order.CartModel;
import de.hybris.platform.simplecartupdatefacades.order.defaults.AbstractCartDefaultsSetter;

import java.util.List;

import static org.training.constants.TrainingConstants.CART_NAME_DEFAULTS_APPLIED;
import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;


public class CartNameDefaultsSetter extends AbstractCartDefaultsSetter
{
@Override
public List<CartModificationData> applyDefaults(final CommerceCartParameter parameter)
{
final CartModel cart = parameter.getCart();
if (cart != null && isCustomer(cart))
{
cart.setName("This is the default name");
return singletonList(createCommerceCartModification(CART_NAME_DEFAULTS_APPLIED));

}
return emptyList();
}
}

实现 applyDefaults 方法,从输入参数 CommerceCartParameter 里读取 cart 数据,并且生成默认字段。

(2) 将这个新的 class 注册到 facade 层 的 spring.xml 里:

<bean id="cartNameDefaultsSetter" class="org.training.defaults.impl.CartNameDefaultsSetter">
<property name="supportedType" value="PAYMENT_INFO"/>
<property name="userService" ref="userService"/>
</bean>

将这个 bean 添加到默认的 setters 列表里:

<bean depends-on="cartDefaultsSetters" parent="listMergeDirective">
<property name="add" ref="cartNameDefaultsSetter"/>
</bean>



举报

相关推荐

0 条评论