Просмотр результатов расчета корзины регистрации

Мы пытаемся внедрить собственный набор правил расчета корзины и зарегистрировать новое представление результатов, чтобы получить результаты расчета корзины, но не можем найти информацию о том, как зарегистрировать новый класс представления результатов?

Мы используем примеры отсюда: https://support.intershop.com/kb/index.php/Display/23V395#Cookbook-BasketCalculation-Recipe:TheResultView

И проблема в том, как использовать/зарегистрировать класс TutorialCalculationResultView?

Благодарю вас!


person Goran Petanjek    schedule 03.06.2019    source источник


Ответы (2)


Вам нужно создать фабричный класс, который создает представление результатов:

public class TutorialCalculationResultViewFactoryImpl implements CalculationResultViewFactory
{
    @Override
    public LineItemCtnrCalculationResultView createCalculationResultView(BaseCalculationResultView view)
    {
        return new TutorialCalculationResultView(view);
    }
}

Затем эту реализацию необходимо подключить через структуру компонентов:

<implementation name="TutorialCalculationResultViewFactory" implements="CalculationResultViewFactory"
                class="yourPackageName.TutorialCalculationResultViewFactoryImpl" />

Наконец, вы должны зарегистрировать экземпляр этого класса, как описано в поваренной книге:

<fulfill requirement="assignment" of="BasketBOCalculationResultViewExtensionFactory">
    <instance with="CalculationResultViewFactoryAssignment">
        <fulfill requirement="ruleSetID" value="yourPackageName.TutorialRuleSet" />
        <fulfill requirement="factory">
            <instance with="TutorialCalculationResultViewFactory" />
        </fulfill>
    </instance>
</fulfill>
person Andreas Paschwitz    schedule 03.06.2019
comment
Спасибо, но должен ли TutorialCalculationResultView расширять LineItemCtnrCalculationResultView? Потому что мне не нужны все методы из интерфейса LineItemCtnrCalculationResultView. - person Goran Petanjek; 04.06.2019
comment
Я думаю, что должен, иначе он не будет соответствовать возвращаемому типу интерфейса CalculationResultViewFactory. Однако ваш TutorialCalculationResultView может просто наследоваться от существующего представления результатов (например, NetBasedLineItemCtnrCalculationResultView_V3), поэтому вам не нужно реализовывать все методы. - person Andreas Paschwitz; 04.06.2019

Чтобы добавить к приведенному выше ответу, вы можете получить доступ к представлению, используя это расширение:

TutorialCalculationResultView view = basketbo.getExtension(BasketBOCalculationResultViewExtension.class);

это должно вернуть ваше представление результатов.

person Willem Evertse    schedule 03.06.2019
comment
Спасибо, но, как я грустил выше, мне просто нужно добавить 4 новых вычисляемых значения по позициям и 2 по корзине (итоги), мне не нужно 50 методов из LineItemCtnrCalculationResultView :) Это возможно? - person Goran Petanjek; 04.06.2019
comment
я обновил, чтобы сделать его более ясным, что должно вернуть вашу реализацию представления результатов, основанную на LineItemCtnrCalculationResultView. - person Willem Evertse; 04.06.2019
comment
Хорошо, но если я реализую LineItemCtnrCalculationResultView (также требуется метод createCalculationResultView из CalculationResultViewFactory), мне нужно реализовать 50 ненужных методов. Например, нам нужно добавить методы getMonthlyPrice, getMonthlyDiscount, getUpfrontDiscount и getUpfrontPrice и только эти методы в наше представление результатов. - person Goran Petanjek; 04.06.2019
comment
Basketbo.getExtension(BasketBOCalculationResultViewExtension.class) возвращает com.intershop.sellside.appbase.b2c.internal.calculation.BasketBOCalculationResultViewExtensionImpl, а не TutorialCalculationResultView :( Я вижу, что TutorialCalculationResultView является полем _delegate в BasketBOCalculationResultViewExtensionImpl, но я не могу использовать методы из TutorialCalculationResultView. - person Goran Petanjek; 04.06.2019
comment
А, я вижу, BasketBOCalculationResultViewExtensionImpl расширяет LineItemCtnrCalculationResultViewProxy, который затем реализует LineItemCtnrCalculationResultView. Я вижу, что _delegate защищен, поэтому, если вы замените BasketBOCalculationResultViewExtensionImpl своим собственным классом, который наследует BasketBOCalculationResultViewExtensionImpl, тогда вы сможете получить к нему доступ. - person Willem Evertse; 05.06.2019
comment
Хорошо, спасибо. Итак, мне нужно зарегистрировать новое расширение пользовательских вычислений в BasketBO с компонентной структурой? - person Goran Petanjek; 05.06.2019
comment
Действительно, это то, что вы должны сделать. Однако сейчас я сомневаюсь, что нет более простого решения этой проблемы. Может быть, хорошо, чтобы проверить это с поддержкой. - person Willem Evertse; 05.06.2019
comment
Хорошо, я открыл еще один вопрос только для этого: методы из класса calculateresultview "> stackoverflow.com/questions/56456891/ - person Goran Petanjek; 05.06.2019