Xml 在Freemarker中使用NetSuite日期
我一直在努力尝试在NetSuite中的声明高级PDF模板中添加“开放天数”列和“过期天数”列。但是,在处理从NetSuite记录中获取的日期值时,我一直遇到问题。试图操纵日期值会导致未指定的错误。我有点困惑,我现在是否能做到这一点 例如,如果我将以下内容应用于模板,则可以对输入到模板中的任何日期和日期/时间值进行格式化:Xml 在Freemarker中使用NetSuite日期,xml,netsuite,freemarker,bfo,Xml,Netsuite,Freemarker,Bfo,我一直在努力尝试在NetSuite中的声明高级PDF模板中添加“开放天数”列和“过期天数”列。但是,在处理从NetSuite记录中获取的日期值时,我一直遇到问题。试图操纵日期值会导致未指定的错误。我有点困惑,我现在是否能做到这一点 例如,如果我将以下内容应用于模板,则可以对输入到模板中的任何日期和日期/时间值进行格式化: <#setting date_format="dd-MM-yyyy"> <#setting datetime_format="dd-MM-yyyy hh:mm
<#setting date_format="dd-MM-yyyy">
<#setting datetime_format="dd-MM-yyyy hh:mm a">
但是,如果我尝试将这些值用作日期/日期时间对象,则会出现错误。因此,尝试执行以下操作失败:
<#assign d2 = line.duedate?long>
虽然这样做有效:
<#assign d1 = .now?date?long>
此外,尝试假定值实际上是传入的字符串,并且转换为日期/日期时间也会失败。执行以下操作会导致错误:
<#assign d2 = line.datecol?date("M/d/yyyy")> // format used by default in NetSuite date output
//NetSuite日期输出中默认使用的格式
另一件毫无意义的事情是对照到期日进行检查,并仅在有到期日时显示值(防止实际不是发票的对账单条目显示数据)。因此,即使在已完成的PDF中设置并显示了截止日期,以下内容也无法显示正确的结果:
<#if line.duedate?has_content>${daysoverdue}<#else>empty</#if>
${daysoferdue}空
它不会显示过期值(此时只是用于测试的静态值),而是显示“空”。无论到期日值是否可用,每行的整个列都将显示为字段为空。所以,我不知道这是否相关
我已经研究了一段时间,到目前为止,haaven还没有找到任何有用的搜索方法。这里有一些事情:
line.duedate
并不总是具有有效的日期值-即:当该行是贷方备忘时,没有适用的到期日期。在这种情况下,尝试将line.duedate?long
赋值给变量将导致错误。为了避免这种情况,您可以先检查以确保它是有效的?has_content
并不像您所期望的那样适用于此。很难确定这到底是什么原因,但Freemarker文档中有一条线索可以解释这可能是什么原因(重点补充):line.datecol?日期(“M/d/yyyy”)
将不起作用,因为Freemarker将datecol
,如duedate
识别为date\u like
——而不是字符串。其中为空,duedate
被识别为字符串,但当然与格式不匹配,为空daysoverdue
在语句的数据模型中似乎不可用,但是可以进行计算<#if line.duedate?is_date_like>
<#assign d2 = line.duedate?long>
<#assign daysoverdue = ((.now?date?long - d2) / (24*60*60*1000))?floor>
<#else>
<#assign d2 = "">
<#assign daysoverdue = "">
</#if>
然后可以在其中一列中使用${daysoferdue}
。您可以按照类似的过程计算和显示开放日。我需要的是“is_date_like”,谢谢。我在文档中没有看到这一点。