Как добавить записи корзины во вновь созданную CartModel? - PullRequest
1 голос
/ 21 апреля 2020

Я использовал следующий код для создания корзины и добавления одной cartEntry внутри этой модели CartModel:

final CartModel cartModel = cartFactory.createCart() ;
OrderEntryModel orderEntryModel = new OrderEntryModel();
List<AbstractOrderEntryModel> entryModel = new ArrayList<>();
final ProductModel product = productService.getProductForCode(productCode); // came from another method
orderEntryModel.setProduct(product);
entryModel.add(orderEntryModel);
cartModel.setEntries(entryModel);
cartModel.setUser(userService.getCurrentUser());
cartService.setSessionCart(cartModel);

Когда я пытаюсь получить эту корзину из сессии, примените эту корзину и передайте эту корзину следующей OOTB метод, я получаю следующее исключение:

DefultAbstractOrderEntryPreparer@1090ef7e]: unexpected preparer error: null] with root cause
java.lang.NullPointerException
    at de.hybris.platform.order.interceptors.DefaultAbstractOrderEntryPreparer.onPrepare(DefaultAbstractOrderEntryPreparer.java:97)

После отладки я узнал, что эта проблема возникает, потому что я добавляю записи заказа иначе, чем мы использовали в обычном потоке оформления заказа (первый код блок, третья последняя строка).

Итак, есть ли какой-либо OOTB-метод или любой другой способ создать orderEntry и добавить его во вновь созданную корзину?

Я проверил нормальную корзину, созданную во время проверки, и эта проблема не возникает. Итак, я пришел к выводу, что это происходит из-за следующего кода из первого блока кода:

OrderEntryModel orderEntryModel = new OrderEntryModel();
List<AbstractOrderEntryModel> entryModel = new ArrayList<>();
final ProductModel product = productService.getProductForCode(productCode); // came from another method
orderEntryModel.setProduct(product);
entryModel.add(orderEntryModel);
cartModel.setEntries(entryModel);

1 Ответ

1 голос
/ 21 апреля 2020

Существует стандартная служба cartService, которая используется как метод addNewEntry.

        final CartModel cartModel = cartFactory.createCart();
        final ProductModel product = productService.getProductForCode(productCode); // came from another method
        getCartService().addNewEntry(cartModel, product, 1, null);
        cartModel.setUser(userService.getCurrentUser());
        cartService.setSessionCart(cartModel);
...