How to pass reference field values from Client side to Script Include.

Shidhi
Tera Contributor

Need to pass two reference field values from client script to Script include.Please provide help.

 

Field 1.  name: cmdb_ci   reference to 'cmdb_ci' need Business owner field ( u_business_owner) and Service Owner field (u_service_owner) both are referring to sys_user_group table.

 

Below is an onChange Client script:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var enddate = newValue; 
	var startdate = g_form.getValue('start_date');
	var ci = g_form.getValue('cmdb_ci.u_business_owner.getDisplayValue()');
	var so = g_form.getValue('cmdb_ci.u_service_owner.getDisplayValue()');
	
    var ga = new GlideAjax('global.ChangeManagementClientUtils'); //script include name
    ga.addParam('sysparm_name', 'checkPlannedDates'); //function name
    ga.addParam('sysparm_name_date', startdate); //passing startdate
	ga.addParam('sysparm_name_date_1', enddate); //passing enddate
	ga.addParam('sysparm_name_ci',ci);//passing ci
	ga.addParam('sysparm_name_so',so);//passing so
    ga.getXMLAnswer(checkPlannedDates1);

    function checkPlannedDates1(response) {
        if (response == 'true') {
           // g_form.setReadOnly('domain', false);
			g_form.addErrorMessage('hi');
        } else {
			g_form.setMandatory('justification', true);
			g_form.addErrorMessage('Please fill mandatory fields');
        }
    }



}

 

 

Script Include:

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

	checkPlannedDates: function(){
		
		var start_date = this.getParameter('sysparm_name_date');//getting usersysid from client
		var end_date = this.getParameter('sysparm_name_date_1');
		var business_owner = this.getParameter('sysparm_name_ci');
		var service_owner = this.getParameter('sysparm_name_so');
			
		var isValidWindow = false;
		var est = Packages.java.util.TimeZone.getTimeZone('US/Eastern');
		var startDt = new GlideDateTime(start_date);
		var endDt = new GlideDateTime(end_date);
		
	
		if(((startDt.getDayOfWeekLocalTime()==5 || startDt.getDayOfWeekLocalTime()==6) && (endDt.getDayOfWeekLocalTime()>=5 && endDt.getDayOfWeekLocalTime()<=6)) || ((service_owner.indexOf('Infrastructure Arch')>-1 || business_owner.indexOf('Infrastructure Arch')>-1) && startDt.getDayOfWeekLocalTime()>=5 && startDt.getDayOfWeekLocalTime()<=7 && endDt.getDayOfWeekLocalTime()>=5 && endDt.getDayOfWeekLocalTime()<=7)){
			var estGdt = new GlideDateTime('start_date');
			estGdt.setTZ(est);
			if(startDt.getDayOfWeekLocalTime()==4)
				estGdt.setValue(estGdt.toString().split(' ')[0]+' 19:00:00');
			var estEndGdt = new GlideDateTime('end_date');
			estEndGdt.setTZ(est);
			estEndGdt.setValue(estEndGdt.toString().split(' ')[0]+' 23:59:00');
			if(endDt.getDayOfWeekLocalTime()==7 && (service_owner.indexOf('Infrastructure Arch')>-1 || business_owner.indexOf('Infrastructure Arch')>-1)){
				var hours = 60*60*12;
				estEndGdt.addSeconds(hours);
			}
			if((estGdt.getNumericValue()<=new GlideDateTime('start_date').getNumericValue()) && (estEndGdt.getNumericValue()>new GlideDateTime('end_date').getNumericValue())){
				isValidWindow = true;
				
			}
		}
		return isValidWindow;
	},
	type: 'ChangeManagementClientUtils'
});

 

Thank you!

 

 

1 ACCEPTED SOLUTION

Community Alums
Not applicable

Hi @Shidhi ,

Please find the updated scripts.

Client script-

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var enddate = newValue;
    var startdate = g_form.getValue('start_date');
    var ciSysId = g_form.getValue('cmdb_ci');

    // Retrieve the business owner and service owner asynchronously
    g_form.getReference('cmdb_ci', function(ciRecord) {
        var businessOwner = ciRecord.u_business_owner;
        var serviceOwner = ciRecord.u_service_owner;

        var ga = new GlideAjax('ChangeManagementClientUtils');
        ga.addParam('sysparm_name', 'checkPlannedDates');
        ga.addParam('sysparm_name_date', startdate);
        ga.addParam('sysparm_name_date_1', enddate);
        ga.addParam('sysparm_name_ci', businessOwner); // passing business owner sys_id
        ga.addParam('sysparm_name_so', serviceOwner); // passing service owner sys_id
        ga.getXMLAnswer(checkPlannedDates1);

        function checkPlannedDates1(response) {
            if (response === 'true') {
                g_form.addErrorMessage('hi');
            } else {
                g_form.setMandatory('justification', true);
                g_form.addErrorMessage('Please fill the justification for scheduling change outside change window Friday 7:00 pm ET - Saturday 11:59 pm ET and Saturday 10:00 pm ET to Sunday 12:00 pm ET');
            }
        }
    });
}

 

