```/** * @NApiVersion 2.x * @NScriptType ClientS...
# suitescript
w
Copy code
/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
define(['N/log'],
/**
 * @param {serverWidget} serverWidget
 */
function(log) {

    /**
     * Function to be executed when field is changed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
     * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
     *
     * @since 2015.2
     */
    function fieldChanged(scriptContext) {
    	//Update brands field from class data
    	console.log('fieldChanged');
    	if (scriptContext.fieldId == 'custpage_class') {
    		var rec = scriptContext.currentRecord;
    		var itemClass = rec.getValue('custpage_class');
    		console.log('item Class ' + itemClass);
    		var data = rec.getValue('custpage_brandsbyclass');
    		console.log('data ' + data);
    		var brandsByClassData = JSON.parse(rec.getValue('custpage_brandsbyclass'));
    		var fieldBrand = rec.getField({
    			fieldId:	'custpage_brand'
    		});
    		fieldBrand.removeSelectOption({
    			value:		null
    		});
    		fieldBrand.insertSelectOption({
    			//default
    			value:	'-'
				,text:	'Pick One'
				,isSelected:	true
    		});
    		var fieldSeries = rec.getField({
    			fieldId :	'custpage_series'
    		});
    		fieldSeries.removeSelectOption({
    			value:	null
    		});
    		fieldSeries.insertSelectOption({
    			//default
    			value:	'-'
				,text:	'Pick One'
				,isSelected:	true
    		});
    		brandsByClassData[itemClass].forEach(function (obj) {
    			fieldBrand.insertSelectOption({
    				value:	obj.brandId
    				,text:	obj.brandName
    			});
    		});
    	}
    	if (scriptContext.fieldId == 'custpage_brand') {
    		var rec = scriptContext.currentRecord;
    		var series = rec.getValue('custpage_class') + "|" + rec.getValue('custpage_brand');
    		console.log('series ' + series);
    		var data = rec.getValue('custpage_seriesbyclassbrand');
    		console.log('data ' + data);
    		var seriesByClassBrandData = JSON.parse(rec.getValue('custpage_seriesbyclassbrand'));
    		var fieldSeries = rec.getField({
    			fieldId :	'custpage_series'
    		});
    		fieldSeries.removeSelectOption({
    			value:	null
    		});
    		fieldSeries.insertSelectOption({
    			//default
    			value:	'-'
				,text:	'Pick One'
				,isSelected:	true
    		});
    		seriesByClassBrandData[series].printerCompId.forEach(function (id,index) {
    			fieldSeries.insertSelectOption({
    				value: id
    				,text: seriesByClassBrandData[series].printerCompName[index]
    			});
    		});
    	} 
    }

    /**
     * Validation function to be executed when record is saved.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @returns {boolean} Return true if record is valid
     *
     * @since 2015.2
     */
    function saveRecord(scriptContext) {
    	var rec = scriptContext.currentRecord;
    	if (rec.getValue('custpage_class') === '-') {
    		alert("Please pick a class");
    		return false;
    	}
    	if (rec.getValue('custpage_brand') === '-') {
    		alert("Please pick a brand");
    		return false;
    	}
    	if (rec.getValue('custpage_series') === '-') {
    		alert("Please pick a series");
    		return false;
    	}
    }

    return {
        fieldChanged: fieldChanged,
        saveRecord: saveRecord
    };
    
});