如何从 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
并且您必须覆盖方法 addAssignment
和 createExtension
除了威廉的回答:
如果您使用的是 >= 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);
我们使用自定义方法实现了自定义计算视图 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
并且您必须覆盖方法 addAssignment
和 createExtension
除了威廉的回答:
如果您使用的是 >= 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);