【问题标题】:Returning a quantity of 1 for specific items on an invoice with Freemarker使用 Freemarker 为发票上的特定项目返回数量 1
【发布时间】:2019-01-07 07:57:12
【问题描述】:

我在 NetSuite 的高级 PDF/HTML 模板中使用 Freemarker 来生成发票。对于特定的项目类型,我想在发票上显示“1”而不是实际数量。这基于“服务”的项目类别下拉字段选择。我目前的尝试如下。

<#if record.custitem_item_category?string?contains("Services")>
<td align="center" colspan="3" line-height="150%">1</td>
<#else>
<td align="center" colspan="3" line-height="150%">${item.quantity}</td>
</#if>

我尝试使用 ?has_content 验证最初的 #if 语句,但它只是跳到了 #else 语句,所以我认为我在那里遗漏了一些东西。

【问题讨论】:

    标签: netsuite freemarker


    【解决方案1】:

    从字段名称custitem_xx 看来,您正在尝试访问自定义项目字段。这里有两个问题。首先,您需要从每一行读取值(即它应该是 item.item.custitem_item_category 而不是 record.custitem_item_category。但另外(除非它最近已修复),在 NetSuite 中这样做只会返回子列表第一行的值单个订单项。

    您需要做的是创建一个自定义交易行字段并从项目中获取值,然后您可以像item.custcol_item_category 一样访问它。

    [当您创建自定义字段时,取消选中 Store Value 以确保它始终以最新值采购,并确保在表单上的 Screen Fields 下选中它以显示在 UI 中 - 否则它不可用到您的模板。如果您确实想在 UI 中隐藏它,您可以将标签空白。]

    【讨论】:

    • 这解决了这个问题。您对 item.item.custitem_item_category 只是返回子列表中第一行的值是正确的,因此创建了自定义交易行字段并按说明进行了来源。
    【解决方案2】:

    您的 if 语句看起来是正确的,这意味着 record.custitem_item_category?string?contains("Services") 没有返回您认为的值。通常,您只会在数字上使用?string 将其转换为字符串,如果它已经是字符串,则这是不必要的。

    试着在每一行打印出${record.custitem_item_category},看看你会得到什么结果。如果其中一些包含“服务”,那么在 if 语句中使用 record.custitem_item_category?contains("Services") 应该没问题。

    【讨论】:

    • 谢谢乔恩。我尝试打印出 ${record.custitem_item_category} 并没有得到任何结果,所以看起来这至少是问题的一部分。
    • 就像 michoel 提到的,这个字段是销售订单上的正文字段,还是行项目上的项目字段?如果它是一个行字段,您应该会看到类似&lt;#list record.item as item&gt; 的内容,它开始您的项目列表。然后要访问项目列表上的字段,您可以在列表中使用${item.description},或者在您的情况下使用${item.item.custitem_item_category}(这是您可以从项目记录中获取字段的方式)。
    【解决方案3】:

    下面的东西有效...

    (这里可以设置1)

    (这里可以设置2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 2015-10-19
      相关资源
      最近更新 更多