Jira Code : BTN-619
A RESTlet for RTPOS to communicate with NetSuite. This RESTlet will expose the contents of a predefined Saved Search created in NetSuite.
/**
* @NApiVersion 2.x
* @NScriptType Restlet
* @NModuleScope SameAccount
*/
/*******************************************************************************
* * Jobin & Jismi IT Services | Balaji Trading | BTN-619 | RESTlet API for RTPOS *
* **************************************************************************
*
* Author: Jobin & Jismi IT Services LLP
*
* Date Created : 05-April-2019
*
* Created By : Manu Antony,Jobin & Jismi IT Services LLP
*
* SCRIPT ID: customscript_jj_btn619_rl_api_rtpos
*
* DEPLOYMENT ID: customdeploy_jj_btn619_rl_api_rtpos
*
* REVISION HISTORY
*
*
******************************************************************************/
"use strict";
var ERROR_STACK = [];
define(["N/search", "N/log"], function (search, log) {
//To check whether a value exists in parameter
function checkForParameter(parameter, parameterName) {
if (parameter !== null && parameter !== undefined && parameter !== false && parameter !== "null" && parameter !== "undefined" && parameter !== "false" && parameter != "" && parameter != " ")
return true;
if (parameterName)
log.debug("Empty Value found", "Empty Value for parameter " + parameterName);
return false;
}
//To assign a default value if the it is empty
function assignDefaultValue(value, defaultValue) {
if (checkForParameter(value)) return value;
return defaultValue;
}
//To reject predefined set of values
function rejectThisValues(value) {
var rejectObj = {
null: true,
undefined: true,
NaN: true,
0: true,
false: true,
"": true
};
return rejectObj[value] ? false : true;
}
//Common Try-Catch function
function applyTryCatch(DATA_OBJ, NAME) {
function tryCatch(myfunction, key) {
return function () {
try {
return myfunction.apply(this, arguments);
} catch (e) {
log.error("error in " + key, e);
ERROR_STACK.push({
"position": key,
"error": e.message
});
return false;
}
};
}
for (var key in DATA_OBJ) {
if (typeof DATA_OBJ[key] === "function") {
DATA_OBJ[key] = tryCatch(DATA_OBJ[key], NAME + "." + key);
}
}
}
var main = {
formatSavedSearch: function (savedSearchObj, savedSearchName, pageNumber) {
//Creating Column Names
var columns = savedSearchObj.columns;
var columnsData = {};
columns.forEach(function (result, counter) {
columnsData[result.label] = result;
});
//Paginating Results
var searchPageRanges;
try {
searchPageRanges = savedSearchObj.runPaged({
pageSize: 500
});
} catch (err) {
return [];
}
if (searchPageRanges.pageRanges.length < 1)
return [];
pageNumber = parseInt(pageNumber) - 1;
pageNumber = pageNumber < 0 ? 0 : pageNumber; // The minimum value is always 0
pageNumber = pageNumber > (searchPageRanges.pageRanges.length - 1) ? (searchPageRanges.pageRanges.length - 1) : pageNumber; // The maximum value is always searchPageRanges.pageRanges.length
//Fetching Row Data
var rowData = [],
tempRow = {};
searchPageRanges.fetch({
index: pageNumber
}).data
.forEach(function (result) {
tempRow = undefined;
tempRow = {};
for (var key in columnsData)
tempRow[key] = {
value: result.getValue(columnsData[key]),
text: result.getText(columnsData[key])
};
rowData.push(tempRow);
});
return this.formatResponse({
"status": "SUCCESS",
"message": rowData.length > 0 ? "INVOICE EXISTS" : "INVOICE DOESN'T EXISTS",
"timeStamp": Date.now(),
"pageLength": searchPageRanges.pageRanges.length,
"pageNumber": pageNumber + 1
}, rowData, false);
},
searchInvoiceRTPOS: function (pageNumber) {
var invoiceSearchObj = search.load({
id: 'customsearch12271'
});
var searchResultCount = invoiceSearchObj.runPaged().count;
log.debug("invoiceSearchObj result count", searchResultCount);
return this.formatSavedSearch(invoiceSearchObj, 'invoiceSearchObj', pageNumber);
},
parseRequestBody: function (body) {
try {
return JSON.parse(body);
} catch (err) {
return false;
}
},
processPOST: function (data) {
data = this.parseRequestBody(data);
if (!data)
return this.formatResponse({
"status": "FAILURE",
"message": "ERROR WHILE PARSING JSON",
"timeStamp": Date.now()
}, false, '@main.parseRequestBody');
var invoiceSearch = this.searchInvoiceRTPOS(assignDefaultValue(data.pageNumber, 1));
if (invoiceSearch)
return invoiceSearch;
return this.formatResponse({
"status": "FAILURE",
"message": "COULDN'T EXECUTE SCRIPT",
"timeStamp": Date.now()
}, false, '@main.processPOST', ERROR_STACK.length ? ERROR_STACK : false);
},
post: function (requestBody) {
/**
* Function called upon sending a POST request to the RESTlet.
*
* @param {string | Object} requestBody - The HTTP request body; request body will be passed into function as a string when request Content-Type is 'text/plain'
* or parsed into an Object when request Content-Type is 'application/json' (in which case the body must be a valid JSON)
* @returns {string | Object} HTTP response body; return string when request Content-Type is 'text/plain'; return Object when request Content-Type is 'application/json'
* @since 2015.2
*/
return this.processPOST(requestBody);
},
formatResponse: function (SHORT_RESPONSE, LONG_RESPONSE, FAULT_POSITION, MORE_INFO) {
var responseObj = {};
responseObj.summary = (SHORT_RESPONSE) ? SHORT_RESPONSE : "FAILURE";
responseObj.details = (LONG_RESPONSE) ? LONG_RESPONSE : null;
responseObj.traceback = (FAULT_POSITION) ? FAULT_POSITION : null;
responseObj.information = (MORE_INFO) ? MORE_INFO : null;
return JSON.stringify(responseObj);
}
}
applyTryCatch(main, "main");
return main;
});