在 NetSuite 中,user 幾乎可以將各式各樣的符號與字段放入 Record Type 的文字欄位,例如 NAME、MEMO 欄位。
若我們在 NAME 欄位中放入特殊字符,在下載檔案打開後,會發現 NetSuite 已經有幫我們做處理,會在 CSV 檔案中該欄位字段開頭與結尾處添加雙引號(“”),以保證檔案正常下載與順利從 Excel 中讀取。但如果提供具有特殊字符的 CSV 文件供資料交換,可能會造成有些系統無法正常正讀取。
此篇探討 CSV 文件需要避免的符號、如何用 Saved Search(SS)配合 REPLACE Function 處理上述問題。
首先,盡量在系統中避免使用特殊字符造成 CSV 匯出後續問題
#1 不管任何的系統,對 CSV 或其他類型的檔案處理內容時,都需要避免特定特殊符號、數字或字母。若資料源就能避免這類的問題,後續較不會出現資料格式錯誤或解析問題的。
#2 CSV 需要避免的符號大致上有:", ', :, |, *, &, ^, %, $, #, @, ;, {, }, (, ), [, ], !, -, =, >, <, ,, ., , /
#3 若使用特殊字符,NetSuite 產生的 CSV 會用雙引號(“”)包覆內容,所以下載的檔案是沒有問題。但有些系統只要 CSV 檔案內有特殊字符,匯入時就會失敗。所以在上傳時,盡量也要檢查檔案內容。
若要解決#3 的問題,我們可以從 SS 匯出前著手進行。
如何使用 Saved Search 公式刪除特殊字符
使用 REPLACE Function
REPLACE 的公式原廠文件解釋如下:
REPLACE(char, search_string[, replacement_string ])
returns char with every occurrence of search_string replaced with replacement_string
REPLACE 的範例
#1 為要下載內容的 Record Type 建立一個 SS,欄位包含 NAME
#2 在 SS-Results 的分頁中新增一個 Formula(Text)欄位
#3 輸入 Formula (參考以下灰色區域),此公式的意思是:用空白來取代可能會造成檔案上傳下載錯誤的特殊符號,例如:“, ‘, :, |, *, &, ^, %, $, #, @, ;, {, }, (, ), [, ], !, -, =, >, <, ,, ., , /
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE({name},'"',''),
':',''),'''',''),'|',''),'*',''),'&',''),
'^',''),'%',''),'$',''),
'#',''),'@',''),';',''),
'{',''),'}',''),'[',''),']',''),'!',''),'(',''),
')',''),'-',''),'=',''),
'>',''),'<',''),',',''),'.',''),'\',''),'/','') #4 其中最裡面那一層的 REPLACE({name},'”‘,”),’:’,”)的解釋為:
{name}為這 name 這個欄位的 ID,若在 SS 中要顯示內容,則以{name}表示。其中{name}的內容有包含’“‘,皆替換為’(空)‘。
後續這個公式在執行的是:REPLACE 功能的輸出將變為下一個 REPLACE 功能的輸入,直到最外層的 REPLACE 功能。
#5 成果如下,之後再匯出 CSV 格式
使用 REGEXP_REPLACE Function
REGEXP_
REGEXP_
REPLACE(source_char, pattern[, replace_string[, position[, occurrence[, match_parameter ]]]]) lets you replace a sequence of characters (source_char) that matches a regular expression pattern with another set of characters (replace_string)
REGEXP_REPLACE 的範例
#1 接續用上個範例
#2 在 SS-Results 的分頁中新增一個 Formula(Text)欄位
#3 輸入 Formula (參考下方),此公式的意思:是將替換所有不是 0~9, A~Z, a~z, (空格)的內容為空。
REGEXP_REPLACE({name}, '[^0-9A-Za-z ]', '') #4 若{name} 為 :此為測試 ()name with special,"@! character,加入上述 formula 後,結果為:name with special character。
總結
REPLACE 與 REGEXP_REPLACE 公式在 NetSuite 中很常使用,除了上述說的文字欄位外,還有很多可以運用。在 NetSuite 中 SQL/公式用法跟資料庫 SQL 用法都有異曲同工之妙,若想多了解,請參考:SQL Server REPLACE() Function。
如果這篇文章對你有幫助,歡迎到本司的 Linkedin 按讚,接下來才不會錯過任何一篇教學喔!
專注於系統客製化、系統維運與系統優化領域的團隊。致力於讓使用者系統變好用!
NetSuite Record Export 已在Google Chrome Web Store上架,歡迎任何反饋。
合作: info@inzaghi-corp.com
