我正在尝试使用保存的搜索结果(每周一次)创建历史 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}
});
如有任何帮助,我们将不胜感激!
您遇到的问题是因为
task.create()
不直接返回已保存搜索的结果;相反,它返回一个代表后台任务的 SearchTask
对象。您需要执行搜索、获取结果并将其附加到 CSV 文件中。这是一个正确的方法:
使用
task.create()
启动搜索任务。
使用
search.run()
检索保存的搜索结果或
search.runPaged()
。
将结果附加到 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 };
});