Netsuite 高级 PDF/HTML 模板的脚本问题
Posted
技术标签:
【中文标题】Netsuite 高级 PDF/HTML 模板的脚本问题【英文标题】:Scripting Issue with Netsuite Advanced PDF/HTML Template 【发布时间】:2017-02-19 16:27:34 【问题描述】:我需要有关 Netsuite 的 Freemarker 格式的帮助(高级 PDF/html 模板)
为此记录提取了 3 个重要的数据值;
$item.quantity *Order Value*
$item.fulfilled *Fulfilled Value*
$item.backordered *Backorder Value*
基本上,我试图完成的是,只显示“延期交货”的项目
但是,这项任务似乎比我的时间和技能要困难得多。
所以,我的 B 计划正在为延期交货使用单独的模板(到目前为止效果很好!)
问题是,如果我遇到一个 NON-INVENTORY 项目,Netsuite 不会计算 $item.backordered
的任何数量
所以
有什么方法可以通过模板中的脚本“计算”延期交货值? 我可以使用算术函数(如下所示)吗?
item.quantity - item.fulfilled = item.backordered
这是围绕此查询的文本的基本格式;
<#if record.item?has_content>
<table><#list record.item as item><#if item_index==0>
<thead>
<tr>
<th> QTY </th>
</tr>
</thead>
</#if>
<tr>
<td> $item.backordered </td>
</tr>
</#list></table>
</#if>
我对 HTML 和 CSS 有基本的了解,但脚本对我来说还是很陌生,所以请只提出建设性的批评。
【问题讨论】:
你在打印什么文件? 嗨@bknights 我正在尝试打印“拣货单” 【参考方案1】:尝试将以下 Freemarker 辅助函数添加到您的模板中:
<#function toNumber val>
<#if val?has_content && val?length gt 0 >
<#return val?html?replace('[^0-9.]','','r')?number >
<#else>
<#return 0 >
</#if>
</#function>
这将确保所有字段都被正确解析为数字,并且您应该能够对字段执行数学计算而不会出错。
所以你可以替换:
<td> $item.backordered </td>
与:
<td> $toNumber(item.quantity) - toNumber(item.fulfilled) </td>
【讨论】:
正是我需要的,谢谢@michoel!完美运行 但是我刚刚注意到,当项目恰好完成一半时 但是,我刚刚注意到,当商品恰好完成了一半(即订购了 10,完成了 5,延期交货 5)时,该函数返回订单数量 (10) @michoel @SimonG 这很奇怪。对于故障排除,您可以尝试输出以下表达式以查看问题所在:$item.quantity
、$toNumber(item.quantity)
、$item.fulfilled
、$toNumber(item.fulfilled)
?【参考方案2】:
请参阅suitescript set custom column value netsuite 的答案,了解对订单项值使用算术运算的示例。
【讨论】:
感谢@bknights 我尝试将该示例代码插入到我的模板中,只是为了看看它是如何工作的。但是它一直给我错误,所以我将不得不花一些时间来重新构建它,以使其适合我的需要。【参考方案3】:所以我认为根本问题在于 NetSuite 正在使用的 Java JAR。它似乎有一个空指针错误,带有空的 int/number 类型值。
我建议添加一个 UserEvent 脚本以将空值更改为零。这将防止您遇到的错误。您应该能够在加载前事件中捕获 PRINT 类型。如果零值没有传递到模板中,您可以添加一个未存储的自定义列字段并将值推送到那里。
【讨论】:
以上是关于Netsuite 高级 PDF/HTML 模板的脚本问题的主要内容,如果未能解决你的问题,请参考以下文章
NetSuite:如何使用高级 PDF/HTML 模板在分组发票中引用自定义字段
如何使用高级 PDF/HTML 模板工具在 NetSuite 保存的搜索中打印多个公式字段?
在 NetSuite 中,如何在高级 PDF/HTML 模板中打印相关记录