Как вызывать пользовательские методы из класса CalculationResultView - PullRequest
1 голос
/ 05 июня 2019

Мы реализовали пользовательский класс представления калькуляции с помощью пользовательских методов, например "getMonthlyDiscount", "getMonthlyPrice" и т. д. и зарегистрировал его с каркасом компонента в BasketBOCalculationResultViewExtensionFactory. Проблема в том, что мы не можем найти информацию о том, как вызывать эти методы, чтобы получить вычисленные результаты.

Вызывая «basketbo.getExtension (BasketBOCalculationResultViewExtension.class)», мы получаем «BasketBOCalculationResultViewExtensionImpl», поэтому доступны только методы, определенные в «LineItemCtnrCalculationResultViewProxy», а не наши пользовательские.

Тот же пример можно применить к вопросу о том, как вызвать метод "getDuties" из TutorialCalculationResultView, приведенному здесь: https://support.intershop.com/kb/index.php/Display/23V395#Cookbook-BasketCalculation-Recipe:TheResultView

Спасибо за ваши ответы! С уважением

Ответы [ 2 ]

1 голос
/ 05 июня 2019

В дополнение к ответу Виллема:

Если вы используете версию ICM> = 7.10.8.0, вы сможете получить TutorialCalculationResultView через:

LineItemCtnrCalculationResultViewProxy resultViewProxy = basketBO.getExtension("CalculationResultView");
TutorialCalculationResultView resultView = (TutorialCalculationResultView)resultViewProxy.getDelegate();

Если вы используете версию до 7.10.8.0 и у вас есть контракт на поддержку Intershop, вы всегда можете попробовать обратиться в службу технической поддержки Intershop, если эта функция может быть загружена.

В качестве альтернативы, если пользовательские методы в TutorialCalculationResultView просты и проходят только через значения соответствующего CalculationRuleSet, то вы также можете использовать один из следующих методов из BasketBOCalculationResultViewExtension для непосредственного получения значения:

// returns a single item from the group
ComputedItem getComputedItem(String group, String id);
// returns the whole group
Collection<ComputedItem> getComputedItems(String group);
1 голос
/ 05 июня 2019

Я вижу, что магия происходит в этом случае:

<instance name="BasketBOCalculationResultViewExtensionFactory" 
              with="BasketBOCalculationResultViewExtensionFactoryImpl" > ..</>

Этот BasketBOCalculationResultViewExtensionFactory создает BasketBOCalculationResultViewExtensionImpl экземпляры.Он жестко запрограммирован, поэтому вы, к сожалению, не можете заменить его собственной реализацией.

Таким образом, единственный вариант, который я вижу, это заменить всю фабрику BasketBOCalculationResultViewExtensionFactory.

<implementation name="BasketBOCalculationResultViewExtensionFactoryImpl" 
                implements="BusinessObjectExtensionFactory" 
                class="your.custom.cartridge.MyBasketBOCalculationResultViewExtensionFactory">                  
    <requires name="assignment" contract="CalculationResultViewFactoryAssignment" cardinality="0..n" />
</implementation>   

MyBasketBOCalculationResultViewExtensionFactory может затем расширить BasketBOCalculationResultViewExtensionFactory, и вам придется переопределить методы addAssignmentи createExtension

...