Table of Contents
Advanced PDF 簡介
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 template。這些 template 會 applied 到不同的 record type 上面,像是 bill、 bill credit、 bill payment、customer payment、 statement 等等。

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

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

接下來,我們點選右上角的 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 按讚,接下來才不會錯過任何一篇教學喔!


