Netsuite Advanced PDF/HTML 模板的脚本问题

Scripting Issue with Netsuite Advanced PDF/HTML Template

我需要有关 Netsuite 的 Freemarker 格式的帮助(高级 PDF/HTML 模板

此记录有 3 个重要数据值;

${item.quantity}     *Order Value*
${item.fulfilled}    *Fulfilled Value*
${item.backordered}  *Backorder Value*

基本上,我试图完成的是只显示“延期交货”的项目

然而,这项任务似乎比我有时间和技能要难得多。

因此,我的计划 B 正在为延期交货使用单独的模板 (到目前为止效果很好!)

问题是,如果我遇到一个 非库存 项目,Netsuite 不会计算 ${item.backordered}

的任何数量

所以

有什么方法可以 "calculate" 在模板中使用脚本编写延期交货值吗?
我可以使用算术函数(如下所示)吗?

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有基本的了解,但脚本对我来说还是很新的,所以请只提出建设性的批评。

请参阅 suitescript set custom column value netsuite 的答案以获取对订单项值使用算术的示例。

所以我认为根本问题在于 NetSuite 正在使用的 Java JAR。它似乎有一个空指针错误,int/number 类型值为空。

我建议添加一个 UserEvent 脚本来将空值更改为零。这将防止你得到的错误。您应该能够在加载前事件中捕获 PRINT 类型。如果零值未转移到模板,您可以添加未存储的自定义列字段并将值推送到那里。

尝试将以下 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>