【发布时间】:2021-11-18 04:11:24
【问题描述】:
在 NetSuite 中使用 Freemarker 进行开发。
我有一张发票上的物品清单……所有具有相同第二个值(包裹)的物品都将被分组。我还没有找到跳过项目的方法( 不起作用),所以我想创建一个列表记录的副本,单步执行它并只添加我想要的那些:
*
<#assign mylist = record.item>
<#list record.item?sort_by("custcolzab_comp_name","custcolzab_ev_supp_plan","item") as item>
<#if item.custcol_ev_package != cPackage>
<#assign mylist = mylist + item>
</#if>
<#assign cPackage = item.custcol_ev_package>
</#list>
*
上述似乎可以工作,mylist 是一个 HASH,虽然 List 会更好。但现在我无法打印我的列表
【问题讨论】:
-
这就是
mylist?filter(item -> item.custcol_ev_package != cPackage)在 FreeMarker 中的用途,尽管我不确定 NetSuite 分支是否已经拥有它。 -
另外,在您的示例中,您将项目哈希加在一起。这不是你想要的,它只是创建一个新的合并哈希。例如
{'foo': 11, 'bar': 12} + {'foo': 21}是{ 'foo': 21, 'bar': 12}。 -
<#continue>不工作是什么意思?在?filter之前,通常的解决方案是通过使用<#if ...><#continue></#if>跳过某些项目来不打印某些项目。尽管它仅在您想立即打印(或以其他方式处理)列表时才有用。 -
德卡尼。谢谢你。 似乎不是 NetSuite 中的有效命令...保存时出错说无法识别。我不能只过滤列表,因为我还需要对具有相同包的项目求和。我希望逐步浏览列表并仅添加我想要保留的记录,然后将新列表用于我的输出。
-
如果你没有
#continue,那么我假设你也没有?filter(Netsuite 真的落后了,因为没有使用普通的 FreeMarker)。但否则我看不出它会如何干扰求和。现在,实际上您可以添加像<#assign listSoFar = listSoFar + [newItemToAdd]>这样的序列。但它会创建一个 O(N^2) 遍历的列表,所以......你最好只是#list并跳过带有#if的项目。
标签: list netsuite freemarker