Как удалить CartEntries из hybris? - PullRequest
1 голос
/ 19 февраля 2020

Мне нужно создать CronJob, который удаляет записи корзины определенного типа c. Я уже нашел все записи с необходимым PK, но я все еще не могу удалить их.

Я обнаружил в Интернете, что не могу использовать FlexibleSearchQuery для этого. Также я не нашел никакого метода для этого в CartEntryService. Где находится логин удаления c?

1 Ответ

4 голосов
/ 19 февраля 2020

Вы должны использовать modelService, чтобы удалить любую модель из базы данных. В вашем случае все, что вам нужно сделать, это передать список от cartEntryModel до getModelService().removeAll(list)

Посмотрите на DefaultCartService updateQuantities , в основном этот метод вызывается с количеством 0 для записи корзины, которую пользователь пытается удалить из корзины.

    final Collection<CartEntryModel> toRemove = new LinkedList<CartEntryModel>();
    final Collection<CartEntryModel> toSave = new LinkedList<CartEntryModel>();
    for (final Map.Entry<CartEntryModel, Long> e : getEntryQuantityMap(cart, quantities).entrySet())
    {
        final CartEntryModel cartEntry = e.getKey();
        final Long quantity = e.getValue();
        if (quantity == null || quantity.longValue() < 1)
        {
            toRemove.add(cartEntry);
        }
        else
        {
            cartEntry.setQuantity(quantity);
            toSave.add(cartEntry);
        }
    }
    getModelService().removeAll(toRemove);

Вы можете получить ту же форму, используя скрипт groovy. См. создание Cronjob с использованием сценария Groovy в SAP Hybris

Groovy Пример сценария:

import de.hybris.platform.servicelayer.search.FlexibleSearchQuery;
import de.hybris.platform.servicelayer.model.ModelService;
import de.hybris.platform.core.model.user.CartEntryModel;
import de.hybris.platform.servicelayer.search.SearchResult;
import org.apache.commons.collections.CollectionUtils;



def removeCartEntries()

 {
  final SearchResult<CartEntryModel> searchResults = flexibleSearchService.search("query to get the list of cartentries")
  if (searchResults != null && CollectionUtils.isNotEmpty(searchResults.getResult())) {
      modelService.removeAll(searchResults.getResult());
   }
 }
removeCartEntries();

println "done";
...