N/task 的做法。
Table of Contents
作法 1:使用者手動
1. 使用者每天登入 NetSuite
2. 找到 Saved Search
3. 執行 Saved Search
4. Export 成 CSV,再上傳到 NetSuite

5. 把這個 Saved Search 加入快捷列,減少下一次使用者找 Saved Search 的時間


作法 2:寫一個 Map/Reduce 的 Script
Map/Reduce 可以處理大量的資料。設計邏輯如下:
1. GetInputDate: return serch.load()
2. Map/Reduce: 組合並產生一個 *.csv
3. Summary: 將這個 CSV 存到 NetSuite 的 File Cabinet
以上做法沒有不好,但是開發要花多久時間呢?4 小時、8 小時,甚至更多。
那有沒有更簡易的辦法?
作法 3:使用 N/task 模組
N/task 這個模組,一般來說會用在執行 Map/Reduce、Schedule Script ,或其他耗時操作上。 但裡面有一個 type 正好非常適合我們要達到的目的!
N/task 模組介紹
透過 N/task 模組來建立任務, 並將它們放入 NetSuite 內部的排程或任務佇列中。
以利用這個模組來建立以下幾種類型的任務:
- 提交排程腳本
- 執行 Map/Reduce 腳本
- 匯入/出 CSV 檔案
- 合併重複的記錄
- 執行非同步搜尋、結構化查詢、SuiteQL 查詢,以及工作流程
每個任務都是一種特定的任務類型(task.TaskType),而每種任務類型都有對應的物件類型。使用各物件類型可用的方法來配置、提交並監控這些任務。
task.SearchTask 介紹
看過 N/task 這個模組介紹之後, 我們可以發現他有一個匯出 CSV 檔案的功能正好是我們需要的,並且這邊提供了一個 task.SearchTask 的任務類型。讓我們來看一下這個任務類型的介紹:
您可以將搜尋任務提交到任務佇列,非同步執行,並保存搜尋結果。類似 SuiteAnalytics 的搜尋保存功能。
使用 task.SearchTask 物件可以執行以下操作:
- 使用
SearchTask.savedSearchId屬性來設置 Saved Search ID - 設定在 File Cabinet 中的 CSV 檔案的檔案 ID 或檔案路徑,搜尋結果將匯出至此檔案。可以使用
SearchTask.fileId屬性或SearchTask.filePath屬性。這兩個屬性中只能設定其中一個,若同時設定,將會發生錯誤 - 使用
SearchTask.addInboundDependency()為搜尋任務新增相依腳本。當搜尋任務完成後,相依腳本將自動處理 - 使用
SearchTask.submit()將搜尋任務提交到 NetSuite 任務佇列 - 使用
task.SearchTaskStatus物件的屬性來取得搜尋任務的狀態
實作
看完以上介紹之後,便可以來實作這個功能。
1. 建立一個 Schedule Script
2. 設定 Script Parameter:a. Saved Search ID,b. File Cabinet CSV ID
3. 撰寫 Script
/**
* @NApiVersion 2.1
* @NScriptType ScheduledScript
*/
define(['N/task', 'N/runtime'], (task, runtime) => {
/**
* Defines the Scheduled script trigger point.
* @param {Object} scriptContext
* @param {string} scriptContext.type - Script execution context. Use values from the scriptContext.InvocationType enum.
*/
const execute = (scriptContext) => {
const script = runtime.getCurrentScript();
const FILE_ID = script.getParameter({ name: 'custscript_file_id' });
const SEARCH_ID = script.getParameter({ name: 'custscript_ss_id' });
const searchTask = task.create({
taskType: task.TaskType.SEARCH
});
searchTask.savedSearchId = SEARCH_ID;
searchTask.fileId = FILE_ID;
searchTask.submit();
}
return { execute }
}); 4. 設定 Schedule script 執行的時間
5. 執行程式,Saved Search Export to File Cabinet
結語
Saved Search Export to File Cabinet 本篇文章介紹了 3 種方式,分別是使用者手動執行、Map/Reduce Script、Schedule Script 配合 N/task ,若不考慮其他因素,依照開發效益來說,第三種使用 N/task 是 3 種方法中最佳解法。
更多 SS 相關文章:Saved Search 新增 1 欄 ROWNUM 呈現報表的行序號
專注於系統客製化、系統維運與系統優化領域的團隊。致力於讓使用者系統變好用!
NetSuite Record Export 已在Google Chrome Web Store上架,歡迎任何反饋。
合作: info@inzaghi-corp.com
