如何在NetSuite FreeMarker高级PDF/HTML模板中获取交易商品明细
问题根因
- 你在商品行循环逻辑中,获取
itemid和itemimage两个变量时,错误引用了全局的record.item.item对象,该调用默认只会返回销售订单商品子列表的第一行商品主数据,不会跟随循环变量更新。 - 代码中你已经能正确通过
line.xxx获取当前行的其他字段,仅两个赋值语句未使用当前循环的line对象,才会出现所有行重复展示第一行图片的问题。
修复方案
将循环内的两行变量赋值逻辑修改为从当前循环行line中读取商品关联数据:
<!-- 替换原来的assign语句 --> <#assign itemid = line.item> <#assign itemimage = line.item.custitem_atlas_item_image>
可选优化:为了避免部分商品未上传图片时模板渲染报错,可以补充非空判断逻辑
<td colspan="5" align="center"> --${itemid}-${itemimage}-${line.item} <#if itemimage?has_content> <@filecabinet nstype="image" alt="" src="${itemimage}" style="float: left; width: 50px; height:100px" /> <#else> <span>暂无商品图</span> </#if> </td>
完整修正后的代码片段
<#if record.item?has_content> <table class="itemtable" style="width: 100%; margin-top: 10px;"> <!-- start lines --> <#list record.item as line> <#if line_index==0> <thead> <tr> <th colspan="5"></th> <th colspan="8">Commercial Reference</th> <th colspan="11">${line.description@label}</th> <th colspan="2" align="center">Size</th> <th align="center" colspan="3">${line.quantity@label}</th> <th align="right" colspan="4">${line.rate@label}</th> <th align="right" colspan="4">${line.amount@label}</th> </tr> </thead> </#if> <tr> <#assign itemid = line.item> <#assign itemimage = line.item.custitem_atlas_item_image> <td colspan="5" align="center">--${itemid}-${itemimage}-${line.item} <#if itemimage?has_content> <@filecabinet nstype="image" alt="" src="${itemimage}" style="float: left; width: 50px; height:100px" /> </#if> </td> <td colspan="8"><span class="itemname">${line.custcol_noda_style}</span></td> <td colspan="11">${line.custcol_noda_description}</td> <td colspan="2">${line.custcol_noda_size}</td> <td align="center" colspan="3" line-height="150%">${line.quantity}</td> <td align="right" colspan="4">${line.rate}</td> <td align="right" colspan="4">${line.amount}</td> </tr> </#list><!-- end lines --></table> <hr /></#if>
内容的提问来源于stack exchange,提问作者Komagain
相关产品推荐
相关产品推荐

