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

How to call custom methods from CalculationResultView class

我们使用自定义方法实现了自定义计算视图 class,例如"getMonthlyDiscount"、"getMonthlyPrice"等,用组件框架注册到BasketBOCalculationResultViewExtensionFactory。问题是我们无法找到有关如何调用这些方法以获得计算结果的信息。

通过调用 "basketbo.getExtension(BasketBOCalculationResultViewExtension.class)" 我们得到 "BasketBOCalculationResultViewExtensionImpl",所以只有 "LineItemCtnrCalculationResultViewProxy" 中定义的方法可用,而不是我们自定义的方法。

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

感谢您的回答! 亲切的问候

我看到魔法发生在这个例子中:

<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

除了威廉的回答:

如果您使用的是 >= 7.10.8.0 的 ICM 版本,您应该能够通过以下方式检索您的 TutorialCalculationResultView

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

如果您使用的是 7.10.8.0 之前的版本并且有 Intershop 支持合同,您可以随时尝试询问 Intershop 技术支持是否可以向下移植此功能。

或者,如果您 TutorialCalculationResultView 中的自定义方法很简单,并且只传递关联 CalculationRuleSet 的值,那么您也可以使用 [=15] 中的以下方法之一=] 直接取值:

// returns a single item from the group
ComputedItem getComputedItem(String group, String id);
// returns the whole group
Collection<ComputedItem> getComputedItems(String group);