Main Script:
Script deployed to the sales order record. Our new functionalities written as modules will be added to this consolidated client script.
/**
*@NApiVersion 2.1
*@NScriptType ClientScript
*@NModuleScope SameAccount
*/
define(['SuiteScripts/Jobin and Jismi IT Services/BRGC-18 Item Field Customization in Transaction Records/jj_cm_clientscript_functions_brgc34.js'],
function (CustomClientScriptFunctions) {
/**
* Function to be executed after page is initialized.
* @param {*} context
*/
function pageInit(context) {
try {
let mode = context.mode;
console.log("ENTERED JJ CS SEACH WITH FILTER BRGC-19 - mode:", mode);
} catch (err) {
console.log('Err@pageInit', err);
}
}
/**
* Validation function to be executed when field is changed.
* @param {*} context
* @returns
*/
function validateField(context) {
try {
CustomClientScriptFunctions.validateModuleFn(context);
return true;
} catch (Err) {
console.log('Err@validateField', Err);
}
}
/**
* Validation function to be executed when sublist line is committed.
* @param {*} context
* @returns
*/
function validateLine(context) {
try {
CustomClientScriptFunctions.validateLineFn(context);
return true;
} catch (Err) {
console.log('Err@validateLine', Err);
}
}
return {
pageInit: pageInit,
validateField: validateField,
validateLine: validateLine
};
});
Module:
define(['N/currentRecord', 'N/url'], function (currentRecord, url) {
const SL_SCRIPT_ID = "customscriptjj_sl_item_search_brgc20";
const SL_DEPLOYMENT_ID = "customdeployjj_sl_item_search_brgc20";
const SO_ITEM_TEXT_LINE = "custcol_jj_item_filter";
/**
* To precisely handle empty returned values, this function is used
* @param {*} value
* @returns
*/
function isEmpty(value) {
let isEmptyObject = function (a) {
if (typeof a.length === 'undefined') { // it's an Object, not an Array
let hasNonempty = Object.keys(a).some(function nonEmpty(element) {
return !isEmpty(a[element]);
});
return hasNonempty ? false : isEmptyObject(Object.keys(a));
}
return !a.some(function nonEmpty(element) { // check if array is really not empty as JS thinks
return !isEmpty(element); // at least one element should be non-empty
});
};
return (
value == false
|| typeof value === 'undefined'
|| value == null
|| (typeof value === 'object' && isEmptyObject(value))
);
}
/**
* Consolidated Client script validateField() function invoke this function
* @param {*} context
* @returns
*/
function validateModuleFn(context) {
try {
let sublistId = context.sublistId;
let fieldId = context.fieldId;
let rec = context.currentRecord;
if (sublistId === "item" && fieldId === SO_ITEM_TEXT_LINE) {
let itemValue = rec.getCurrentSublistValue({ sublistId: "item", fieldId: "item" });
let itemfilterValue = rec.getCurrentSublistValue({ sublistId: "item", fieldId: SO_ITEM_TEXT_LINE });
if (isEmpty(itemValue) && !isEmpty(itemfilterValue)) {
console.log("Std item Field Value", itemValue);
console.log("Entered itemfilterValue", itemfilterValue);
openItemSearchPopup(itemfilterValue);
}
}
if (sublistId === "item" && fieldId === "item") {
let itemValue = rec.getCurrentSublistValue({ sublistId: "item", fieldId: "item" });
let itemfilterValue = rec.getCurrentSublistValue({ sublistId: "item", fieldId: SO_ITEM_TEXT_LINE });
if (!isEmpty(itemValue) && !isEmpty(itemfilterValue)) {
console.log("Std item Field Value", itemValue);
console.log("Entered itemfilterValue", itemfilterValue);
rec.setCurrentSublistValue({ sublistId: 'item', fieldId: SO_ITEM_TEXT_LINE, value: "", ignoreFieldChange: true });
}
}
return true;
} catch (Err) {
console.log('Err@validateFieldFn', Err);
}
}
/**
* Clears Item filter field value on item line commit
* @param {*} context
*/
function validateLineFn(context) {
try {
let sublistId = context.sublistId;
let rec = context.currentRecord;
console.log("validateLineFn", "validateLineFn");
if (sublistId === "item") {
let itemValue = rec.getCurrentSublistValue({ sublistId: "item", fieldId: "item" });
let itemfilterValue = rec.getCurrentSublistValue({ sublistId: "item", fieldId: SO_ITEM_TEXT_LINE });
if (!isEmpty(itemValue) && !isEmpty(itemfilterValue)) {
console.log("Std item Field Value", itemValue);
console.log("Entered itemfilterValue", itemfilterValue);
rec.setCurrentSublistValue({ sublistId: 'item', fieldId: SO_ITEM_TEXT_LINE, value: "", ignoreFieldChange: true });
}
}
} catch (error) {
console.log('Err@validateLineFn', Err);
}
}
/**
* Open suitelet popup window
* @param {*} itemfilterValue - value in item filter field
*/
function openItemSearchPopup(itemfilterValue) {
let SCRIPT_URL = url.resolveScript({
scriptId: SL_SCRIPT_ID,
deploymentId: SL_DEPLOYMENT_ID,
params: {
itemField: itemfilterValue,
locationField: '',
prodField: '',
pageId: 0
}
});
window.open(SCRIPT_URL, "Choose Item", "popup=yes,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,top=500,left=500,width=800,height=600");
}
/**
* Set selected item in suitelet to current item line
* @param {*} itemId - internal id of the selected item in the suitelet page
*/
function setSlLine(itemId) {
try {
console.log("itemId", itemId)
let rec = currentRecord.get();
rec.setCurrentSublistValue({ sublistId: 'item', fieldId: 'item', value: itemId });
let itemText = rec.getCurrentSublistText({ sublistId: 'item', fieldId: 'item' })
if (!isEmpty(itemText)) {
console.log("itemText", itemText)
rec.setCurrentSublistValue({ sublistId: 'item', fieldId: SO_ITEM_TEXT_LINE, value: "", ignoreFieldChange: true });
}
}
catch (Err) {
console.log("Err@setSlLine", Err)
}
}
return {
isEmpty: isEmpty,
openItemSearchPopup: openItemSearchPopup,
setSlLine: setSlLine,
validateModuleFn: validateModuleFn,
validateLineFn: validateLineFn
};
});