Glide Ajax to lookup variable value to populate multiple other variables

Sam Ogden
Tera Guru

Hi All,

I'm creating a record poducer and have the variable 'replication_environment'.  I've created a catalog client script to do a glide ajax to a script include to lookup this value from a custom table and return 8 more values associated to this to populate 8 variables on the record producer.

My catalog script is calling the script includes ok, but I'm struggling to return the values I want to the populate the other variables.

Catalog Script:

function onChange(control, oldValue, newValue, isLoading) {
	if (isLoading) {
		return;
	}
	
	var env = g_form.getValue('replication_environment');
	alert('environment name: ' + env);
	
	var ga = new GlideAjax('internalEnvLookup');
	ga.addParam('sysparm_name', 'findConfig');
	ga.addParam('sysparm_env', env);
	ga.getXML(setEnvConfig);
		
	function setEnvConfig(response){
		var answer = response.responseXML.documentElement.getAttribute("answer");
	g_form.addInfoMessage(answer);
	
	
	answer = answer.evalJSON();  // Transform the JSON string to an object
	g_form.addInfoMessage(answer);
		
	g_form.setValue('rep_database_name', answer.database);
	g_form.setValue('strata_build_version', answer.strataBuild);
	g_form.setValue('screen_beans_version', answer.screenBeans);
	g_form.setValue('quotes_engine_version', answer.quotesEngine);
	g_form.setValue('cdl_combo_version', answer.combo);
	g_form.setValue('cdl_datepicker_version', answer.datePicker);
	g_form.setValue('edi_engine_version', answer.ediEngine);
	g_form.setValue('edi_dcd_version', answer.dcd);
		
	}
	
	//Type appropriate comment here, and begin script below
	
}

Script Include 

var internalEnvLookup = Class.create();
internalEnvLookup.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	findConfig : function() {
		
		var envName = this.getParameter('sysparm_env');
		var envDetails = {};
			
			var gr = new GlideRecord('u_internal_production_environments');
			gr.addQuery('u_environment_name', envName);
			gr.query();
			
			if(gr.next()) {
				gs.log('environment found');
				envDetails.database = gr.u_database;
				envDetails.strataBuild = gr.u_strata_build;
				envDetails.screenBeans = gr.u_screen_beans_version;
				envDetails.combo = gr.u_cdlcombo_version;
				envDetails.datePicker = gr.u_cdl_datepicker_version;
				envDetails.quotesEngine = gr.u_quotes_engine_build;
				envDetails.ediEngine = gr.u_edi_engine_build;
				envDetails.dcd = gr.u_edi_dcd_version;
			
			}
		gs.log('Environment Details: ' + envDetails.database  + envDetails.strataBuild  +  envDetails.datePicker);	
	        var json = new JSON();
			var data = json.encode(envDetails);
		
			return data;	
		},
	});

When I try this I just get object Object.

 

Any help where I'm going wrong is greatly appreciated.

Thanks

Sam

1 ACCEPTED SOLUTION

A few edits I might suggest:

-Use getXMLAnswer instead of getXML, then you have the return value in string form directly passed into your callback function.

-Use gr.getValue() instead of accessing the GlideElement fields directly, which can lead to unexpected results with javascript being a pass-by-reference language.

-Use JSON.parse() instead of string.evalJSON().

function onChange(control, oldValue, newValue, isLoading) {
	if (isLoading) {
		return;
	}
	
	var env = g_form.getValue('replication_environment');
	alert('environment name: ' + env);
	
	var ga = new GlideAjax('internalEnvLookup');
	ga.addParam('sysparm_name', 'findConfig');
	ga.addParam('sysparm_env', env);
	ga.getXMLAnswer(setEnvConfig);
		
	function setEnvConfig(response){
	g_form.addInfoMessage(response);
	
	
	answer = JSON.parse(response);  // Transform the JSON string to an object
	g_form.addInfoMessage(answer);
		
	g_form.setValue('rep_database_name', answer.database);
	g_form.setValue('strata_build_version', answer.strataBuild);
	g_form.setValue('screen_beans_version', answer.screenBeans);
	g_form.setValue('quotes_engine_version', answer.quotesEngine);
	g_form.setValue('cdl_combo_version', answer.combo);
	g_form.setValue('cdl_datepicker_version', answer.datePicker);
	g_form.setValue('edi_engine_version', answer.ediEngine);
	g_form.setValue('edi_dcd_version', answer.dcd);
		
	}
	
	//Type appropriate comment here, and begin script below
	
}
var internalEnvLookup = Class.create();
internalEnvLookup.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	findConfig : function() {
		
		var envName = this.getParameter('sysparm_env');
		var envDetails = {};
			
			var gr = new GlideRecord('u_internal_production_environments');
			gr.addQuery('u_environment_name', envName);
			gr.query();
			
			if(gr.next()) {
				gs.log('environment found');
				envDetails.database = gr.getValue('u_database');
				envDetails.strataBuild = gr.getValue('u_strata_build');
				envDetails.screenBeans = gr.getValue('u_screen_beans_version');
				envDetails.combo = gr.getValue('u_cdlcombo_version');
				envDetails.datePicker = gr.getValue('u_cdl_datepicker_version');
				envDetails.quotesEngine = gr.getValue('u_quotes_engine_build');
				envDetails.ediEngine = gr.getValue('u_edi_engine_build');
				envDetails.dcd = gr.getValue('u_edi_dcd_version');
			
			}
		gs.log('Environment Details: ' + envDetails.database  + envDetails.strataBuild  +  envDetails.datePicker);	
	        var json = new JSON();
			var data = json.encode(envDetails);
		
			return data.toString();	
		},
	});

