- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
Hi Team,
I have a requirement to visually highlight VIP users on the REQ and RITM
Requirement
On the REQ and Requested Item [sc_req_item] form:
- Field: Requested for (requested_for)
- If the selected user has VIP = true (in sys_user.vip):
- Show a VIP icon / decoration on the field, and optionally
- Change the field text color (e.g., red) to make it stand out
- If the user is not VIP:
- No VIP indicator / normal display
This needs to work both when:
- The RITM and REQ is opened (onLoad)
- The Requested for field is changed by the user (onChange)
I have created client script for both tables
for REQ it is working fyn - VIP is highlighting
for RITM it is not working
client script for ritm
function onChange(control, oldValue, newValue, isLoading) {
var callerLabel = $('label.sc_req_item.requested_for');
var callerField = $('sys_display.sc_req_item.requested_for');
if (!callerLabel || !callerField)
return;
if (!newValue) {
callerLabel.setStyle({backgroundImage: ""});
callerField.setStyle({color: ""});
return;
}
g_form.getReference('requested_for', vipCallerCallback);
}
function vipCallerCallback(caller) {
var callerLabel = $('label.sc_req_item.requested_for').down('label');
var callerField = $('sys_display.sc_req_item.requested_for');
if (!callerLabel || !callerField)
return;
//check for VIP status
if (caller.vip == 'true') {
var bgPosition = "95% 55%";
if (document.documentElement.getAttribute('data-doctype') == 'true')
bgPosition = "5% 45%";
callerLabel.setStyle({backgroundImage: "url(images/icons/vip.gif)", backgroundRepeat: "no-repeat", backgroundPosition: bgPosition, paddingLeft: '30px' });
callerField.setStyle({color: "red"});
} else {
callerLabel.setStyle({backgroundImage: ""});
callerField.setStyle({color: ""});
}
}
O/P
what was the mistake in my script
@Ankur Bawiskar - i have configured as per your scritpt provided here ( https://www.servicenow.com/community/developer-forum/how-to-add-vip-visual-indicator-for-requested-f...)
could u please help me here @Ankur Bawiskar
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago - last edited 3 weeks ago
Hi @nameisnani ,
This is definitely something I missed, so apologies for that. An important piece on how client scripts work is that they only will work if the field is on the form, which is why you're seeing that behavior. The only option in the "Field name" field on the client script form is referencing the requested_for on the sc_req_item table and not the dot-walked field (request.requested_for).
I've adjusted the script to be an onLoad instead and that seemed to work in my PDI. Unfortunately, the user experience will not be as great and the page will have to be loaded in order to see the change.
Please let me know if this accomplishes what you're looking for and mark my answer as correct if it solves your issue.
function onLoad() {
var requestedForLabel = $('label.sc_req_item.request.requested_for');
var requestedForField = $('sys_display.sc_req_item.request.requested_for');
if (!requestedForLabel || !requestedForField)
return;
g_form.getReference('request.requested_for', vipCallback);
}
function vipCallback(requestedFor) {
if (!requestedFor) {
requestedForLabel.setStyle({backgroundImage: ""});
requestedForField.setStyle({color: ""});
return;
}
var requestedForLabel = $('label.sc_req_item.request.requested_for').down('label');
var requestedForField = $('sys_display.sc_req_item.request.requested_for');
if (!requestedForLabel || !requestedForField)
return;
//check for VIP status
if (requestedFor.vip == 'true') {
var bgPosition = "95% 55%";
if (document.documentElement.getAttribute('data-doctype') == 'true')
bgPosition = "45% 90%";
//bgPosition = "5% 45%";
requestedForLabel.setStyle({backgroundImage: "url(images/icons/vip.gif)", backgroundRepeat: "no-repeat", backgroundPosition: bgPosition, paddingLeft: '30px' });
requestedForField.setStyle({color: "red"});
} else {
requestedForLabel.setStyle({backgroundImage: ""});
requestedForField.setStyle({color: ""});
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
what debugging did you do from your side?
unless you explore, debug you won't learn.
Ankur
✨ Certified Technical Architect || ✨ 10x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
tired unable to find issue but i don't know why it is not working
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago - last edited 3 weeks ago
Hi,
It looks like the field on your sc_req_item form is dot-walked to the sc_request table's requested for field. The onChange Client Script is going based on the request_for field on the sc_req_item table.
I would thus recommend showing the requested_for field rather than request.requested_for on the form. This may also be why you're seeing differing results on the list view. Please reference my screenshot that I attached. I used your script that you posted above.
I would also recommend (if it hasn't been done already) to write a business rule to sync the field between sc_request and sc_req_item tables whenever there's a change.
Please let me know if this solves your issue or if you have additional questions.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago - last edited 3 weeks ago
After some more messing around with the client script, I was able to get it to work with the dot-walked field (request.requested_for).
function onChange(control, oldValue, newValue, isLoading) {
var requestedForLabel = $('label.sc_req_item.request.requested_for');
var requestedForField = $('sys_display.sc_req_item.request.requested_for');
if (!requestedForLabel || !requestedForField)
return;
if (!newValue) {
requestedForLabel.setStyle({backgroundImage: ""});
requestedForField.setStyle({color: ""});
return;
}
g_form.getReference('request.requested_for', vipCallback);
}
function vipCallback(requestedFor) {
var requestedForLabel = $('label.sc_req_item.request.requested_for').down('label');
var requestedForField = $('sys_display.sc_req_item.request.requested_for');
if (!requestedForLabel || !requestedForField)
return;
//check for VIP status
if (requestedFor.vip == 'true') {
var bgPosition = "95% 55%";
if (document.documentElement.getAttribute('data-doctype') == 'true')
bgPosition = "45% 90%";
//bgPosition = "5% 45%";
requestedForLabel.setStyle({backgroundImage: "url(images/icons/vip.gif)", backgroundRepeat: "no-repeat", backgroundPosition: bgPosition, paddingLeft: '30px' });
requestedForField.setStyle({color: "red"});
} else {
requestedForLabel.setStyle({backgroundImage: ""});
requestedForField.setStyle({color: ""});
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
@Robert Perrone @Ankur Bawiskar
we don't require two ' Requested for ' fields on the ritm - if i remove any one of the requested for - then VIP tag is not showing .
how to fix this ?
