Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Info message not showing in portal

shwethanair
Kilo Expert

Hello,

 

I have a requirement to show an alert if the record already exists in the table for the same name and show the link to the record through alert or infomessage. For this I wrote a Catalog client script and is working while doing 'Try it'  but not  working when I am trying the same through portal. 

My OnChange Script:

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var name = g_form.getValue('u_full_name');
var usr = new GlideRecord('u_eap');
usr.addQuery('u_full_name',name);
usr.query();
if(usr.next()){

var link = '<a href="u_eap.do?sys_id=' + usr.sys_id + '" class="breadcrumb" >' + usr.u_full_name + '</a>';
var message = 'The EAP record already exists for the name entered. Please check here' + link + ' .<br/>';

g_form.addInfoMessage(message);

}

}

find_real_file.png

 

 

Thanks in advance!

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

Hi Shwetha,

GlideRecord is not allowed in client script in portal; so it would break; Refer below

GlideRecord Client API does not work in the Service Catalog standard UI but works in Service Portal

You need to use GlideAjax + Script Include approach for this -> it would work in native and portal both

Updated code below for GlideAjax

Client Script:

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

var name = g_form.getValue('u_full_name');

var ga = new GlideAjax('u_userInfoAjax');
ga.addParam('sysparm_name', "getInfo");
ga.addParam('sysparm_userFullName', name);
ga.getXMLAnswer(callBackMethod);

}

function callBackMethod(response){

var answer = response;

if(answer != ''){
var link = '<a href="u_eap.do?sys_id=' + answer + '" class="breadcrumb" >' + g_form.getValue('u_full_name') + '</a>';

var message = 'The EAP record already exists for the name entered. Please check here' + link + ' .<br/>';

g_form.addInfoMessage(message);
}

}

Script Include: Create Client Callable Script Include

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

	getInfo: function(){
		var name = this.getParameter('sysparm_userFullName');
		var usr = new GlideRecord('u_eap');
		usr.addQuery('u_full_name', name);
		usr.query();
		if(usr.next()){
			return usr.sys_id;
		}
		return '';
	},

	type: 'u_userInfoAjax'
});

find_real_file.png

Mark Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

16 REPLIES 16

Hello Alok,

This code is taking me to a new record rather than the existing record moreover I cannot see the info message populating in the portal too.

Could you please try with GlideAjax and Script Include. I see that you are using GlideRecord in client script and using of GlideRecord in client side scripting is not a good practice.

Jaspal Singh
Mega Patron
Mega Patron

It should be coming. Can you check for property from Service Portal >> Properties from Application navigator.

Try increasing it to few more seconds & check. find_real_file.png

Rameswar1
ServiceNow Employee
ServiceNow Employee

Ankur Bawiskar
Tera Patron
Tera Patron

Hi Shwetha,

GlideRecord is not allowed in client script in portal; so it would break; Refer below

GlideRecord Client API does not work in the Service Catalog standard UI but works in Service Portal

You need to use GlideAjax + Script Include approach for this -> it would work in native and portal both

Updated code below for GlideAjax

Client Script:

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

var name = g_form.getValue('u_full_name');

var ga = new GlideAjax('u_userInfoAjax');
ga.addParam('sysparm_name', "getInfo");
ga.addParam('sysparm_userFullName', name);
ga.getXMLAnswer(callBackMethod);

}

function callBackMethod(response){

var answer = response;

if(answer != ''){
var link = '<a href="u_eap.do?sys_id=' + answer + '" class="breadcrumb" >' + g_form.getValue('u_full_name') + '</a>';

var message = 'The EAP record already exists for the name entered. Please check here' + link + ' .<br/>';

g_form.addInfoMessage(message);
}

}

Script Include: Create Client Callable Script Include

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

	getInfo: function(){
		var name = this.getParameter('sysparm_userFullName');
		var usr = new GlideRecord('u_eap');
		usr.addQuery('u_full_name', name);
		usr.query();
		if(usr.next()){
			return usr.sys_id;
		}
		return '';
	},

	type: 'u_userInfoAjax'
});

find_real_file.png

Mark Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader