function execute() { var sqlQueryParam...
# suitescript
v
function execute() { var sqlQueryParameter = runtime.getCurrentScript().getParameter({name: 'custscript_sql_query_in_file_cabinet'}); var format = runtime.getCurrentScript().getParameter({name : 'custscript_format_txt_or_csv'}); var folderToSave = runtime.getCurrentScript().getParameter({name: 'custscript_folder_to_save_the_results'}); if(format === 'CSV'){ var fileCreated = file.create({ name : 'task_data_export' + new Date() + '.csv', fileType : file.Type.CSV, //contents : content, folder : folderToSave }); var fileID = fileCreated.save(); log.debug('File Created', fileID); }else if(format === 'TEXT'){ var fileCreated = file.create({ name : 'task_data_export' + new Date() + '.txt', fileType : file.Type.PLAINTEXT, //contents : content, folder : folderToSave }); var fileID = fileCreated.save(); log.debug('File Created', fileID); } if(sqlQueryParameter){ var sqlQuery = file.load({id : sqlQueryParameter}).getContents(); log.debug('format',format); log.debug('sql',sqlQuery); var results = query.runSuiteQL({ query : sqlQuery, params : [] }).asMappedResults(); var fieldNames = Object.keys(results[0]); log.debug('fieldnames',fieldNames); var header = fieldNames.join(','); log.debug('header',header); var rows = results.map(function (task) { return fieldNames.map(function (fieldName) { return task[fieldName]; }).join(','); }); log.debug('rows',rows); var content = rows.join('\n'); log.debug('content',content); var loadedFile = file.load({id : fileID}); loadedFile.contents = content; var loadedFileID = loadedFile.save(); log.debug('filecreated with content',loadedFileID); } This is my script. it creates a file but with no contents. What is wrong with it?
e
Copy code
//contents: content
v
again i load the file to set the content
n
not sure but why not save the file with the contents the once rather than save --> load --> save?
e
I don't believe the
contents
property is writeable
I was trying a similar thing recently and did not see a way to update the contents of a file; I had to create the file with the contents I wanted
👍🏻 1
a
@erictgrubaugh I think you are right, even to use the searchTask to export to CSV you need to create an empty file first.
v
The reason first i create a file is to let the customer choose either text or csv.
e
v
actully before the same code worked, all of a sudden it is stopped working
e
That picture is of the options parameter for
file.create
, not of the properties for a
file.File
object, which your
loadedFile
variable is
v
what could i do then? I am damn sure it worked well before.
n
Only create your file at the point you know the type, including the contents....
v
I think you are right, even to use the searchTask to export to CSV you need to create an empty file first. To achieve this, what could i do then?
function execute() { var sqlQueryParameter = runtime.getCurrentScript().getParameter({name: 'custscript_sql_query_in_file_cabinet'}); var savedSearch = runtime.getCurrentScript().getParameter({name : 'custscript_saved_search'}); var format = runtime.getCurrentScript().getParameter({name : 'custscript_format_txt_or_csv'}); var folderToSave = runtime.getCurrentScript().getParameter({name: 'custscript_folder_to_save_the_results'}); if(format === 'CSV'){ var fileCreated = file.create({ name : 'task_data_export' + new Date() + '.csv', fileType : file.Type.CSV, //contents : content, folder : folderToSave }); var fileID = fileCreated.save(); log.debug('File Created', fileID); }else if(format === 'TEXT'){ var fileCreated = file.create({ name : 'task_data_export' + new Date() + '.txt', fileType : file.Type.PLAINTEXT, //contents : content, folder : folderToSave }); var fileID = fileCreated.save(); log.debug('File Created', fileID); } if(sqlQueryParameter){ var sqlQuery = file.load({id : sqlQueryParameter}).getContents(); log.debug('format',format); log.debug('sql',sqlQuery); var results = query.runSuiteQL({ query : sqlQuery, params : [] }).asMappedResults(); var fieldNames = Object.keys(results[0]); log.debug('fieldnames',fieldNames); var header = fieldNames.join(','); log.debug('header',header); var rows = results.map(function (task) { return fieldNames.map(function (fieldName) { return task[fieldName]; }).join(','); }); log.debug('rows',rows); var content = rows.join('\n'); log.debug('content',content); var loadedFile = file.load({id : fileID}); loadedFile.contents = content; var loadedFileID = loadedFile.save(); log.debug('filecreated with content',loadedFileID); }else if(savedSearch){ var searchTask = task.create({ taskType : task.TaskType.SEARCH }); searchTask.savedSearchId = savedSearch; searchTask.fileId = fileID; log.debug('searchtask',searchTask); var searchTaskId = searchTask.submit(); }
this is my actual code . it has two deployments one for sql results, one for saved search results.