Script include - 

var ChangeManagementClientUtils = Class.create();
ChangeManagementClientUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    checkPlannedDates: function() {
        var start_date = this.getParameter('sysparm_name_date');
        var end_date = this.getParameter('sysparm_name_date_1');
        var business_owner = this.getParameter('sysparm_name_ci');
        var service_owner = this.getParameter('sysparm_name_so');

        var businessOwnerName = '';
        var serviceOwnerName = '';

        var userGR = new GlideRecord('sys_user');
        
        if (userGR.get(business_owner)) {
            businessOwnerName = userGR.getDisplayValue();
        }

        if (userGR.get(service_owner)) {
            serviceOwnerName = userGR.getDisplayValue();
        }

        var isValidWindow = false;
        var est = Packages.java.util.TimeZone.getTimeZone('US/Eastern');
        var startDt = new GlideDateTime(start_date);
        var endDt = new GlideDateTime(end_date);

        if (((startDt.getDayOfWeekLocalTime() == 5 || startDt.getDayOfWeekLocalTime() == 6) && (endDt.getDayOfWeekLocalTime() >= 5 && endDt.getDayOfWeekLocalTime() <= 6)) ||
            ((serviceOwnerName.indexOf('Infrastructure Arch') > -1 || businessOwnerName.indexOf('Infrastructure Arch') > -1) && startDt.getDayOfWeekLocalTime() >= 5 && startDt.getDayOfWeekLocalTime() <= 7 && endDt.getDayOfWeekLocalTime() >= 5 && endDt.getDayOfWeekLocalTime() <= 7)) {
            
            var estGdt = new GlideDateTime(start_date);
            estGdt.setTZ(est);
            if (startDt.getDayOfWeekLocalTime() == 4)
                estGdt.setValue(estGdt.toString().split(' ')[0] + ' 19:00:00');
            var estEndGdt = new GlideDateTime(end_date);
            estEndGdt.setTZ(est);
            estEndGdt.setValue(estEndGdt.toString().split(' ')[0] + ' 23:59:00');
            if (endDt.getDayOfWeekLocalTime() == 7 && (serviceOwnerName.indexOf('Infrastructure Arch') > -1 || businessOwnerName.indexOf('Infrastructure Arch') > -1)) {
                var hours = 60 * 60 * 12;
                estEndGdt.addSeconds(hours);
            }
            if ((estGdt.getNumericValue() <= new GlideDateTime(start_date).getNumericValue()) && (estEndGdt.getNumericValue() > new GlideDateTime(end_date).getNumericValue())) {
                isValidWindow = true;
            }
        }
        return isValidWindow;
    },
    type: 'ChangeManagementClientUtils'
});

 

If my response has resolved your query, please consider giving it a thumbs up ‌‌ and marking it as the correct answer‌‌!

 

Thanks & Regards,

Sanjay Kumar

View solution in original post

7 REPLIES 7

nikhilsoni973
Tera Contributor
var ci = g_form.getValue('cmdb_ci.u_business_owner.getDisplayValue()');
	var so = g_form.getValue('cmdb_ci.u_service_owner.getDisplayValue()');

instead of this try using

 

g_form.getValue("cmdb_ci.u_business_owner"). //return sys_id

g_form.getDisplayValue("cmdb_ci.u_business_owner") //return display Value

 

Do same for other field which you needed in Script Include

 

Please mark this correct If it is Helpful! 

Community Alums
Not applicable

Hi @Shidhi ,

We can not user g_form.getDisplayValue() in client script for that always use either GlideAjax or getReference

Please try like below script 

var userref = g_form.getReference('caller_id').name;
   alert("Name = " + userref);

This will give the name of current user not sys_id.

Result 

SarthakKashyap_0-1717507060795.png

 

 

So for in your case it would like below 

var ci = g_form.getReference('cmdb_ci.u_business_owner').name;
alert("CI" + ci);

 

Please mark my answer correct and helpful if this works for you

Thanks and Regards 

Sarthak

Hi @Community Alums 

 

