NetSuite SuiteScript 2.0 SFTP API Usage Sample-CarlZeng
Background: Created a test SuiteLet script, after correct credential, it will do: 1. Upload/Sent specific NS File Cabinet file to SFTP server.(NS -> S
Background:
Created a test SuiteLet script, after correct credential, it will do:
1. Upload/Sent specific NS File Cabinet file to SFTP server.(NS -> SFTP)
2. Get a specific file from SFTP server to NS File Cabinet.(SFTP -> NS)
Screen Shoot - GET:
Screen Shoot - POST:
Sample Code
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*
* @Note: This’s a test script which will do:
* 1. Upload/Sent specific NS File Cabinet file to SFTP server.(NS ->
* SFTP)
* 2. Get a specific file from SFTP server to NS File Cabinet.(SFTP ->
* NS) */ define(
[ ‘N/error’, ‘N/sftp’, ‘N/file’, ‘N/runtime’, ‘N/search’, ‘N/transaction’, ‘N/ui/serverWidget’ ], /**
* @param {error}
* error
* @param {file}
* file
* @param {runtime}
* runtime
* @param {search}
* search
* @param {transaction}
* transaction
* @param {serverWidget}
* ui */
function(error, sftp, file, runtime, search, transaction, ui) { /**
* Definition of the Suitelet script trigger point.
*
* @param {Object}
* context
* @param {ServerRequest}
* context.request - Encapsulation of the incoming
* request
* @param {ServerResponse}
* context.response - Encapsulation of the Suitelet
* response
* @Since 2015.2 */
function onRequest(context) { var strSftpServerUrl = ‘123.112.249.93’; var strSftpDir = ‘Public’; // *nix command: ssh-keyscan -t rsa -p 22 123.112.249.93
var strHostKey = “AAAAB3NzaC1yc2EAAAABIwAAAQEAul/AnqfetlyUR6cMEEHNEsJWXk+9mo2nCSgkgU1sIwC91qoWHc/QQl+5fNYZnF93x60IQ6rjmeW6h5E44xLqZ2g6UtA6ZB1nkTZS41imbTUb+Apge0xyE32/XI8aMdaG9ZORvuRJARz4dwtnIHBwZUQBjvOpcdala0nObHiCasG1QKpTk0OYPqwRYijKHDfaW5oPmMIYrQWnLHQ8E6krL8a9gKHcwtsyJh/Ng6sEZdpVHL6ZE/8/EyTGOED14Qh1QIN3Lbk2RLPPO5tHYS6rMlozGqTRVwadaBtXV8jXfsrUGzciu3JnEO3HHXBT4ILeEGdqWpDSA5t8TC986PJ4yw==”; var strHostKeyType = ‘rsa’; var objRequest = context.request; if (objRequest.method === ‘GET’) { var form = ui.createForm({
title : ‘SFTP Transfer Sample’ }); var objUserFld = form.addField({
id : ‘custpage_username’,
type : ui.FieldType.TEXT,
label : ‘SFTP User Name’ });
objUserFld.breakType = ui.FieldBreakType.STARTCOL;
objUserFld.isMandatory = true;
form
.addCredentialField({
id : 'custpage\_sftp\_password\_token',
label : 'SFTP Password',
restrictToScriptIds : \[ 'customscript\_pri\_sl\_sftptransfer\_test' \],
restrictToDomains : \[ strSftpServerUrl \],
});
form.addSubmitButton({
label : 'Submit' });
context.response.writePage(form);
} else if (objRequest.method === 'POST') { var strSftpUserName = objRequest.parameters.custpage\_username; var passwordToken = objRequest.parameters.custpage\_sftp\_password\_token;
log.debug({
title : 'New password token',
details : passwordToken \+ ', Sftp User: '
+ strSftpUserName
}); var connection = sftp.createConnection({
username : strSftpUserName,
passwordGuid : passwordToken,
url : strSftpServerUrl,
port : 22,
directory : strSftpDir,
hostKey : strHostKey,
hostKeyType : strHostKeyType
}); /\*\*
\* \[1\] Uploading the file to the external SFTP server. \*/
var myFileToUpload = file.load({
id : 9288 }); // file.create({
// name : 'originalname.txt',
// fileType : file.Type.PLAINTEXT,
// contents : 'I am a test file. Hear me roar.'
// });
connection.upload({ // directory : ‘Public/‘,
filename : ‘newFileNameOnServer_TEST.js’,
file : myFileToUpload,
replaceExisting : true }); /**
* [2] Download sftp files to NetSuite FileCabinet */
var downloadedFile = connection.download({ // directory : ‘Public’,
filename : ‘tomato(123.114.225.191).ovpn.txt’ });
downloadedFile.folder = -10;
downloadedFile.save();
context.response
.write('1. Uploaded newFileNameOnServer\_TEST.js to SFTP server("Public" folder). \\n\\r2. Downloaded "tomato(123.114.225.191).ovpn.txt" to fileCabinet("Attachments Received" folder).'); return true;
}
} return {
onRequest : onRequest
};
});
Open MAC OS Build-in SFTP server
http://osxdaily.com/2011/09/29/start-an-ftp-or-sftp-server-in-mac-os-x-lion/
Error Messages
Some time error message is cofusing.
I.e. AN_ERROR_OCCURRED_WHILE_DECRYPT_PASSWORDGUID
This error comes when POST of SuiteLet executing
var connection = sftp.createConnection({
username : strSftpUserName,
passwordGuid : passwordToken,
url : strSftpServerUrl,
port : 22,
directory : strSftpDir,
hostKey : strHostKey,
hostKeyType : strHostKeyType
});
But actually the problem is in GET side field definition:
form
.addCredentialField({
id : ‘custpage_sftp_password_token’,
label : ‘SFTP Password’,
restrictToScriptIds : [ ‘customscript_pri_sl_sftptransfer_test’ ],
restrictToDomains : [ strSftpServerUrl ],
});
You might ONLY need restrictToScriptIds and restrictToDomains;
Adding restrictToCurrentUser: true MIGHT causing error.