如何访问单个计算产品行项目的所有子组计算项目
How to acces all SubGroup computed items for a single computed product line item
我的规则集中有两个自定义计算规则,一个用于单个 PLI 价格,一个用于总计:
在“calculatePostpaidPrices”中,我创建了多个 ComputedDurationItems(自定义定义 class),它们作为子组存储在单个 ComputedProductLineItem 上。
这种关系可以在这里观察到:
现在在第二条规则“calculatePostpaidTotals”(左侧)中,我试图从第一条规则中获取单个 PLI 的所有持续时间项目,现在该怎么做(右侧是计算结果视图)效果很好):
请注意,子组与本食谱中职责子组的配方相同:
https://support.intershop.com/kb/index.php/Display/23V395#l100
但是本食谱中没有示例如何在下一个计算规则中检索职责(子组)。
看了一些内置的平台计算规则后,我不得不创建这个方法:
private Map<ComputedProductLineItem, Collection<ComputedDurationItem>> mapDurationItemsToComputedPLIs(
CalculationRule<ComputedItem, ComputedItem, LineItemCtnr>.Input input) {
Map<ComputedProductLineItem, Collection<ComputedDurationItem>> durationsMap = new HashMap<>();
Collection<ComputedDurationItem> durationItems = input.getItems(durationsSubGroup);
for (ComputedDurationItem durationItem : durationItems) {
ComputedProductLineItem parentPLI = input.getItem(this.durationsSubGroup.getParentCell(durationItem));
if (!durationsMap.containsKey(parentPLI))
durationsMap.put(parentPLI, new ArrayList<ComputedDurationItem>(1));
durationsMap.get(parentPLI).add(durationItem);
}
return durationsMap;
}
然后我使用创建的地图仅获取特定 PLI 的持续时间项目。
基本上这里的情况是您无法获得 PLI 的“子”项目,但您可以获得 DurationItem 的父项目或子组中的任何其他项目并在此方法中使用。
我的规则集中有两个自定义计算规则,一个用于单个 PLI 价格,一个用于总计:
在“calculatePostpaidPrices”中,我创建了多个 ComputedDurationItems(自定义定义 class),它们作为子组存储在单个 ComputedProductLineItem 上。
这种关系可以在这里观察到:
现在在第二条规则“calculatePostpaidTotals”(左侧)中,我试图从第一条规则中获取单个 PLI 的所有持续时间项目,现在该怎么做(右侧是计算结果视图)效果很好):
请注意,子组与本食谱中职责子组的配方相同: https://support.intershop.com/kb/index.php/Display/23V395#l100 但是本食谱中没有示例如何在下一个计算规则中检索职责(子组)。
看了一些内置的平台计算规则后,我不得不创建这个方法:
private Map<ComputedProductLineItem, Collection<ComputedDurationItem>> mapDurationItemsToComputedPLIs(
CalculationRule<ComputedItem, ComputedItem, LineItemCtnr>.Input input) {
Map<ComputedProductLineItem, Collection<ComputedDurationItem>> durationsMap = new HashMap<>();
Collection<ComputedDurationItem> durationItems = input.getItems(durationsSubGroup);
for (ComputedDurationItem durationItem : durationItems) {
ComputedProductLineItem parentPLI = input.getItem(this.durationsSubGroup.getParentCell(durationItem));
if (!durationsMap.containsKey(parentPLI))
durationsMap.put(parentPLI, new ArrayList<ComputedDurationItem>(1));
durationsMap.get(parentPLI).add(durationItem);
}
return durationsMap;
}
然后我使用创建的地图仅获取特定 PLI 的持续时间项目。 基本上这里的情况是您无法获得 PLI 的“子”项目,但您可以获得 DurationItem 的父项目或子组中的任何其他项目并在此方法中使用。