Save User Preferences in a table

Fabrizio Joaqui
Mega Guru
There is a function called getUserPreferences(),
I have to do the set, saving that data in the 'sys_user_preferences' table how can I do?
(function() {
	/* populate the 'data' object */
	/* e.g., data.table = $sp.getValue('table'); */
	try{

		var userId = gs.getUserID();

		data.arr = [];
		data.report = '';
		data.prefReport = '';
		data.rowName = '';
		data.columnName = '';
		data.show_report_widget = false;
		data.mainReportPreference = 'custom_report.main';

		//define event in get
		data.EVENTS= {
			getReport:"getReport",
			getReportData: "getReportData",
			getUserPreferences: "getUserPreferences",
			init: "init"
		};

		//Delegate action for event
		var ACTIONS=	[	
			{
				event:data.EVENTS.getReport,
				delegate: getReport
			},
			{
				event:data.EVENTS.getReportData,
				delegate: getReportData
			},
			{
				event:data.EVENTS.getUserPreferences,
				delegate: getUserPreferences
			},
			{
				event:data.EVENTS.init,
				delegate: init
			}
		];

		if(input){		
			var execute= ACTIONS.filter(function(action){
				return input.action==action.event;
			});

			if(execute.length)
				execute[0].delegate(input);
		}
		else{
			//initial 
			init();
		}

	} catch(err){
		$sp.log("Error  :" + JSON.stringify(err));
		data.error = {
			err : err
		}
	}

	//functions
	function init(){
		data.report = $sp.getParameter('report');
	}

	function getReport(input){
		try{
			var reportGR = new GlideRecordSecure('sys_report');
			reportGR.addQuery('sys_id', data.report);

			reportGR.query();

			if(reportGR.hasNext()){
				$sp.log('reportGR: ' + reportGR.title);
			}


			var request = new sn_ws.RESTMessageV2();
			request.setEndpoint('/api/now/table/sys_report?sysparm_query=sys_id%3D' + input.report_sys_id);
			request.setHttpMethod('GET');
			
			request.setRequestHeader('Accept','application/json');
			request.setRequestHeader('Content-Type','application/json');

			request.setRequestHeader('X-UserToken', input.g_ck);
			//request.setRequestHeader('X-UserToken', token);

			var response = request.execute();
			$sp.log('report: ' + response.getBody());
			data.reportResponse = response;

		}
		catch(e){
			$sp.log("error in getReport: " + e);
		}
	}

	function getReportData(input){
		try{
			var myObj = new GlideRecord(input.table);
			myObj.addEncodedQuery(input.encodedQuery);

			myObj.query();

			while(myObj.next()){
				var ctrObj = {};
				data.rowName = myObj[input.row].getLabel();
				data.columnName = myObj[input.column].getLabel();
				
				ctrObj[data.rowName] = myObj.getDisplayValue(input.row);
				ctrObj[data.columnName] = myObj.getDisplayValue(input.column);
				
				ctrObj.sys_id = myObj.getValue('sys_id');
				ctrObj[input.aggfield] = myObj.getValue(input.aggfield);

				data.arr.push(ctrObj);

			}
		}
		catch(e){
			$sp.log("error in getReportData: " + e);
		}
	}
	
	function getUserPreferences(){
		try{
			var encodedQuery = 'user=' + userId + '^name=' + data.mainReportPreference;
			var myObj = new GlideRecord('sys_user_preference');
			myObj.addEncodedQuery(encodedQuery);

			myObj.query();

			if(myObj.hasNext()){
				$sp.log("UserPreferences: " + JSON.stringify(myObj.getDisplayValue('name')));
				var prefReport = myObj.value;
				if(prefReport.length){
					data.prefReport = prefReport;
				}
			}
		}
		catch(e){
			$sp.log("error in getUserPreferences: " + e);
		}
	}

	function resolve(obj,path) {
		return path.split('.').reduce(function(prev, curr) {
			return prev ? prev[curr] : null
		}, obj || self)
	}

})();
 
3 REPLIES 3

Community Alums
Not applicable

Hi,

Can you try and use "savePreference":

var currentUser = gs.getUser();
currentUser.savePreference('user_preference_name', 'user_preference_value');

Mark my answer correct & Helpful, if Applicable.

Thanks,
Sandeep

thank you Sandeep,
inside the function or outside the getUserPreferences () function?

Community Alums
Not applicable

outside.