[NetSuite] I would like to have a Suitescript to Set the "Create PO" sublist Item field to 'DropShip' when a Sales Order is created via the user interface. I would also like to add another "if" to check a custom field.
I have found a SuiteAwners article about setting that field:
"Setting the Create PO field to null via SuiteScript" Answer Id: 35911 I have gotten the Suitescript 1.0 to work (I have got it to set the 'createpo' to 'DropShip', and I have not been able to and another if statement to check a custom field on the Sales Order)
Here is the Suitescript 1.0 Code:
function beforeSubmit(type)
{
var count = nlapiGetLineItemCount('item');
for (i=1; i<= count; i++)
{
var currentContext = nlapiGetContext();
//setting of 'createpo' field only happens when the script is triggered via User Interface
//add other if conditions here, if needed
// 'createpo' values are Null, 'DropShip', or 'SpecOrd'
if((currentContext.getExecutionContext() == 'userinterface'))
{
nlapiSetLineItemValue('item', 'createpo', i, 'DropShip');
}
}
}
I know that Suitescript 1.0 is deprecated so I would love to rewrite it in Suitescript 2.0. Fortunately, the SuiteAwnsers article has some code for that as well.
Here is the Suitescript 2.0 code
function beforeSubmit(type){
var count = objRecord.selectLine({
sublistId: 'item',
line: i
});
for (i=1; i<= count; i++) {
var currentContext = runtime.executionContext();
//setting of 'createpo' field only happens when the script is triggered via Web Services
//add other if conditions here, if needed
if((currentContext.getExecutionContext() == 'webservices')) {
objRecord.setSublistValue({
sublistId: 'item',
fieldId: 'createpo',
line: i,
value: null
});
}
}
}
Unfortunately, when I got to Create a new script in Netsuite it only gave me "Select 1.0 Script Type " as an option not "Select 2.0 Script Type".
I know this is a bit of a long one so if you have made it this far round of applause! to sum it up there are two things I need help with
1. How can I add an "if" that checks a filed value on the sales order "before submit" on Suitescript 1.0
2. How Can I get the suitescript 2.0 to work (including the "if" that checks a filed value on the sales order "before submit")
Just so you all know I am really new to scripting so if you have solutions please give as much detail as possible
First of all, you need to set the script version at the top of your script for it to be recognized as version 2:
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
Next, for your script:
your count var is not getting a line count, it is selecting a line and you are passing an uninstantiated var i into it. You need to use record.getLineCount() instead:
var count = objRecord.getLineCount({ sublistId: 'item' });
Start your for loop at 0. In suitescript 2 all lists are 0 indexed.
for (i = 0; i < count; i++) {
Since you are referencing the runtime module, make sure it is included in your define statement.
The final script might look something like this:
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define( ['N/runtime'], function(Runtime) {
function beforeSubmit(context){
// get record from context
var objRecord = context.newRecord;
// get item list line count
var count = objRecord.getLineCount({
sublistId: 'item'
});
// start for loop at 0. lines are 0 indexed
for (i = 0; i < count; i++) {
var currentContext = Runtime.executionContext();
//setting of 'createpo' field only happens when the script is triggered via Web Services
//add other if conditions here, if needed
if((currentContext.getExecutionContext() == 'webservices')) {
objRecord.setSublistValue({
sublistId: 'item',
fieldId: 'createpo',
line: i,
value: 'DropShip'
});
}
}
}
return {
beforeSubmit: beforeSubmit
};
});
Hopefully this will get you started at least. The question is a bit confusing but this should get you a functional 2.0 script to start working with.