Export an Excel on Client Script in SS2.x
I’ve created a button on the User Server Event labelled ‘Export’ to enable a function upon clicking so that I may export the items in a Transfer Order as an Excel file.
I would like a download popup to prompt me to save the file.
I successfully created the button, but now on the client script side I am merely testing just the creation of the XLS file and trying to get the popup initiated for me to download but I keep on running into errors: latest ‘Uncaught ReferenceError: xmlString is not defined’
Server User Event
define(['N/record','N/ui/serverWidget'], function(record,serverWidget) { /** * Function definition to be triggered before record is loaded. * * @param {Object} scriptContext * @param {Record} scriptContext.newRecord - New record * @param {string} scriptContext.type - Trigger type * @param {Form} scriptContext.form - Current form * @Since 2015.2 */ function beforeLoad(scriptContext) { var forms = scriptContext.form; if (scriptContext.type == scriptContext.UserEventType.VIEW){ forms.clientScriptFileId=30592; forms.addButton({ id : 'custpage_buttonid', //always prefix with 'custpage_' label : 'Export', //label of the button functionName: "onButtonClick()" }); //forms.clientScriptModulePath = "SuiteScripts/exportToXLS.js"; } }
Client Side Script
define(['N/ui/dialog'], function(dialog) { function pageInit(scriptContext) {} function onButtonClick(scriptContext) { dialog.alert({ title: "Alert", message: "You click this export button!" }); // XML content of the file var xmlStr = '<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?>'; xmlStr += '<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" '; xmlStr += 'xmlns:o="urn:schemas-microsoft-com:office:office" '; xmlStr += 'xmlns:x="urn:schemas-microsoft-com:office:excel" '; xmlStr += 'xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" '; xmlStr += 'xmlns:html="http://www.w3.org/TR/REC-html40">'; xmlStr += '<Worksheet ss:Name="Sheet1">'; xmlStr += '<Table>' + '<Row>' + '<Cell><Data ss:Type="String"> First Header </Data></Cell>' + '<Cell><Data ss:Type="String"> Second Header </Data></Cell>' + '<Cell><Data ss:Type="String"> Third Header </Data></Cell>' + '<Cell><Data ss:Type="String"> Fourth Header </Data></Cell>' + '<Cell><Data ss:Type="String"> Fifth Header </Data></Cell>' + '</Row>'; xmlStr += '</Table></Worksheet></Workbook>'; //encode contents var base64EncodedString = encode.convert({ string: xmlString, inputEncoding: encode.Encoding.UTF_8, outputEncoding: encode.Encoding.BASE_64 }); //create file var xlsFile = file.create({ name: 'TEST.xls', fileType: 'EXCEL', contents: base64EncodedString }); log.debug({ details: "File ID: " + fileid }); scriptContext.response.writeFile({ file : xlsFile }); }
You did not declare N/file but you use it will probably return error
You have your string variable defined as xmlStr initially but later you reference it as xmlString.
Regardless, I would recommend probably using an Excel JavaScript library instead instead of manually forming strings from scratch.
I’ve used https://github.com/SheetJS/js-xlsx in the past and liked it
Sorry I forgot to invert my commenting blocks. I fixed it now.
Celigo’s CloudExtend Excel for NetSuite will save another step here by bypassing the NetSuite UI entirely. Enter the intenalID of the transaction in Excel and it will pull in from NetSuite in seconds including all the line level detail. From here you can add data, edit it, etc. and push it back to NetSuite.
samallasravan564
Is it work on the client script?