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

Alok Das
Tera Guru

Hi Shwetha,

Could you please confirm your UI type is selected as All.

Kindly mark my answer as Correct and Helpful based on the Impact.

Regards,

Alok

Hi Alok,

 

Yes it is selected as All.

 

Thanks,

Shwetha

It seems there is a quotation issue in the generated link. Please find the updated script below.

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>' + 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);
    }
}

Kindly mark my answer as Correct and Helpful based on the Impact.

Regards,

Alok

Also, below is the HI link according to which the any  addMessage, addInfoMessage, or addErrorMessage duration can be defined in System property "glide.service-portal.notification_timeout.seconds". If you want the message to displayed without any timeout you can set the value to 0 and the message will be displayed until X is clicked.

https://hi.service-now.com/kb_view.do?sysparm_article=KB0713722