Saved Search Export to File Cabinet:N/task 1 功能介紹

想像一下,今天你是位開發人員,收到一個需求,現在有一個外部系統會每天到 NetSuite(NS) 裡面抓資料,為了方便資料傳輸,需要每天將一個 Saved Search(SS) 的結果轉換成 *.CSV 檔案,並且存在 NS 的 File Cabinet。 當接到這個需求之後,你會怎麼做呢?以下分享 3 種做法。推薦使用第 3 種 N/task 的做法。

1. 使用者每天登入 NetSuite
2. 找到 Saved Search
3. 執行 Saved Search
4. Export 成 CSV,再上傳到 NetSuite

Inzaghi, 英薩吉, NetSuite基本介紹, Schedule, Saved Search Export
5. 把這個 Saved Search 加入快捷列,減少下一次使用者找 Saved Search 的時間

Inzaghi, 英薩吉, NetSuite基本介紹, Schedule, Saved Search Export

Inzaghi, 英薩吉, NetSuite基本介紹, Schedule, Saved Search Export

作法 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 呈現報表的行序號 

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