Scenario:
Need to show the bank details from a custom record in a custom field at Invoice record. The bank account will select by checking the invoice subsidiary and currency. If there is a bank account with the same currency and subsidiary, then it will populate into the custom field in Invoice.
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
define(['N/record', 'N/search','N/ui/serverWidget'],
/**
* @param{record} record
* @param{search} search
*/
(record, search,serverWidget) => {
/**
* Defines the function definition that is executed before record is loaded.
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {string} scriptContext.type - Trigger type; use values from the context.UserEventType enum
* @param {Form} scriptContext.form - Current form
* @param {ServletRequest} scriptContext.request - HTTP request information sent from the browser for a client action only.
* @since 2015.2
*/
const beforeLoad = (scriptContext) => {
try {
if(scriptContext.type==='create') {
var currentForm = scriptContext.form;
let company_name = currentForm.getField({
id: 'custbody10'
});
log.debug("current Form",currentForm);
log.debug("name",company_name)
company_name.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
}
}catch (e) {
log.debug("Error",e)
}
}
/**
* 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 {
if(scriptContext.type==='create') {
let curRec = scriptContext.newRecord;
log.debug("Current Record", curRec);
// let recID=curRec.id;
// let rec=record.load({
// type: record.Type.INVOICE,
// id:recID,
// isDynamic: true
// });
let currency = curRec.getValue({
fieldId: 'currency'
});
log.debug("Currency in Invoice", currency);
let subsidiary = curRec.getValue({
fieldId: 'subsidiary'
});
log.debug("Subsidiary", subsidiary)
var customrecord_2663_bank_detailsSearchObj = search.create({
type: "customrecord_2663_bank_details",
filters:
[
["custrecord_2663_currency", "anyof", currency],
"AND",
["custrecord_2663_subsidiary", "anyof", subsidiary]
],
columns:
[
search.createColumn({
name: "name",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({
name: "custrecord_2663_gl_bank_account",
label: "GL Bank Account"
}),
search.createColumn({name: "custrecord_2663_subsidiary", label: "Subsidiary"}),
search.createColumn({name: "custrecord_2663_currency", label: "Currency"}),
search.createColumn({name: "custrecord3", label: "Default invoice bank account"}),
search.createColumn({name: "internalid", label: "Internal ID"})
]
});
var searchResultCount = customrecord_2663_bank_detailsSearchObj.runPaged().count;
let internal, deafult_bank, flag = 0;
let bankTrue = [];
let bankFalse = [];
//log.debug("customrecord_2663_bank_detailsSearchObj result count",searchResultCount);
customrecord_2663_bank_detailsSearchObj.run().each(function (result) {
deafult_bank = result.getValue({
name: "custrecord3",
label: "Default invoice bank account"
});
// log.debug("default value",deafult_bank)
if (deafult_bank === true) {
internal = result.getValue({
name: "internalid", label: "Internal ID"
});
bankTrue.push(internal);
flag = flag + 1;
} else {
internal = result.getValue({
name: "internalid", label: "Internal ID"
});
bankFalse.push(internal);
}
return true;
});
if (flag > 0) {
log.debug("Array with", bankTrue[0]);
curRec.setValue({
fieldId: 'custbody10',
value: bankTrue[0]
});
} else {
log.debug("Array False", bankFalse[0])
curRec.setValue({
fieldId: 'custbody10',
value: bankFalse[0]
});
}
}
}catch (e) {
log.debug("error",e)
}
}
/**
* Defines the function definition that is executed after 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 afterSubmit = (scriptContext) => {
}
return {beforeLoad, beforeSubmit, afterSubmit}
});