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

Hi @Community Alums 

 

I tried with your code, it is not working. I tried by giving logs in the script include but can't find any logs in the system logs.

 

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');
        }

		gs.log('business_owner' + business_owner);
		gs.log('service_owner' + service_owner);
		gs.log('end_date' + end_date);

        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'
});

 

Can you please look into it, the values are not getting passed from the client to the script include not even the end date.

 

Thank you!

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

Hi @Community Alums 

 

I was told not to use getXML() instead of getXMLAnswer it seems they don't want a sync call.

 

I have updated my script below but not working always returning false i.e., getting that error message.

 

Also, I am getting empty XML due to that i can't compare the result. Can you please help fixing this issue.

 

 

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.getXML(checkPlannedDates1);

        function checkPlannedDates1(response) {

            console.log(response);
            alert(response);


            var answer = response.responseXML.documentElement.getAttribute('document');
            if (answer === 'true') {

            } else {
                g_form.setMandatory('justification', true);
                g_form.addErrorMessage('Please provide 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_group');
        
        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;
		gs.log('isValidWindow' +isValidWindow);
    },
    type: 'ChangeManagementClientUtils'
});

 

 

 

Getting below for the - alert(response)

 

Shidhi_0-1717594714628.png

 

Thank you!