FreeMarker ожидает, что такая группировка будет производиться независимо от того, какие переменные установлены, что в данном случае является NetSuite. (Тем не менее, я думаю, что это можно рассматривать как чисто презентационную проблему, и поэтому, возможно, FreeMarker должен справиться с этим в будущем.) Если NetSuite действительно не будет группировать данные для вас, то вы должны сделать это во FreeMarker, что будет быть немного неловким, так как это не настоящий язык программирования ... но здесь он есть.
Определите макрос следующим образом:
<#macro listGroups items groupField>
<#if items?size == 0><#return></#if>
<#local sortedItems = items?sort_by(groupField)>
<#local groupStart = 0>
<#list sortedItems as item>
<#if !item?is_first && item[groupField] != lastItem[groupField]>
<#local groupEnd = item?index>
<#nested lastItem[groupField], sortedItems[groupStart ..< groupEnd]>
<#local groupStart = groupEnd>
</#if>
<#local lastItem = item>
</#list>
<#local groupEnd = sortedItems?size>
<#nested lastItem[groupField], sortedItems[groupStart ..< groupEnd]>
</#macro>
Вы можете использовать этот макрос позже, например так:
<@listGroups record.item "location"; groupName, groupItems>
<p>${groupName}</p>
<table>
<#list groupItems as groupItem>
<tr>
<td>${groupItem.location}</td>
<td>${groupItem.description}</td>
<td>${groupItem.quantity}</td>
<td>${groupItem.rate}</td>
<td>${groupItem.amount}</td>
</tr>
</#list>
</table>
</@listGroups>
Обратите внимание, что groupName
и groupItems
в <@listGroups ...>
являются просто произвольными l oop именами переменных, которые вы указываете, и они не должны совпадать с именами переменных, используемыми в определении #macro
.