我们使用自定义方法(例如)实现了自定义计算视图类“ getMonthlyDiscount”,“ getMonthlyPrice”等,并使用组件框架将其注册到BasketBOCalculationResultViewExtensionFactory。问题是我们无法找到有关如何调用这些方法以获取计算结果的信息。
通过调用“ basketbo.getExtension(BasketBOCalculationResultViewExtension.class)”,我们得到“ BasketBOCalculationResultViewExtensionImpl”,因此仅在“ LineItemCtnrCalculationResultViewProxy”中定义的方法可用,而我们的自定义项不可用。
同一示例可以应用于如何从此处给出的TutorialCalculationResultView中调用方法“ getDuties”的问题:https://support.intershop.com/kb/index.php/Display/23V395#Cookbook-BasketCalculation-Recipe:TheResultView
谢谢您的回答! 问候
答案 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
,并且您必须覆盖方法addAssignment
和createExtension
答案 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);