2個最重要的 NetSuite Advanced PDF tag:<#assign> & <#if condition>

NetSuite Advanced PDF/HTML Template 是一個強大的工具。能夠讓使用者根據客戶/自身的需求產生特訂的商業文件,像是:Invoice(發票),Packing Slip(包貨單) 或是 Purchase Order(採購單)等等。這項工具提供的極高的彈性以及可控性,使用者可以透過編輯 Advanced PDF 來增加品牌識別,滿足特殊的需求等,最終產生符合使用者的商業文件。

本篇文章會介紹 2 個最重要的 NetSuite Advanced PDF tag:分別是 <#assign> 以及 <#if></#if>,並且解釋他們的使用情境及限制。

編輯 Advanced PDF

到 NetSuite 中,Customization -> Forms -> Advanced PDF/HTML Template 中選定要開始編輯的 PDF。

advanced pdf guide link

進入後會看到一長串的 Advanced PDF template。這些 template 會 applied 到不同的 record type 上面,像是 bill、 bill credit、 bill payment、customer payment、 statement 等等。

Advanced PDF Template list

找到需要編輯的 record type 之後, 點選畫面左邊的 Customize, NetSuite 會自動帶你到 UI 介面,在這個介面提供了視覺化的編輯功能。

NetSuite Advanced PDF 視覺化編輯功能

點選最左邊的 “+” 號圖示, 可以列出所有在這個 record type 中可用的參數。

Advanced PDF 可用參數

接下來,我們點選右上角的 source code,進入程式碼編輯的畫面,我們就可以開始透過程式碼來編輯,產生 Advanced PDF 了。

Advanced PDF 中的一些常用 tag

NetSuite Advanced PDF 中是用 JAVA 的 PDF template engine FreeMarker 來實現。 在客製化的過程中,根據使用者情況的不同,會依照不同的使用情況去做客製化。接下來我會介紹幾種常見 FreeMarker tag。

<#assign>

    <#assign test = 1>
    <#assign tempStr = "tempStr">

<#assign> 主要是用來設定一個變數, 這些變數可以用來暫存資訊或是控制資料的顯示。

在使用 <#assign> 標籤時,我們也可以對<#assign>進行計算:

    <#assign subtotal = 0>
    <#assign taxAmount = 0.08>
    <#assign total = subtotal + taxAmount>
    Total: ${total?string.currency}

上面這段程式碼,最終會產生出 Total: 0.08,這雖然是一個簡單的範例,但足以顯示出<#assign> 這個標籤的泛用性。

If, Else, ElseIf 與 邏輯運算子

    <#if condition>
       ...
    <#elseif condition>
       ...
    <#else>
       ...
    <#/if>

當我們需要透過資料內容,來決定是否顯示 PDF 內的某些內容時,我們就可以透過 <#if> <#else> </#if> 的方式來實現. 在 <#if> 中,可以包含任何數量的 <#elseif> 用以達到最佳的顯示成果。

注意:在上述的範例中 condition必須是回傳布林值(boolean),如果回傳的不是布林值, 會出現錯誤。

    <#assign description = "Invoice">
    <#if description?contains("Invoice")>
    It is invoice.
    <#else>
    It is not invoice.
    <#/if>

上面的範例是一個簡單的範例, 最終的結果會印出 It is invoice. 值得注意的是,在 condition 的地方使用了 ?contians 這是用來表示, description 中是否包含Invoice這個字串。如果我們將 Invoice 改為 Inv:

    <#assign description = "Invoice">
    <#if description?contains("Inv")>
    It is invoice.
    <#else>
    It is not invoice.
    <#/if>

這段程式碼仍然會印出 It is invoice字串。

接下來是一個特例:

    <#assign total = 10>
    <#if total >= 10>
    total is greater than 10.
    <#else>
    total is less than 10.
    <#/if>

在上面的範例中,我們想要印出 total is greater than 10 但事實上我們會得到一個錯誤,原因為在 <#if total >= 10> 的地方,FreeMarker 沒辦法區分 >= 。在這種情況下,我們需要用特殊的邏輯運算子來判斷。

  • 大於,gt
  • 大於等於,gte
  • 小於, lt
  • 小於等於, lte

如此,我們可以改寫剛剛的範例:

    <#assign total = 10>
    <#if total gte 10>
    total is greater than 10.
    <#else>
    total is less than 10.
    <#/if>

這樣就會正確的顯示total is greater than 10 字串。

最後,如果我們將 <#if total gte 10> 改成 <#if (total >= 10)> 會發生什麼事呢?

    <#assign total = 10>
    <#if (total >= 10)>
    total is greater than 10.
    <#else>
    total is less than 10.
    <#/if>

再加上括號後,這段程式碼可以順利的執行!這是因為 FreeMarker 的計算順序的緣故。

所以這邊提供了數值比對的兩種方法,一種是使用邏輯運算子, 一種是加上括號!

總結

今天介紹了兩個很常被使用到的 Advanced PDF tag,分別是 <#assign> 以及 <#if></#if>。有了這兩個工具之後,基本上有 70% 以上的客製化是從這邊演化過來的。

如果這篇文章對你有幫助,歡迎到本司的 Linkedin 按讚,接下來才不會錯過任何一篇教學喔!

分享英薩吉的這篇內容
返回頂端