NetSuite Console Snippet helpers
Load Suitescript 2.0 Modules
var record, curecModule, currentRecord, search, runtime, xml, format, email, https;
require(['N/record', 'N/currentRecord', 'N/search', 'N/runtime', 'N/xml', 'N/format', 'N/email', 'N/https'],
function(r, c, s, u, x, f, e, h) {
record = r;
email = e;
currentRecord = c.get();
search = s;
runtime = u;
xml = x;
format = f;
curecModule = c;
https =h;
console.log("2.0 Modules Loaded!");
})
Load Saved search
require(['N/search', '/SuiteScripts/Library/FBN_LIB_Core_2020_01_22'],
function (search, FBN) {
var labels = true;
var save_search = true;
function getTitle(search_id) {
var savedsearchSearch = search.create({
type: 'savedsearch',
filters: ['internalidnumber','equalto', search_id],
columns: ['title']
});
var title = '';
savedsearchSearch.run().each(function(result) {
title = result.getValue('title');
return false;
});
return title;
}
function getSearch(search_id, save_search, labels) {
var s = search.load({
id: Number(search_id)
});
var code = '';
var filters = replace_quotes(JSON.stringify(s.filterExpression))
.replace(/\[\[/g, '[\n\t\t\t[')
.replace(/\]\]/g, ']\n\t\t]');
code += '\tvar filters = ' + filters + ';\n'
code += '\tvar cols= [\n';
for (var i = 0; i < s.columns.length; i++) {
var this_col = JSON.parse(JSON.stringify(s.columns[i]));
delete this_col.type;
if (this_col.sortdir === 'NONE') {
delete this_col.sortdir;
}
if (!labels) {
delete this_col.label;
}
//console.log(this_col);
this_col = JSON.stringify(this_col).replace('sortdir:', 'sort:');
if (!save_search && false) {
this_col = this_col.replace(/,/g, ',\n\t\t\t\t')
.replace(/\{\“/g, '{\n\t\t\t\t”')
.replace(/\“\}/g, '“\n\t\t\t}')
.replace(/\t\“/g, '\t')
.replace(/\“\:/g, ': ');
}
this_col = replace_quotes(this_col);
code += '\t\t\tsearch.createColumn(' + this_col + ')' + (i < s.columns.length - 1 ? ',' : '') + '\n';
}
code += '\t\t];\n\n';
code += '\tvar ' + s.searchType + 'Search = search.create({\n\t\ttype: \'' + s.searchType + '\',\n\t\tfilters: filters,\n\t\tcolumns: cols\n\t});\n\n';
if (save_search) {
code += '\t' + s.searchType + 'Search.id = \'' + s.id + '\';\n';
code += '\t' + s.searchType + 'Search.title = \'' + (FBN.is_empty(s.title) ? getTitle(search_id) : s.title) + '\';\n';
code += '\t' + s.searchType + 'Search.isPublic = true;\n';
code += '\t' + s.searchType + 'Search.save();\n';
} else {
code += '\tvar search_count = ' + s.searchType + 'Search.runPaged().count;\n\n';
code += '\t' + s.searchType + 'Search.run().each(function(result) {\n\n\n\t\treturn true;\n\t});';
}
return code;
}
var search_id = prompt('Enter a single search ID or a comma delimited list:');
if (search_id === null) {
return;
}
var code = '';
var searches = search_id.split(',');
if (save_search) {
code += 'require([\'N/search\'],function(search, record) { \n';
}
for (var i = 0; i < searches.length; i++) {
try {
code += getSearch(searches[i].trim(), save_search, labels);
} catch (ex) {
alert('Could not get ' + searches[i]);
console.log(ex);
}
}
if (save_search) {
code += '\talert(\'Done!\');\n';
code += '});\n';
}
console.log(code)
});
function replace_quotes(str) {
str = str.replace(/'/g, '\\\'').replace(/“/g, '\'');
return str;
}
Change Sales order Status
var record, curecModule, currentRecord, search, runtime, xml, format, email, https;
require(['N/record', 'N/currentRecord', 'N/search', 'N/runtime', 'N/xml', 'N/format', 'N/email', 'N/https'],
function(r, c, s, u, x, f, e, h) {
record = r;
email = e;
currentRecord = c.get();
search = s;
runtime = u;
xml = x;
format = f;
curecModule = c;
https =h;
console.log("2.0 Modules Loaded!");
})
var SO = record.load({
type: currentRecord.type,
id: currentRecord.id,
isDynamic: true
});
SO.setValue('status', 'A')
SO.setValue('orderstatus', 'A')
SO.save()
Load Record header fields, line fields, For all transactions
(function () {
var head = document.head;
var a = document.createElement('script');
a.src = 'https://cdnjs.cloudflare.com/ajax/libs/x2js/1.2.0/xml2json.min.js';
head.appendChild(a);
var b = document.createElement('script');
b.src = 'https://cdn.jsdelivr.net/npm/json-formatter-js@2.3.4/dist/json-formatter.umd.min.js';
head.appendChild(b);
var c = document.createElement('script');
c.src = 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js';
head.appendChild(c);
var link = document.createElement('link');
link.href = 'https://cdn.jsdelivr.net/npm/json-formatter-js@2.3.4/dist/json-formatter.css';
head.appendChild(link);
})();
var starter = (function () {
try {
if (typeof nlapiGetRecordType === 'undefined') {
alert('error', 'Are you on a NetSuite page?');
return;
}
let id = nlapiGetRecordId();
let type = nlapiGetRecordType();
let url;
let payload;
if (type && id) {
url = '/app/common/scripting/nlapihandler.nl';
payload = `<nlapiRequest type="nlapiLoadRecord" id="${id}" recordType="${type}"/>`; // eslint-disable-line max-len
} else {
url = window.location + '&xml=T';
}
var response = nlapiRequestURL(url, payload, null)
return response.getBody();
} catch (error) {
alert('error', error.toString());
}
})()
function formatRecord(object) {
let baseRecord;
if (!object) {
return null;
} else if (object.hasOwnProperty('nlapiResponse')) {
baseRecord = object.nlapiResponse.record;
} else if (object.hasOwnProperty('nsResponse')) {
baseRecord = object.nsResponse.record;
} else {
return null;
}
if (!baseRecord) {
return null;
}
return _.transform(
baseRecord,
(memo, value, key) => {
switch (key) {
case 'machine':
if (!_.isArray(value)) {
memo.lineFields[value._name] = value.line;
} else {
_.forEach(value, (sublist) => {
memo.lineFields[sublist._name] = sublist.line;
});
}
break;
case '_recordType':
memo.recordType = value;
break;
case '_id':
memo.id = value;
break;
case '_fields':
break;
default:
memo.bodyFields[key] = value;
}
},
{ recordType: null, id: null, bodyFields: {}, lineFields: {} }
);
}
setTimeout(function(){
var recordJSON = new X2JS().xml_str2json(starter);
var myJSON = formatRecord(recordJSON);
console.log('Field Records', myJSON)
}, 5000);