View solution in original post

5 REPLIES 5

Pritha1
Mega Expert
You need to convert to string. return data.toString();

Hi Pritha,

 

I've changed the return statement, do I need to change some other things in the script include as well as this is still not working

script include

var internalEnvLookup = Class.create();
internalEnvLookup.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	findConfig : function() {
		
		var envName = this.getParameter('sysparm_env');
		var envDetails = {};
			
			var gr = new GlideRecord('u_internal_production_environments');
			gr.addQuery('u_environment_name', envName);
			gr.query();
			
			if(gr.next()) {
				gs.log('environment found');
				envDetails.database = gr.u_database;
				envDetails.strataBuild = gr.u_strata_build;
				envDetails.screenBeans = gr.u_screen_beans_version;
				envDetails.combo = gr.u_cdlcombo_version;
				envDetails.datePicker = gr.u_cdl_datepicker_version;
				envDetails.quotesEngine = gr.u_quotes_engine_build;
				envDetails.ediEngine = gr.u_edi_engine_build;
				envDetails.dcd = gr.u_edi_dcd_version;
			
			}
		gs.log('Environment Details: ' + envDetails.database  + envDetails.strataBuild  +  envDetails.datePicker);	
	        var json = new JSON();
			var data = json.encode(envDetails);
		
			return data.toString();	
		},
	});

I still get the following:

find_real_file.png

Have you checked the checkbox client callable on script include? Make sure the header changes when you do this.

A few edits I might suggest:

-Use getXMLAnswer instead of getXML, then you have the return value in string form directly passed into your callback function.

-Use gr.getValue() instead of accessing the GlideElement fields directly, which can lead to unexpected results with javascript being a pass-by-reference language.

-Use JSON.parse() instead of string.evalJSON().

function onChange(control, oldValue, newValue, isLoading) {
	if (isLoading) {
		return;
	}
	
	var env = g_form.getValue('replication_environment');
	alert('environment name: ' + env);
	
	var ga = new GlideAjax('internalEnvLookup');
	ga.addParam('sysparm_name', 'findConfig');
	ga.addParam('sysparm_env', env);
	ga.getXMLAnswer(setEnvConfig);
		
	function setEnvConfig(response){
	g_form.addInfoMessage(response);
	
	
	answer = JSON.parse(response);  // Transform the JSON string to an object
	g_form.addInfoMessage(answer);
		
	g_form.setValue('rep_database_name', answer.database);
	g_form.setValue('strata_build_version', answer.strataBuild);
	g_form.setValue('screen_beans_version', answer.screenBeans);
	g_form.setValue('quotes_engine_version', answer.quotesEngine);
	g_form.setValue('cdl_combo_version', answer.combo);
	g_form.setValue('cdl_datepicker_version', answer.datePicker);
	g_form.setValue('edi_engine_version', answer.ediEngine);
	g_form.setValue('edi_dcd_version', answer.dcd);
		
	}
	
	//Type appropriate comment here, and begin script below
	
}
var internalEnvLookup = Class.create();
internalEnvLookup.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	findConfig : function() {
		
		var envName = this.getParameter('sysparm_env');
		var envDetails = {};
			
			var gr = new GlideRecord('u_internal_production_environments');
			gr.addQuery('u_environment_name', envName);
			gr.query();
			
			if(gr.next()) {
				gs.log('environment found');
				envDetails.database = gr.getValue('u_database');
				envDetails.strataBuild = gr.getValue('u_strata_build');
				envDetails.screenBeans = gr.getValue('u_screen_beans_version');
				envDetails.combo = gr.getValue('u_cdlcombo_version');
				envDetails.datePicker = gr.getValue('u_cdl_datepicker_version');
				envDetails.quotesEngine = gr.getValue('u_quotes_engine_build');
				envDetails.ediEngine = gr.getValue('u_edi_engine_build');
				envDetails.dcd = gr.getValue('u_edi_dcd_version');
			
			}
		gs.log('Environment Details: ' + envDetails.database  + envDetails.strataBuild  +  envDetails.datePicker);	
	        var json = new JSON();
			var data = json.encode(envDetails);
		
			return data.toString();	
		},
	});