I have modified my code below.

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var enddate = newValue;
    var startdate = g_form.getValue('start_date');
    var so = g_form.getValue('cmdb_ci.u_service_owner.getDisplayValue()');
    var ci = g_form.getReference('cmdb_ci.u_business_owner').name;    //used the line given by you
    alert("CI" + ci);

	
    var ga = new GlideAjax('global.ChangeManagementClientUtils'); //script include name
    ga.addParam('sysparm_name', 'checkPlannedDates'); //function name
    ga.addParam('sysparm_name_date', startdate); //passing startdate
    ga.addParam('sysparm_name_date_1', enddate); //passing enddate
    ga.addParam('sysparm_name_ci', ci); //passing ci
    ga.addParam('sysparm_name_so', so); //passing so
    ga.getXMLAnswer(checkPlannedDates1);

    function checkPlannedDates1(response) {
        if (response == 'true') {
            // g_form.setReadOnly('domain', false);
            g_form.addErrorMessage('hi');
        } else {
            g_form.setMandatory('justification', true);
            g_form.addErrorMessage('Please fill the justification for scheduling change outside change window Friday 7:00 pm ET - Saturday 11:59 pm ET and Saturday 10:00 pm ET to Sunday 12:00 pm ET');
        }
    }



}

below is the error i'm getting.

 

Shidhi_0-1717509068741.png

Community Alums
Not applicable

Hi @Shidhi ,

 

The issue is in the way you are trying to access the reference records and also the display part.

Below is the corrected scripts- 

Client Script-

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var enddate = newValue;
    var startdate = g_form.getValue('start_date');

    // Get the sys_id of the cmdb_ci field
    var ciSysId = g_form.getValue('cmdb_ci');

    // Retrieve the business owner and service owner
    g_form.getReference('cmdb_ci', function(ciRecord) {
        var businessOwner = ciRecord.u_business_owner.name;
        var serviceOwner = ciRecord.u_service_owner.name;
        
        var ga = new GlideAjax('ChangeManagementClientUtils');
        ga.addParam('sysparm_name', 'checkPlannedDates');
        ga.addParam('sysparm_name_date', startdate);
        ga.addParam('sysparm_name_date_1', enddate);
        ga.addParam('sysparm_ci_sys_id', ciSysId);
        ga.getXMLAnswer(checkPlannedDates1);

        function checkPlannedDates1(response) {
            if (response == 'true') {
                g_form.addErrorMessage('hi');
            } else {
                g_form.setMandatory('justification', true);
                g_form.addErrorMessage('Please fill the justification for scheduling change outside change window Friday 7:00 pm ET - Saturday 11:59 pm ET and Saturday 10:00 pm ET to Sunday 12:00 pm ET');
            }
        }
    });
}

 

Script Include-

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

    checkPlannedDates: function() {
        var start_date = this.getParameter('sysparm_name_date');
        var end_date = this.getParameter('sysparm_name_date_1');
        var ciSysId = this.getParameter('sysparm_ci_sys_id');

        var business_owner = '';
        var service_owner = '';
        var ciRecord = new GlideRecord('cmdb_ci');
        if (ciRecord.get(ciSysId)) {
            business_owner = ciRecord.getDisplayValue('u_business_owner');
            service_owner = ciRecord.getDisplayValue('u_service_owner');
        }

        var isValidWindow = false;
        var est = Packages.java.util.TimeZone.getTimeZone('US/Eastern');
        var startDt = new GlideDateTime(start_date);
        var endDt = new GlideDateTime(end_date);

        if (((startDt.getDayOfWeekLocalTime() == 5 || startDt.getDayOfWeekLocalTime() == 6) && (endDt.getDayOfWeekLocalTime() >= 5 && endDt.getDayOfWeekLocalTime() <= 6)) ||
            ((service_owner.indexOf('Infrastructure Arch') > -1 || business_owner.indexOf('Infrastructure Arch') > -1) && startDt.getDayOfWeekLocalTime() >= 5 && startDt.getDayOfWeekLocalTime() <= 7 && endDt.getDayOfWeekLocalTime() >= 5 && endDt.getDayOfWeekLocalTime() <= 7)) {
            var estGdt = new GlideDateTime(start_date);
            estGdt.setTZ(est);
            if (startDt.getDayOfWeekLocalTime() == 4)
                estGdt.setValue(estGdt.toString().split(' ')[0] + ' 19:00:00');
            var estEndGdt = new GlideDateTime(end_date);
            estEndGdt.setTZ(est);
            estEndGdt.setValue(estEndGdt.toString().split(' ')[0] + ' 23:59:00');
            if (endDt.getDayOfWeekLocalTime() == 7 && (service_owner.indexOf('Infrastructure Arch') > -1 || business_owner.indexOf('Infrastructure Arch') > -1)) {
                var hours = 60 * 60 * 12;
                estEndGdt.addSeconds(hours);
            }
            if ((estGdt.getNumericValue() <= new GlideDateTime(start_date).getNumericValue()) && (estEndGdt.getNumericValue() > new GlideDateTime(end_date).getNumericValue())) {
                isValidWindow = true;
            }
        }
        return isValidWindow;
    },
    type: 'ChangeManagementClientUtils'
});

 

If my response has resolved your query, please consider giving it a thumbs up ‌‌ and marking it as the correct answer‌‌!

 

Thanks & Regards,

Sanjay Kumar