【问题标题】:Freemarker Make a copy of a listFreemarker 制作列表的副本
【发布时间】: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 -&gt; item.custcol_ev_package != cPackage) 在 FreeMarker 中的用途,尽管我不确定 NetSuite 分支是否已经拥有它。
  • 另外,在您的示例中,您将项目哈希加在一起。这不是你想要的,它只是创建一个新的合并哈希。例如{'foo': 11, 'bar': 12} + {'foo': 21}{ 'foo': 21, 'bar': 12}
  • &lt;#continue&gt; 不工作是什么意思?在?filter 之前,通常的解决方案是通过使用&lt;#if ...&gt;&lt;#continue&gt;&lt;/#if&gt; 跳过某些项目来不打印某些项目。尽管它仅在您想立即打印(或以其他方式处理)列表时才有用。
  • 德卡尼。谢谢你。 似乎不是 NetSuite 中的有效命令...保存时出错说无法识别。我不能只过滤列表,因为我还需要对具有相同包的项目求和。我希望逐步浏览列表并仅添加我想要保留的记录,然后将新列表用于我的输出。
  • 如果你没有#continue,那么我假设你也没有?filter(Netsuite 真的落后了,因为没有使用普通的 FreeMarker)。但否则我看不出它会如何干扰求和。现在,实际上您可以添加像&lt;#assign listSoFar = listSoFar + [newItemToAdd]&gt; 这样的序列。但它会创建一个 O(N^2) 遍历的列表,所以......你最好只是 #list 并跳过带有 #if 的项目。

标签: list netsuite freemarker


【解决方案1】:

您可以使用序列。见How to remove duplicate elements in a array using freemarker?

所以你的解决方案看起来像:

<#assign seen_group = []>
<#list record.item?sort_by("custcolzab_comp_name","custcolzab_ev_supp_plan","item") as item>
   <#assign cPackage = item.custcol_ev_package>
   <#if seen_group?seq_contains(cPackage)> <!-- no if body is intentional; skips seen style -->
   <#else>
     <#assign seen_group = seen_group + [cPackage]>
     <h2>Do something with ${cPackage}</h2>
     <#list record.item as pkgItem>
        <#if pkgItem.custcol_ev_package == cPackage>
          <p>Package Item: ${pkgItem.item}</p>
        </#if>
     </#list>
   </#if>
</#list>

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 2012-02-13
    • 2018-09-06
    • 2013-04-22
    • 2015-02-22
    • 1970-01-01
    • 2021-09-03
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多