如何从CalculationResultView类调用自定义方法

时间:2019-06-05 08:34:46

标签: calculation intershop

我们使用自定义方法(例如)实现了自定义计算视图类“ getMonthlyDiscount”,“ getMonthlyPrice”等,并使用组件框架将其注册到BasketBOCalculationResultViewExtensionFactory。问题是我们无法找到有关如何调用这些方法以获取计算结果的信息。

通过调用“ basketbo.getExtension(BasketBOCalculationResultViewExtension.class)”,我们得到“ BasketBOCalculationResultViewExtensionImpl”,因此仅在“ LineItemCtnrCalculationResultViewProxy”中定义的方法可用,而我们的自定义项不可用。

同一示例可以应用于如何从此处给出的TutorialCalculationResultView中调用方法“ getDuties”的问题:https://support.intershop.com/kb/index.php/Display/23V395#Cookbook-BasketCalculation-Recipe:TheResultView

谢谢您的回答! 问候

2 个答案:

答案 0 :(得分:1)

我发现魔术发生在这种情况下:

<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,并且您必须覆盖方法addAssignmentcreateExtension

答案 1 :(得分:1)

除了威廉姆斯的答案:

如果您使用的是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);