Requirement
In the item record, there is a custom field called PRIMARY VENDOR. When it is selected then under the purchase and inventory tab we need to set it as the primary vendor, in the standard sublist.
Solution
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
define(['N/currentRecord', 'N/record', 'N/search'],
/**
* @param{currentRecord} currentRecord
* @param{record} record
* @param{search} search
*/
(currentRecord, record, search) => {
/**
* Defines the function definition that is executed before record is submitted.
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type; use values from the context.UserEventType enum
* @since 2015.2
*/
const beforeSubmit = (scriptContext) => {
try {
let newRec = scriptContext.newRecord
let newPrimaryVendor = newRec.getValue({
fieldId: 'custitem_jj_primary_vendor'
})
if (checkForParameter(newPrimaryVendor)) {
setPrimaryVendor(newRec, newPrimaryVendor)
}
} catch (e) {
log.debug('error@afterSubmit', e)
}
}
/**
* @description Check whether the given parameter argument has value on it or is it empty.
* ie, To check whether a value exists in parameter
* @param {*} parameter parameter which contains some values
* @returns {Boolean} true if there exist a value, else false
*/
function checkForParameter(parameter) {
if (parameter !== "" && parameter !== null && parameter !== undefined && parameter !== false && parameter !== "null" && parameter !== "undefined" && parameter !== " " && parameter !== 'false') {
return true;
}
}
/**
* @description Defines the function definition that is set the preferred vendor in the standard sublist with the value in the custom primary vendor field.
* @param {Record} newRec : New Record
* @param {Number} newPrimaryVendor : New Primary Vendor Value
* The sublist field wil be set with the primary vendor field value.
*/
function setPrimaryVendor(newRec, newPrimaryVendor) {
try {
let lineCount = newRec.getLineCount({
sublistId: 'itemvendor'
});
if (lineCount > 0) {
for (let key = 0; key < lineCount; key++) {
let preffered = newRec.getSublistValue({
sublistId: 'itemvendor',
fieldId: 'preferredvendor',
line: key
});
if (preffered == true) {
let currentPreferredvendor = newRec.getSublistValue({
sublistId: 'itemvendor',
fieldId: 'vendor',
line: key
});
if (newPrimaryVendor != currentPreferredvendor) {
log.debug('Not equal')
newRec.setSublistValue({
sublistId: 'itemvendor',
fieldId: 'vendor',
value: Number(newPrimaryVendor),
line: key
});
}
else{
return false
}
}
else{
// let currentPreferredvendor = newRec.getSublistValue({
// sublistId: 'itemvendor',
// fieldId: 'vendor',
// line: key
// });
if (newPrimaryVendor == currentPreferredvendor) {
newRec.setSublistValue({
sublistId: 'itemvendor',
fieldId: 'preferredvendor',
value: true,
line: key
});
}else{
let call=addVendorSublist(newPrimaryVendor,newRec,lineCount)
}
}
}
} else {
let call=addVendorSublist(newPrimaryVendor,newRec,lineCount)
}
} catch (e) {
log.debug('error@setPrimaryVendor', e)
}
}
function vendorSearch(newPrimaryVendor) {
try {
var vendorSearchObj = search.create({
type: "vendor",
filters:
[
["internalid", "anyof", newPrimaryVendor]
],
columns:
[
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({
name: "entityid",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({name: "subsidiary", label: "Primary Subsidiary"}),
]
});
let searchResultCount = vendorSearchObj.runPaged().count;
let vendorSearchResult = vendorSearchObj.run().getRange({
start: 0,
end: 1
})
if (searchResultCount > 0) {
return vendorSearchResult
} else {
return false
}
} catch (e) {
log.debug('vendorSearch', vendorSearch)
}
}
function addVendorSublist(newPrimaryVendor,newRec,lineCount)
{
try{
let vendorSearchRes = vendorSearch(newPrimaryVendor)
var objSublist = newRec.getSublist({
sublistId: 'itemvendor'
});
newRec.setSublistValue({
sublistId: 'itemvendor',
fieldId: 'vendor',
value: newPrimaryVendor,
line:lineCount
});
newRec.setSublistValue({
sublistId: 'itemvendor',
fieldId: 'preferredvendor',
value: true,
line:lineCount
});
newRec.setSublistValue({
sublistId: 'itemvendor',
fieldId: 'subsidiary',
value: vendorSearchRes[0].getValue({name: "subsidiary", label: "Primary Subsidiary"}),
line:lineCount
});
}
catch (e) {
log.debug('error@setVendorSublist',e)
}
}
return {beforeSubmit}
});