- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-28-2020 02:44 AM
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);
}
}
Thanks in advance!
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-30-2020 08:40 AM
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'
});
Mark ✅ Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-28-2020 02:53 AM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-28-2020 02:54 AM
Hi Alok,
Yes it is selected as All.
Thanks,
Shwetha

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-28-2020 03:19 AM
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

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-28-2020 03:38 AM
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