【问题标题】:How to call custom methods from CalculationResultView class如何从 CalculationResultView 类调用自定义方法
【发布时间】:2019-06-05 08:34:46
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: calculation intershop


    【解决方案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);
    

    【讨论】:

    • 是的,我们使用的是 7.10.7.3,但如果最新的 7.10.9.1 可以做到这一点,我们将升级并尝试第一种方法。谢谢,我会尽快将答案标记为已接受。
    【解决方案2】:

    我看到魔法发生在这种情况下:

    <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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多