计划 SuiteScript 从文件柜加载 CSV,并将保存的搜索结果附加到 CSV 并保存

问题描述 投票:0回答:1

我正在尝试使用保存的搜索结果(每周一次)创建历史 csv 备份(附加而不是覆盖)到我们的文件柜。

我知道可以将保存的搜索结果写入 CSV(使用任务),但我不确定如何附加(也许使用 file.appendline?)。这是我想出的结果,附加数据是“task.SearchTask”而不是保存的搜索结果:

/**
 * @NApiVersion 2.1
 * @NScriptType ScheduledScript
 */
define(['N/file', 'N/task'],
    /**
 * @param{file} file
 * @param{task} task
 */
    (file, task) => {

        /**
         * Defines the Scheduled script trigger point.
         * @param {Object} scriptContext
         * @param {string} scriptContext.type - Script execution context. Use values from the scriptContext.InvocationType enum.
         * @since 2015.2
         */

        //[file ID, Saved Search ID]
        const keys = [
            [72567, 1701]
        ]

        const execute = (scriptContext) => {
            for(var i = 0; i < keys.length; i++) {
                var searchTask = task.create({
                    taskType: task.TaskType.SEARCH,
                    savedsearchId: keys[i][1]
                });

                var csvFile = file.load({
                    id: keys[i][0]
                });

                //This probably doesn't work...
                csvFile.appendLine({
                    value: searchTask
                });

                csvFile.save();
            }
        }

        return {execute}

    });

如有任何帮助,我们将不胜感激!

javascript csv netsuite suitescript
1个回答
0
投票

您遇到的问题是因为

task.create()
不直接返回已保存搜索的结果;相反,它返回一个代表后台任务的
SearchTask
对象。您需要执行搜索、获取结果并将其附加到 CSV 文件中。这是一个正确的方法:

  1. 使用

    task.create()
    启动搜索任务。

  2. 使用

    search.run()
    检索保存的搜索结果或
    search.runPaged()

  3. 将结果附加到 CSV 文件。

    /**
     * @NApiVersion 2.1
     * @NScriptType ScheduledScript
     */
    define(['N/file', 'N/search', 'N/task', 'N/log'],
        (file, search, task, log) => {
    
            const keys = [
                [72567, 1701] // File ID, Saved Search ID
            ];
    
            const execute = (scriptContext) => {
                keys.forEach(([fileId, savedSearchId]) => {
    
                    // Load the CSV file from the file cabinet
                    var csvFile = file.load({
                        id: fileId
                    });
    
                    // Create a search object using the saved search ID
                    var searchObj = search.load({
                        id: savedSearchId
                    });
    
                    // Run the search and get the results in pages to avoid memory issues
                    var pagedResults = searchObj.runPaged({
                        pageSize: 1000 // Adjust as needed
                    });
    
                    pagedResults.pageRanges.forEach(function (pageRange) {
                        var page = pagedResults.fetch({
                            index: pageRange.index
                        });
    
                        page.data.forEach(function (result) {
                            var csvLine = result.columns.map(col => result.getValue(col)).join(',');
                            csvFile.appendLine({
                                value: csvLine
                            });
                        });
                    });
    
                    // Save the appended CSV file back to the file cabinet
                    csvFile.save();
                });
            };
    
            return { execute };
        });

© www.soinside.com 2019 - 2024. All rights reserved.