Display VIP flag on REQ, RITM and SCTASK forms for 'Requested For'

gs7
Tera Contributor

Hello everyone,

I have a requirement to display VIP flag for 'Requested for' for Request. This flag should be displayed on REQ, RITM and SCTASK form.

I referred to the below community and created client script on REQ and RITM and Script include, but i see the flag only on REQ form and not on RITM and SCTASK form. 

https://community.servicenow.com/community?id=community_question&sys_id=7700a12fdb32afc011762183ca9619f4

Looking for any help on this.

Below are the scripts.

Client script on sc_request table :-

function onLoad() {

var callerLabel = $('label.sc_request.requested_for');
var callerField = $('sys_display.sc_request.requested_for');
if (!callerLabel || !callerField)
return;

g_form.getReference('requested_for', vipCallerCallbackREQ);
}

function vipCallerCallbackREQ(caller) {

var callerLabel = $('label.sc_request.requested_for').down('label');
var callerField = $('sys_display.sc_request.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'
});
//set callerField color
callerField.setStyle({
color: "red"
});
} else {
callerLabel.setStyle({
backgroundImage: ""
});
callerField.setStyle({
color: ""
});
}
}

 

Client Script on sc_req_item table :-

function onLoad() {
//Type appropriate comment here, and begin script below

var callerLabel = $('label.sc_req_item.request.requested_for');
var callerField = $('sys_display.sc_req_item.request.requested_for');
if (!callerLabel || !callerField)
return;


var number = g_form.getValue('number');

var ga = new GlideAjax("isVIP");
ga.addParam("sysparm_name", "vip");
ga.addParam("sysparm_numnber", number);
ga.getXML(vipCallBack);

}


function vipCallBack(response) {

var answer = response.responseXML.documentElement.getAttribute("answer");
var callerLabel = $('label.sc_req_item.request.requested_for').down('label');
var callerField = $('sys_display.sc_req_item.request.requested_for');
if (!callerLabel || !callerField)
return;


//check for VIP status
if (answer == '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' });
//set callerField color
callerField.setStyle({color: "red"});
} else {
callerLabel.setStyle({backgroundImage: ""});
callerField.setStyle({color: ""});
}

}

Script Include :- (Client callable checked in)

var isVIP = Class.create();
isVIP.prototype = Object.extendsObject(AbstractAjaxProcessor, {

vip: function(){
var number = this.getParameter('sysparm_numnber');
var gr = new GlideRecord("sc_req_item");
gr.addQuery("number", number);
gr.query();
if (gr.next()) {
return gr.request.requested_for.vip;
}
},

type: 'isVIP'
});

1 ACCEPTED SOLUTION

I'm glad to hear that you are now able to view the icon on the 3 forms. 

To show the icon on the RITM and SCTASK table list views, assuming the list layout of each contains Request.Requested for, all you need to do is change the Value of the Style that you created to show the icon on the sc_request table, and it will show on all 3 tables!

javascript:current.requested_for.vip==true||current.request.requested_for.vip==true;

View solution in original post

17 REPLIES 17

Brad Bowman
Kilo Patron
Kilo Patron

Do you have the Isolate script box unchecked on all three client scripts?  Have you added Request.Requested for to your RITM form?

find_real_file.png

Similarly, you'll need to add Request item.Request.Requested for to the SCTASK form.

Hi Brad,

Thank you for providing your input on this.

I have Request.Requested for added to RITM form.

find_real_file.png

 

 I also have Request item.Request.Requested for added on SCTASK form.

find_real_file.png

Also, i have only 2 client scripts , one on sc_request table and another on sc_req_item table and both have 'Isolate sciprt' checked out.

You'll need the script from that other post on sc_task to see this on the task form.  To troubleshoot the RITM client script and script include, add some logging to both to see how far it gets, and where something unexpected is happening.  I would recommend something like this for the client script

function onLoad() {
 var callerLabel = $('label.sc_req_item.request.requested_for');
 var callerField = $('sys_display.sc_req_item.request.requested_for');
 if (!callerLabel || !callerField)
  return;
 
 alert('still running');
 var number = g_form.getValue('number');
 var ga = new GlideAjax("isVIP");
 ga.addParam("sysparm_name", "vip");
 ga.addParam("sysparm_numnber", number);
 ga.getXML(vipCallBack);
}

function vipCallBack(response) {
 var answer = response.responseXML.documentElement.getAttribute("answer");
 alert('answer = ' + answer);
 var callerLabel = $('label.sc_req_item.request.requested_for').down('label');
 var callerField = $('sys_display.sc_req_item.request.requested_for');
 if (!callerLabel || !callerField)
  return;

 //check for VIP status
 if (answer == 'true') {
  alert('inside answer true if');
  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' });
  //set callerField color
  callerField.setStyle({color: "red"});
 } else {
  alert('inside answer else');
  callerLabel.setStyle({backgroundImage: ""});
  callerField.setStyle({color: ""});
 }
}

