You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetSuite中使用Freemarker复制列表并按Package分组的问题咨询

问题根源

  1. NetSuite 模板上下文中的record.item默认是子列表哈希类型,你直接将其赋值给mylist作为初始值,mylist初始类型就不是标准列表(Sequence)
  2. 你使用mylist + item的拼接逻辑不对,Freemarker 中列表拼接元素需要和列表类型合并,直接加单个哈希对象会让返回结果变为哈希类型

修复方案(原去重逻辑)

初始化空列表作为mylist的初始值,拼接时用单元素列表和原列表合并,同时提前初始化cPackage避免首次判断报错:

<#-- 初始化空列表,确保初始类型为Sequence -->
<#assign mylist = []>
<#-- 初始化cPackage默认值,避免首次判断报变量不存在错误 -->
<#assign cPackage = "">
<#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?is_sequence}验证类型,返回true即为符合要求的列表类型,正常遍历打印即可:

<#list mylist as item>
- ${item.item} | ${item.custcol_ev_package} | ${item.amount}
</#list>

更高效的分组实现

如果你核心需求是按Package字段对Item分组,可以直接用Freemarker内置的?group_by函数,无需手动遍历构建列表:

<#-- 排序后直接按Package字段分组,返回的packageGroups是哈希结构,key为Package值,value为对应Item的列表 -->
<#assign packageGroups = record.item?sort_by("custcolzab_comp_name","custcolzab_ev_supp_plan","item")?group_by("custcol_ev_package")>

<#-- 遍历分组示例 -->
<#list packageGroups?keys as packageName>
### 包名:${packageName}
<#list packageGroups[packageName] as item>
- 商品名:${item.item} | 金额:${item.amount} | 供应商:${item.custcolzab_comp_name}
</#list>
</#list>

内容的提问来源于stack exchange,提问作者Jim Schweder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:09:02