RE: How to apply filter fields to Suitelet with Client Script
I’ve been building a Suitelet to display the result and columns dynamically from a saved search. Where I’m running into an issue is I need to be able to trigger an update to my sublist once the field has been set to update the filter on list. I’m ideally looking for something where I don’t have to trigger off of a button but if I need to I will.
Any help would be much appreciated.
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
*/
define(['N/ui/serverWidget', 'N/search', 'N/runtime'], function(serverWidget, search, runtime) {
function suiteletList(context){
if (context.request.method === 'GET') {
var form = serverWidget.createForm({title: 'Transactions'});
var itemField = form.addField({ id: 'custpage_item' ,type: serverWidget.FieldType.SELECT, label: 'Item' ,source: 'item'});
var objSublist = form.addSublist({id: 'custpage_sublist1' ,type:serverWidget.SublistType.LIST ,label: 'sublist1'});
var objCurrScript = runtime.getCurrentScript();
var param_SavedSearchId = objCurrScript.getParameter({ name:'custscript_suitelet_search' });
var objSublistSearch = search.load({ id: param_SavedSearchId });
if(itemField!=null){
var fltrPFA = search.createFilter({ name:'item' ,operator:'IS' ,values: itemField });
objSublistSearch.filters.push(fltrPFA);
}
var SublistSearch = objSublistSearch.run();
var SublistSearchResults = SublistSearch.getRange(0, 1000);
var c = 0;
SublistSearch.columns.forEach(function(col){
c++;
var colName = 'custpage_col' + c;
if (col.label != 'nodisplay') {
objSublist.addField({ id:colName ,label:col.label ,type: serverWidget.FieldType.TEXT });
}
});
for (var ix = 0; ix < SublistSearchResults.length; ix++) {
var result = SublistSearchResults[ix];
var c = 0;
//loop through the columns to fill the data
for (var k in result.columns) {
c++;
var colName = 'custpage_col' + c;
if (result.columns[k].label != 'nodisplay') {
var fieldValue;
if ( result.getText(result.columns[k]) ){
fieldValue = result.getText(result.columns[k])
} else {
fieldValue = result.getValue(result.columns[k])
};
if (!fieldValue) {
fieldValue = ' ';
}
//add the value to the row / column
objSublist.setSublistValue({ id:colName ,value:fieldValue ,line: ix });
}
}
}
form.getClientScriptModulePath = './cs_script_sublist_search.js';
context.response.writePage(form);
}
}
return {
onRequest: suiteletList
};
});
Attach a client script to your suitelet and use the fieldChanged function to redirect to the suitelet with different parameters.
use window.onbeforeunload = null; – to get rid of the “changes may not get saved” message (or something like this)