NetSuite发票打印触发FTL模板record.duedate报错问题咨询
NetSuite发票打印模板FTL报错解决方案
报错说明
模板第242行第51列报错:
Expected a method, but this has evaluated to a string,失败代码:${record.duedate?string("dd MMM yyyy")}
模板第285行第73列报错:同上,为同一类语法错误
报错形成原因
该错误属于FreeMarker(FTL)模板的类型不匹配错误:
- FTL的
?string()是类型格式化内置方法,仅能作用于日期、数字类型的变量,作用是将非字符串类型变量按照指定格式转换为字符串 - 当前
record.duedate(发票到期日字段)的返回值已经是字符串类型,不存在?string()方法可供调用,因此触发类型错误提示 - 常见触发场景:自定义字段替换了标准duedate返回值、后台脚本提前将日期转为了字符串、模板关联的保存搜索将字段返回类型强制设为字符串
访问模板及修复步骤
- 登录持有「高级PDF/HTML模板编辑权限」的NetSuite管理员账号
- 进入模板管理页:导航栏依次点击设置 > PDF/HTML模板 > 高级PDF/HTML模板,在列表中找到当前发票绑定的打印模板,若不清楚绑定的模板名称,可打开任意发票编辑页,切换到「打印」标签页查看当前生效的模板名
- 点击模板右侧的编辑按钮进入代码编辑界面,按行号定位到242、285行的报错代码
- 根据实际场景二选一修改代码:
- 若需要保留日期格式转换逻辑:先将字符串转回日期类型再格式化,示例:
${record.duedate?date("yyyy-MM-dd")?string("dd MMM yyyy")},注意?date()内的格式要和当前record.duedate返回的字符串格式完全匹配 - 若当前
record.duedate返回的字符串已经符合打印要求:直接删除格式化方法,修改为${record.duedate}即可
- 若需要保留日期格式转换逻辑:先将字符串转回日期类型再格式化,示例:
- 保存模板后测试打印发票,确认无报错即修复完成
内容的提问来源于stack exchange,提问作者Artur
相关产品推荐
相关产品推荐

