The CreatorCon Call for Content is officially open! Get started here.

How to populate a Reference field automatically (no dot-walking, GlideAjax)

Alberto Consonn
ServiceNow Employee
ServiceNow Employee

Hi guys,

I need an help for configuring the Advanced Reference Qualifier in the right way.

In the Time Worker table, I've created a Reference custom field "Account_ref" to the customer_account table.

I would like to fill this field automatically with the account of the selected task, I tried dding with the following Advanced Reference Qualifier...no luck.

javascript:'account='+current.task;

Thanks for your help!!!

find_real_file.png

find_real_file.png

1 ACCEPTED SOLUTION

Dubz
Mega Sage

Hi Alberto,

I replicated your config and figured out the issue, real rookie error for which i accept full responsibility 🙂

The function call in the getXMLAnswer() line is in quotes, it shouldn't be! use this:

//client script
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
	if (isLoading || newValue === '') {
		return;
	}

	var ga = new GlideAjax('TestScriptInclude');
	ga.addParam('sysparm_name', 'testFunction');
	ga.addParam('sysparm_task', g_form.getValue('task'));
	ga.getXMLAnswer(getAjaxData);

	function getAjaxData(response){
		g_form.setValue('u_account_ref', response);
	}
}

 

EDIT: Just noticed Harsh has already picked this up! 

View solution in original post

36 REPLIES 36

Alberto Consonn
ServiceNow Employee
ServiceNow Employee

You're right, sorry my bad. It's still not working, I was not able to read in the Case table (see error message below)...I've created a new Application Cross-Scope Access privilege into the Time Recording for Customer Service application...now I don't get any error but still do not populate the Account_ref field, it's doing nothing 😞

find_real_file.png

find_real_file.png

If you go to the table and change it to allow access to all application scopes that should open it up.

Alberto Consonn
ServiceNow Employee
ServiceNow Employee

I think this client script is doing nothing, I don't see any error or information in the logs but still the account_ref field is not getting populated even if I try to change the Task...

is it possible if you can share the complete code which you have written ?

are you in scoped application ?

I've changed everything to Global application (Script Include and Client Script), these are the actual code:

CLIENT SCRIPT (Table: Time Worked [task_time_worked], Type: onChange, Field name: Task, Application: Global):

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
	if (isLoading || newValue === '') {
		return;
	}
	//Type appropriate comment here, and begin script below
	var ga = new GlideAjax('test');
	ga.addParam('sysparm_name', 'test_function');
	ga.addParam('sysparm_task', g_form.getValue('task'));
	ga.getXMLAnswer('getAjaxData');

	function getAjaxData(response){
		g_form.setValue('u_account_ref', response);
	}
}

SCRIPT INCLUDE (Name: test, Application: Global, Client callable: checked):

var test = Class.create();
test.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

test_function: function(){
var tsk = this.getParameter('sysparm_task');
var gr = new GlideRecord('sn_customerservice_case');
if(gr.get(tsk)){
return gr.getDisplayValue('account');
}
},

type: 'test'
});