如何访问单个计算产品行项目的所有子组计算项目

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 的父项目或子组中的任何其他项目并在此方法中使用。