and for the Script Include

var isVIP = Class.create();
isVIP.prototype = Object.extendsObject(AbstractAjaxProcessor, {

 vip: function(){
  var number = this.getParameter('sysparm_numnber');
  gs.addInfoMessage('number=' + number);
  var gr = new GlideRecord("sc_req_item");
  gr.addQuery("number", number);
  gr.query();
  if (gr.next()) {
   gs.addInfoMessage('vip=' + gr.request.requested_for.vip.toString());
   return gr.request.requested_for.vip.toString();
  }
 },
 type: 'isVIP'
});

It's best to force the vip field to a string as I did in the script include to prevent unexpected results.  So when the RITM form loads you should see a couple of alerts and 2 info messages.  If either are blank or undefined, that will point to where your error is.

Hi Brad,

Thank you for your help. Your idea of debugging statements helped me with the code.

I used below Client Scripts and Script Include to display 'VIP' icon on the REQ, RITM and SCTASK form.

This very well displays the icon on the form view, but not in the list view.

Client Script on REQ (sc_request):- (Isolate script set to 'FALSE')

function onLoad() {


    var callerLabel = $('label.sc_request.requested_for');
    var callerField = $('sys_display.sc_request.requested_for');
    if (!callerLabel || !callerField)
        return;

    g_form.getReference('requested_for', vipCallerCallbackREQ);
}

function vipCallerCallbackREQ(caller) {

    var callerLabel = $('label.sc_request.requested_for').down('label');
    var callerField = $('sys_display.sc_request.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'
        });
        //set callerField color
        callerField.setStyle({
            color: "red"
        });
    } else {
        callerLabel.setStyle({
            backgroundImage: ""
        });
        callerField.setStyle({
            color: ""
        });
    }
}

Client Script in RITM(sc_req_item) :- (Isolate script set to 'FALSE')

function onLoad() {
    var callerLabel = $('label.sc_req_item.request.requested_for');
    var callerField = $('sys_display.sc_req_item.request.requested_for');
    if (!callerLabel || !callerField)
        return;

    var number = g_form.getValue('number');
    var ga = new GlideAjax("isVip");
    ga.addParam("sysparm_name", "vip_ritm");
    ga.addParam("sysparm_numnber", number);
    ga.getXML(vipCallBack);
}

function vipCallBack(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    var callerLabel = $('label.sc_req_item.request.requested_for').down('label');
    var callerField = $('sys_display.sc_req_item.request.requested_for');
    if (!callerLabel || !callerField)
        return;

    //check for VIP status
    if (answer == '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'
        });
        //set callerField color
        callerField.setStyle({
            color: "red"
        });
    } else {
        callerLabel.setStyle({
            backgroundImage: ""
        });
        callerField.setStyle({
            color: ""
        });
    }
}

Client Script on SCTASK (sc_task) :- (Isolate script set to 'FALSE')

function onLoad() {
	//Type appropriate comment here, and begin script below

	var callerLabel = $('label.sc_task.request_item.request.requested_for');
	var callerField = $('sys_display.sc_task.request_item.request.requested_for');
	if (!callerLabel || !callerField)
		return;


	var number = g_form.getValue('request_item');

	var ga = new GlideAjax("isVip");
	ga.addParam("sysparm_name", "vip_sctask");
	ga.addParam("sysparm_numnber", number);
	ga.getXML(vipCallBack);

}


function vipCallBack(response) {

	var answer = response.responseXML.documentElement.getAttribute("answer");
	var callerLabel = $('label.sc_task.request_item.request.requested_for').down('label');
	var callerField = $('sys_display.sc_task.request_item.request.requested_for');
	if (!callerLabel || !callerField)
		return;


	//check for VIP status
	if (answer == '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' });
		//set callerField color
		callerField.setStyle({color: "red"});
	} else {
		callerLabel.setStyle({backgroundImage: ""});
		callerField.setStyle({color: ""});
	}

}

Script Include :- (Client Callable set to True)

var isVip = Class.create();
isVip.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    vip_ritm: function() {
        var number = this.getParameter('sysparm_numnber');
        var gr = new GlideRecord("sc_req_item");
        gr.addQuery("number", number);
        gr.query();
        if (gr.next()) {
            return gr.request.requested_for.vip.toString();
        }
    },
	
	vip_sctask: function() {
        var number = this.getParameter('sysparm_numnber');
        var gr = new GlideRecord("sc_req_item");
        gr.addQuery("sys_id", number);
        gr.query();
        if (gr.next()) {
            return gr.request.requested_for.vip.toString();
        }
    },
    type: 'isVip'
});