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