/** @module WidgetComponents */ /** * The Angular controller for managing the Action Table * @class module:WidgetComponents.ActionTableServerScript */ /** * Object created by Service-Now and passed to the Widget controller on initialization. * @memberof module:WidgetComponents.ActionTableServerScript * @typedef {Object} data * @property {Number} loaded Timestamp for when the data was retrieved * @property {Array} rows Contains the row data for the table * @property {Object} error Message from an error while building the data for the table. * @property {String} error.message The message to display for the error. */ /** * Object created by Service-Now and passed to the Widget controller on initialization. * @memberof module:WidgetComponents.ActionTableServerScript * @typedef {Object} options * @property {String} filterable Comma seperated list of fields that should be added * to the $search property of objects for easy filtering. * @property {Number} per_page Forces the table to show a set number of rows per page * of data and hides the per_page selector on the table. * @property {Number} refresh_interval Milliseconds to wait between pulling data * from the server again. * @property {String} data_source Indicating where/how to retrieve data. */ (function() { var buffer, i; data.loaded = Date.now(); // Level Set Options if(options.refresh_interval) { options.refresh_interval = parseInt(options.refresh_interval); if(isNaN(options.refresh_interval) || options.refresh_interval < 60000) { options.refresh_interval = 60000; } } if(options.filterable) { options.filterable = options.filterable.split(","); for(i=0; i<options.filterable.length; i++) { options.filterable[i] = options.filterable[i].trim(); } } else { options.filterable = []; } if(options.per_page) { options.per_page = parseInt(options.per_page); } // Retrieve rows based on options try { switch(options.data_source) { case "table": data.rows = ActionTableScriptAPI.getTableData(options.table, options.query); break; case "server": if(typeof(ActionTableScriptAPI[options.script_method]) == "function") { data.rows = ActionTableScriptAPI[options.script_method](options.query); } else { buffer = "Action Table: Script Method \"" + options.script_method + "\" does not exist for Script ActionTableScriptAPI"; gs.error(buffer); throw new Error(buffer); } break; case "snapi": case "ajax": // Handled Client Side data.rows = []; break; default: gs.error("Action Table: Unknown Data Source: " + options.data_source); } } catch(sourceException) { data.error = { "message": sourceException.message || "Generic Error occurred" }; gs.error(sourceException); } })();