NetSuite Saved Searches
Version 0.0.1
Checkout the Oracle docs onRESTlets for more information
Set up
Creating and Deploying a Script
You must be a NetSuite Administrator to create a RESTlet
- RESTlet script (save as a file nb_kleene_data_int_rl.js):
/**
* @NApiVersion 2.1
* @NScriptType Restlet
*/
/*
*
* Name : nb_kleene_data_int_rl.js
* Property of : NoBlue
* Comments :
*
* Version Date Author Remarks
* 1.0 24/03/2023 NoBlue(GN) Initial development
*
* */
define(['N/log', 'N/record', 'N/search'],
/**
* @param{log} log
* @param{record} record
* @param{search} search
*/
(log, record, search) => {
/**
* Defines the function that is executed when a GET request is sent to a RESTlet.
* @param {Object} requestParams - Parameters from HTTP request URL; parameters passed as an Object (for all supported
* content types)
* @returns {string | Object} HTTP response body; returns a string when request Content-Type is 'text/plain'; returns an
* Object when request Content-Type is 'application/json' or 'application/xml'
* @since 2015.2
*/
const get = (requestParams) => {
var opsType,
results = [],
slice = [],
i = 0,
resSearch,
resultSet,
searchID;
opsType = requestParams.type;
log.debug('opsType', opsType);
//GopiNadendla_2023-03-26: -- check for type
if(opsType === 'search'){
//GopiNadendla_2023-03-26: -- check for all seaved searches available in suystem
var savedsearchSearchObj = search.create({
type: "savedsearch",
filters:
[
["isinactive","is","F"]
],
columns:
[
search.createColumn({name: "title", label: "Title"}),
search.createColumn({name: "id", label: "ID"}),
search.createColumn({name: "access", label: "Access"}),
search.createColumn({name: "recordtype", label: "Type"})
]
});
var searchResultCount = savedsearchSearchObj.runPaged().count;
log.debug("savedsearchSearchObj result count",searchResultCount);
resultSet = savedsearchSearchObj.run();
} else if(opsType === 'data'){
searchID = requestParams.searchId;
if(searchID){
resSearch = search.load({
id: searchID
});
resultSet = resSearch.run();
} else {
return { error : 'No search id passed, please pass parameter as searchId'}
}
} else {
return { error : 'Parameter type is invalid/not passed, please pass parameter as Type'}
}
//GopiNadendla_2023-03-26: -- Loop through and get results
do {
slice = resultSet.getRange({ start: i, end: i + 1000 });
slice.forEach(function(row) {
var resultObj = {};
row.columns.forEach(function(column) {
resultObj[column.name] = row.getValue(column);
});
results.push(resultObj);
i++;
});
} while (slice.length >= 1000);
return (results);
}
/**
* Defines the function that is executed when a POST request is sent to a RESTlet.
* @param {string | Object} requestBody - The HTTP request body; request body is passed 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; returns a string when request Content-Type is 'text/plain'; returns an
* Object when request Content-Type is 'application/json' or 'application/xml'
* @since 2015.2
*/
const post = (requestBody) => {
}
return {get, post}
});
- Create script by going to Customization 🡪 Scripting 🡪 Scripts 🡪 New
- Add the script file by clicking on + sign as shown below. A popup will be opened when you click on + sign, please click on Choose File on the popup and attach the file downloaded in the first step. Then click on Create Script Record button. After clicking on ‘Create Script Record’ button, please enter name and id as required and click on save.
- After the script is saved you need to verify the 'GET FUNCTION' and 'POST FUNCTION' lists options are selected as presented in the screen below then click 'Deploy Script'
- After deployment the screen below will appear. Please set the 'Status' to Released and the 'Log Level' to Debug. Under the Audience tab we recommend choosing 'Select All' for Roles and Employees (if necessary then restrict the Audience to only those who need to run the script, more information on script audiences can be found here). Then save the script.
- Once you click on Save as per step 5 you will be taken to the screen below. Copy the External URL as per below screenshot below.(This the URL we will be using to access NetSuite restlet.)
Creating an Integration Record
You must be a NetSuite Administrator to create an integration record
- Navigate to Setup 🡪 Integration 🡪 Manage Integrations 🡪 New
- Fill in Name(Eg: Kleene Data Integration) and uncheck all checkboxes except Token-Based Authentication as per the screen below. Please then save this Integration.
- Once the record is saved, the Consumer Key and the Consumer Secret will be generated. Please save these somewhere secure and accessible as these details will be required when creating the source in the Kleene app and they will not be visible on this page again.
Creating Access Tokens
You must be a NetSuite Administrator to create Access Tokens
- In the settings portlet on home screen of NetSuite with administrator access, Manage access tokens link will be available as shown below.
- Click 'New My Access Token' the screen below will appear. In the Application Name dropdown field select the appropriate Integration Record that created as per Creating Integration Record section. After clicking save the Token key and secret values will be generated. Please save these somewhere secure and accessible as these details will be required when creating the source in the Kleene app and they will not be visible on this page again.
Setting Up A Source
- Go to 'Connect New Source' within Connections in the Kleene app
- Your 'Account ID' can be found if you go to Setup 🡪 Company 🡪 Company Information. Then look for the Account ID (it should be in the right column beneath time zone).
- Your domain can be found in the URL when you are logged into your Netsuite account for example if your url reads
https://115493-sb.app.netsuite.com/app
then your domain is115493-sb
- Your Script ID and Deploy can be taken from the External URL presented on the final screen of deploying a script (see above). Take the value of each after the
=
sign - Your Consumer Key and Consumer Secret should be retrieved from the secure location chosen after creating an integration record (see above)
- Your Token and Token Secret should be retrieved from the secure location chosen after creating an Access Token (see above)
Features
Feature | Support | Notes |
---|---|---|
Backfill | ℹ️ | No Limitations. Any Saved Search the user has access to can be retrieved. |
Incremental | ✅ | Incremental is not supported on either report |
API reliability | 🟢 | Reliable |
Reports detail
⬇️ Report | 🔑 Incremental key | 🔑 Primary key | 📄 Description |
---|---|---|---|
Searches | N/A | ID | Returns all the saved searches your user can access |
Data | CREATED | ID | Returns all the data within the saved search specified by the Search ID in the extract configuration |
Updated about 1 year ago