How to Add VIP visual indicator for “Requested for” on RITM (similar to Incident Caller VIP)

nameisnani
Mega Sage

Hi Team,

I have a requirement to visually highlight VIP users on the Requested Item (RITM) form.


📌 Requirement

On the 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:

  1. The RITM is opened (onLoad)
  2. The Requested for field is changed by the user (onChange)


can anyone please help me - how to achieve this requriment .

thanks in advance 

11 REPLIES 11

Ankur Bawiskar
Tera Patron

@nameisnani 

already OOTB client script for incident has this script

use that and enhance for RITM

Ensure "Isolate Script" field is False so that DOM manipulation works

AnkurBawiskar_0-1771220002764.png

 

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

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

Tanushree Maiti
Mega Sage

Here is Configuration components to highlight vip in RITM. Customize the code as per your requirement like you can create Onchange() client script if you have that requirement.

 

1.Create a Onload Client script:

TanushreeMaiti_0-1771219691686.png

Code:

function onLoad() {

var reqLabel = g_form.getLabel("requested_for");
var reqField = g_form.getDisplayBox("requested_for");

var innerHtml = "<span id=\"status.sc_req_item.request.requested_for\" title=\"On behalf of another individual\" mandatory=\"false\" oclass=\"\" aria-label=\"\" class=\" required-marker\"></span><span title=\"On behalf of another individual\" class=\"label-text\" data-html=\"false\">Requested for</span>";

if (!reqLabel || !reqField){
return;
}


if (g_form.getValue("requested_for")!=null){
if(!g_scratchpad.u_vip){
var ga = new GlideAjax('CallerVIP');
ga.addParam('sysparm_name','getVIP');
ga.addParam('sysparm_caller', g_form.getValue("requested_for"));
ga.getXMLAnswer(vipItemCallback);
}
else {
vipItemCallback(g_scratchpad);
}
}
else {
removeItemVIPStyles(reqLabel, reqField);

}

function vipItemCallback(requestedFor) {
if (!requestedFor.u_vip){
requestedFor = requestedFor.evalJSON();
}

//check for VIP status
if (requestedFor.u_vip.toString() == 'true') {
//alert('is a VIP');
setItemVIPStyles(reqLabel, reqField);
}
else {
removeItemVIPStyles(reqLabel, reqField);
}

}


function setItemVIPStyles(label, field){

if (label) {
label.innerHTML = "<img src='images/icons/vip.gif'/>" + label.innerHTML;

}
//change the caller's name field to red text
if (field) {
field.style.color='red';
}
}

function removeItemVIPStyles(label, field){
if (label) {
label.innerHTML = innerHtml;
}
if (field) {
field.style.color = '';
}
}
}

 

2. Client callable script include:

var CallerVIP = Class.create();

CallerVIP.prototype = Object.extendsObject(AbstractAjaxProcessor, {

   getVIP: function() {

      var usr = this.getParameter('sysparm_caller');

      var gr = new GlideRecord('sys_user');

      gr.addQuery('sys_id', usr.toString());

      gr.query();

      gr.next();

      return new JSON().encode({u_vip: gr.vip.toString(), u_locationDisp: gr.location.getDisplayValue(), u_location: gr.location.toString(), u_phone: gr.phone.toString()});

   }

});

 

3. Create the style for ritm in sys_ui_ritm table

TanushreeMaiti_1-1771220300088.png

 

Please mark this response as Helpful & accept it as solution if it assisted you with your question.
Regards
Tanushree Maiti
ServiceNow Technical Architect
Linkedin:

@Tanushree Maiti 
coould you please provide for sc_task as well 

This is for sc_task.

1. Onload client script :

TanushreeMaiti_0-1771223254320.png

code: Client script (script include already shared)

function onLoad() {

var reqLabel = g_form.getLabel("request_item.requested_for");
var reqField = g_form.getDisplayBox("request_item.requested_for");
var innerHtml = "<span id=\"status.sc_task.request_item.requested_for\" title=\"On behalf of another individual\" mandatory=\"false\" oclass=\"\" aria-label=\"\" class=\" required-marker\"></span><span title=\"On behalf of another individual\" class=\"label-text\" data-html=\"false\">Requested for</span>";

if (!reqLabel || !reqField){
return;
}

if (g_form.getValue("request_item.requested_for")!=null){
if(!g_scratchpad.u_vip){
var ga = new GlideAjax('CallerVIP');
ga.addParam('sysparm_name','getVIP');
ga.addParam('sysparm_caller', g_form.getValue("request_item.requested_for"));
ga.getXMLAnswer(vipTaskCallback);
}
else {
vipTaskCallback(g_scratchpad);
}
}
else {
removeTaskVIPStyles(reqLabel, reqField);

}

function vipTaskCallback(requestedFor) {
if (!requestedFor.u_vip){
requestedFor = requestedFor.evalJSON();
}

//check for VIP status
if (requestedFor.u_vip.toString() == 'true') {
setTaskVIPStyles(reqLabel, reqField);
}
else {
removeTaskVIPStyles(reqLabel, reqField);
}

}

function setTaskVIPStyles(label, field){

if (label) {
label.innerHTML = "<img src='images/icons/vip.gif'/>" + label.innerHTML;

}
//change the caller's name field to red text
if (field) {
field.style.color='red';
}
}

function removeTaskVIPStyles(label, field){
if (label) {
label.innerHTML = innerHtml;
}
if (field) {
field.style.color = '';
}
}
}

 

3. Style on sc_task : do it same way as ritm is done.

Please mark this response as Helpful & accept it as solution if it assisted you with your question.
Regards
Tanushree Maiti
ServiceNow Technical Architect
Linkedin: